一、JMeter参数化简介
1.JMeter参数化的概念
当使用JMeter进行测试时,测试数据的准备是一项重要的工作。若要求每次迭代的数据不一样时,则需进行参数化,然后从参数化的文件中来读取测试数据。
参数化:是自动化测试脚本的一种常用技巧,可将脚本中的某些输入使用参数来代替,如登录时利用GET/POST请求方式传递参数的场景,在脚本运行时指定参数的取值范围和规则。
脚本在运行时,根据需要选取不同的参数值作为输入,该方式称为数据驱动测试(Data Driven Test),而参数的取值范围被称为数据池(Data Pool)。
2.JMeter参数化方式之使用场景对比
序号 | 参数化方式 | 使用场景 |
---|---|---|
1 | User Parameters | 适用于参数取值范围很小的时候使用 |
2 | CSV Data Set Config | 适用于参数取值范围较大的时候使用,该方法具有更大的灵活性 |
3 | User Defined Variables | 一般用于Test Plan中不需要随请求迭代的参数设置,如:Host、Port Number |
4 | Function Helper中的函数 | 可作为其他参数化方式的补充项,如:随机数生成的函数${__Random(,,)} |
二、JMeter参数化的4种主要方式
接口代码:
@RestController
@Slf4j
public class UserController {
@GetMapping("/getUser")
public String getUser(String id,String name){
log.info("用户ID:"+id+"->用户名:"+name);
return "用户ID:"+id+"->用户名:"+name;
}
}
-
User Parameters(用户参数)
操作路径:HTTP取样器->前置处理器->用户参数
1)添加User Parameters功能模块
2)设置参数项、参数值
3)配置HTTP取样器界面的请求参数
4)查看请求结果
2.CSV Data Set Config(CSV数据配置)
1)添加CSV Data Set Config模块
操作路径:HTTP取样器-》配置元件-》CSV数据文件配置
2)预先准备好要参数化的所有参数值
3)配置CSV Data来源
Configure the CSV Data Source配置项&功能:
配置项 | 取值or选择项 |
---|---|
Filename | 参数化文件的读取位置,即保存参数化数据的文件目录。可为绝对路径,也可为相对路径。在分布式测试中,还是利用相对路径比较方便,因为有的机器可能安装路径不一样,同时可避免脚本迁移时需要修改路径 |
File Encoding | 编码格式,选择utf-8 |
Variable Names | 变量名称。这里定义的变量名称,后面就可以直接用来引用了。(多个变量名称以逗号隔开,例如username,passwd。参数化文件中同样有对应的两列数据。) |
Ignore first line | 忽略第一行数据(类似LR中第一行数据是变量名称,如果你的配置文件中为了记忆第一行也是变量名,可以选择是忽略该行数据) |
Delimiter | Variable Names中的参数分隔符,默认为英文逗号 |
Allow quoted data | 是否允许引用数据,默认false。选项为“true”时对全角字符的处理可能会出现乱码 |
Recycle on EOF | 是否循环读取参数文件内容;因为CSV Data Set Config一次读入一行,分割后存入若干变量中交给一个线程,如果线程数超过文本的记录行数,那么可以选择从头再次读入 |
Stop thread on EOF | 当Recycle on EOF为False时(读取文件到结尾),停止进程,当Recycle on EOF为True时,此项无意义 |
Sharing mode | 共享模式,即参数文件的作用域:All Threads;Current Thread Group;Current Thread |
4)设置HTTP取样器的请求参数
5)执行Run,查看效果
3.User Defined Variables(用户自定义变量)
1)添加User Defined Variables模块
2)配置用户自定义变量界面中的参数及其值
3)配置HTTP取样器中的请求参数
此时可以联合其他参数化方式(如:User Parameters)一起检测效果
4)执行Run,观察效果
4.函数助手
操作路径:工具菜单-->函数助手对话框
1)选择参数化所需的函数,配置函数
有变量名:
无变量名:
[图片上传失败...(image-289995-1564818269287)]
2)配置HTTP取样器的请求参数
有变量名:
${__Random(1,100,id)}
无变量名:
3)执行Run,查看效果
jmeter参数化的四种方式总结:
1、函数助手_CSVRead的参数化功能相比CSV Data Set Config较弱;
2、CSV 数据设置,适用于参数取值范围较大的时候使用,该方法具有更大的灵活性;
3、用户自定义变量 一般用于test plan中不需要随请求迭代的参数设置;
4、用户参数,适用于参数取值范围很小的时候使用;
三、json数据参数化
@RestController
@Slf4j
public class UserController {
@GetMapping("/getUser")
public String getUser(@RequestBody User user){
log.info("用户ID:"+user.getId()+"->用户名:"+user.getName());
return "用户ID:"+user.getId()+"->用户名:"+user.getName();
}
}
-
采样器添加 HTTP 信息管理器
鼠标右击该采样器,右键菜单选择 "添加" -> 配置元件 -> HTTP 信息头管理器,然后信息头添加一条名称为 Content-Type,值为 application/json 即可:
JSON数据
{
"id":1,
"name":"张三",
"age":20
}
3.结果查看
- 使用CVS参数
CVS文件:
1,张三
2,李四
3,王五
-
查看结果