使用csv文件配置可以比较灵活的配置多种数据,但是也存在一些缺点: 在csv文件中不能使用参数。比如预定会议室的时候需要有时间戳,这个时间戳不是固定的,之前的解决办法是使用Jmeter中函数助手,但是现在将函数助手生成的函数放在csv文件不能使用。
整理测试点
添加用户参数
在请求上—【右键】—【添加】—【前置处理器】—【用户参数】
根据上面思维导图,先处理时间,下面是定义的三组时间。
starttime | ${intSum(${time(/1000,)},-86400)} | ${__time(/1000,)} | ${intSum(${time(/1000,)},86400)} |
---|---|---|---|
endtime | ${intSum(${time(/1000,)},-79200)} | ${intSum(${time(/1000,)},-7200)} | ${intSum(${time(/1000,)},79200)} |
在请求中使用定义的参数
{
"meetingroom_id":1,
"subject":"周会",
"start_time":${starttime},
"end_time":${endtime},
"booker":"zhangsan"
}
运行
最终脚本
用户参数与csv文件配置一起使用
csv文件中定义了7条数据
用户参数中也定义7条数据
csv文件配置
预定会议室-csv-用户参数.jmx
meetingroom.csv
常见面试问题
- 用户参数设置的变量与CSV数据文件中设置的变量有什么区别?
参考回答:
用户参数可以引用变量。
但是csv文件中只能是固定的值,不能引用变量。
使用场景上: 用户参数适合小数据量,当数据量比较大的时候编辑数据很不方便。
CSV数据文件的数据可以任意多。
- 你是怎么用这两种类型的参数的?
根据业务场景,如果需要使用变量,我会选择 用户参数,如果数据量特别大,我会选择 csv数据文件配置。
如果数据量比较大,又需要用到变量,那我也可以同时选择使用他们两个。
具体使用可以参考上面: https://www.yuque.com/imhelloworld/bypiud/bo2ug7#hwHAd
练习
需要大家做一个 添加会议室接口的异常场景测试。这个里面我不需要测试token,也就是说每次测试都使用上下游传参的方式获取最新的token。
分析:
- 需要使用到上下游传参,上游获取token
- 需要用到数据驱动,不同的数据来测试添加会议室的异常场景。
跨线程组参数传递
操作步骤
- 添加setup线程组。获取token这个操作不是我们本次测试的重点,我需要测试之前获取一下最新的token值。
在setup线程组中添加 获取token的操作,获取完成之后将 token 设置为变量。
- 创建添加会议室请求
使用csv数据驱动, csv文件中只设置 name,capacity字段。
name,capacity
,10
123456789012345679012345678901,10
12345678901234567901234567890,0
12345678901234567901234567890,""
- 解决两个线程组中参数传递问题。
在获取token中 设置json提取器,
添加 beanshell 后置处理程序,使用代码设置 属性。
// 获取json提取器中设置设置token参数
String token = bsh.args[0];
// 将token具体的只设置为属性 属性名为 new_token
props.put("new_token",token);
【测试计划】—【添加】—beanshell 预处理程序。
添加前置处理器— beanshell 前置处理程序。
// 获取名称为 new_token的属性,对应的值赋值给变量 new_token
String new_token = props.get("new_token");
// 将newtoken的值设置为变量,变量名为为token
vars.put("token",new_token);
运行,可以看到结果。 从第一个线程组中将参数传递到第二个线程组。
对应的jmx文件
上下游-csv-参数.jmx
面试问题
- 两个不同的线程组,如何将第一个线程组中json提取器设置的变量,传递给第二个线程组?(线程组间动态传参怎么做?)
关键点:
- beanshell 处理器
参考回答:
- 在上游的线程组中通过json或者正则表达式提取器将要传递的值提取出来。
- 上游接口添加beanshell 后置处理程序,使用代码的方式将值设置为 属性。
- 测试计划上添加 【beanshell 预处理程序】,获取上一步的属性值,设置为变量。
- 下游其它线程组的接口中引用变量即可。