JMeter(二):jmeter参数化
一、先搞懂:什么是参数化?为什么需要它?
(1)参数化的定义
-
参数化是「用变量替代固定值」的技术,让 JMeter 在压测时自动循环调用不同数据,实现「一套脚本,多组数据」的效果。
-
参数化是一种在软件开发、测试、数据分析等多个领域广泛使用的技术,其核心思想是将一些可能变化的值或变量提取出来,作为参数进行传递和管理,而不是将其硬编码在代码或流程中。
-
示例:登录接口中,用
${username}替代固定的testuser1,脚本可自动调用testuser2、testuser3等不同账号。
(2)什么是参数化
-
批量登录:模拟多用户并发登录,避免单账号登录限制;
-
多数据测试:循环测试不同商品 ID、订单号,覆盖更多场景;
-
动态值生成:随机生成手机号、时间戳、验证码等临时数据;
-
接口关联:提取上一个接口的响应值(如 token、sessionId),作为下一个接口的参数(如下单接口需用登录 token)。
(3)参数化范围
(1)局部参数化:局部参数化是指将参数限定在代码或流程的局部范围中使用,仅对局部的代码块、函数或模块产生影响
(2)全局参数化:全局参数化是指参数的影响范围扩展到整个程序或系统,可以被多个函数、模块或类访问和使用。
(3)具体应用:参数化范围的选择取决于具体的需求和场景,合理选择范围可以提高代码的可读性、可维护性和
安全性,同时在不同领域(如开发、测试、系统配置)中根据实际情况进行调整,以实现最佳的参数管理和使用效果。
(4)常用参数化方案对比
| 参数化方式 | 核心优势 | 适用场景 | 新手友好度 |
|---|---|---|---|
| CSV 数据文件设置 | 支持大量数据、可复用 | 批量登录、多固定参数测试 | ⭐⭐⭐⭐⭐ |
| 用户定义变量 | 配置简单、全局生效 | 固定不变的全局参数(如域名、端口) | ⭐⭐⭐⭐⭐ |
| 函数助手 | 动态生成数据、无需文件 | 随机数、时间戳、随机字符串 | ⭐⭐⭐⭐ |
| JSON 提取器(关联) | 提取响应动态值、接口联动 | 登录→加购→下单等流程压测 | ⭐⭐⭐⭐ |
二、参数化方式及应用
1.用户定义的变量
(1)使用场景:适用于存储一些静态的、整个测试计划中需要多次使用的常量,如服务器地址、端口号、用户名、密码等。
(2)配置步骤:
右键点击测试计划,选择 "添加"->"配置元件"->"用户定义的变量"。
在元件中添加变量名和变量值,如 server_address=127.0.0.1,port=8080。
在需要使用这些变量的地方,使用 ${server_address} 和 ${port} 来引用。
2.用户参数
(1)使用场景:该参数化方式适用于参数取值范围较小的情况,如较少用户登录系统。
(2)配置步骤:
右键点击线程组,选择 "添加"->"前置处理器"->"用户参数"。
在元件中添加变量名和对应的多个用户值,每个线程组会依次使用不同的参数组合
3. CSV 数据文件
(1)使用场景:当需要测试不同的用户登录信息、搜索关键词等情况时,可以将这些数据存储在 CSV 文件中,每行代表一个用户或一个测试用例的数据。
(2)配置步骤:
右键点击测试计划,选择 "添加"->"配置元件"->"CSV 数据文件设置"。
配置文件路径、变量名称(如 username、password 等)、文件编码、分隔符等。
在测试步骤中使用 ${username} 和 ${password} 来获取 CSV 文件中相应列的数据。
4. 函数助手
(1)使用场景:需要生成随机数、唯一标识符、时间戳等情况。
(2)配置步骤:
点击工具菜单中的 "函数助手对话框"。
选择所需函数,如 __Random,设置函数的参数(如最小值、最大值)。
将生成的函数表达式(如 ${__Random(1,100)})复制到需要使用的地方,如请求的参数中,JMeter 会在每次请求时计算该函数生成新的值。
5. JSR223 取样器
(1)使用场景:它支持多种脚本语言,可以使用 不同 脚本在 JMeter 中实现参数化
(2)配置步骤:
右键点击线程组,选择 "添加" -> "取样器" -> "JSR223 取样器"。
在 JSR223 取样器中,比如选择脚本语言为 python(需要安装 Jython 引擎)。
编写 Python 脚本。
6. OS进程取样器
(1)使用场景:它支持多种脚本语言,可以使用不同语言脚本文件在 JMeter 中实现参数化
(2)配置步骤:
比如python脚本,通过python代码写好随机生成客户姓名、身份证号的脚本,以json格式输出
jmeter添加OS进程取样器,并配置路径,编码格式,防止乱码
提取响应数据,设置成变量进行引用
7. 导入python脚本参数化
(1)使用场景:一些jmeter内置参数化满足不了,使用python代码编写脚本进行引用参数化
(2)配置步骤:
通过pycharm编写python脚本,比如随机生成客户姓名、身份证号的脚本
jmeter添加OS进程取样器,并配置路径,编码格式,防止乱码
提取响应数据,设置成变量进行引用
8. 导入Java脚本参数化
(1)使用场景:一些jmeter内置参数化满足不了,使用java代码编写脚本进行引用参数化,常用来加解密
(2)配置步骤:
把编写好的java脚本打成jar包,
在测试计划下导入需要引用的jar包(或者直接放在jmeter目录jmeter\lib\ext路径下)
添加BeanShell 前置或者后置处理程序,
在BeanShell导入我们的jar包,调用里面的方法,把结果通过BeanShell语法设置成变量进行引用
三、避坑指南:常见参数化问题
-
变量名大小写敏感 :
${username}和${UserName}是两个不同变量,需保持一致。 -
CSV 文件路径含中文 / 空格 :报错「File not found」,解决方案:用绝对路径(如
D:\jmeter_data\login.csv),或把 CSV 放在 JMeter 的bin目录。 -
JSON 提取器表达式错误:提取不到值,解决方案:在「查看结果树」的「JSON Path Tester」中验证表达式,确保路径正确。
-
线程组循环次数与 CSV 数据不匹配:数据用完后请求失败,解决方案:勾选「遇到文件结束符再次循环?:True」。
-
参数化变量未替换 :请求中仍显示
${username},解决方案:检查变量名是否正确、元件是否添加到对应线程组下。