目录
- 一、提取器
- 1.JSON 提取器的应用场景
- 1.1.提取某个特定值
- 1.1.1.切片提取获取某个位标值
- 1.2.提取多个值
- 1.3.按条件查询按
- 1.3.1.件提取是一个常用的方法
- 1.3.2.还有其余几种用法
- 1.4.提取值组成的列表
- 2. 正则 提取器的应用场景
- 二、CSV 参数化
- 三、beanShell 脚本
- 1.beanShell 引用变量与定义变量与引用函数
- 2.beanShell 打印输出日志
- 3.beanShell 断言
- 四.BeanShell断言的使用
- 4.1 //状态码断言
- 4.2 响应体包含特定内容断言代码:
- 五.使用BeanShell去掉某一个请求头参数
- 六. 上传文件
一、提取器
1.JSON 提取器的应用场景
1.1.提取某个特定值
1.1.1.切片提取获取某个位标值
1.2.提取多个值
1.2.1.提取多个同名值这是查找全部然后按条件提取的方法,如果选择提取全部(-1)传递的时候需要改变成:变量名_1,变量名_2,变量名_matchNr返回你提取的数量,某些场景可以用于确认遍历次数
1.3.按条件查询按
1.3.1.件提取是一个常用的方法
1.3.2.还有其余几种用法
1.3.2.1.
.
.
d
a
t
a
[
?
(
@
.
i
d
>
′
2020
−
06
−
0
1
′
)
]
大小比对
1.3.2.2.
..data[?(@.id > '2020-06-01')] 大小比对 1.3.2.2.
..data[?(@.id>′2020−06−01′)]大小比对1.3.2.2.…data[?(@.id =~ /.会员.?/i)] 包含某些字符
1.3.2.3.$…data[?(@.id)] 这个字段
1.4.提取值组成的列表
1.4.1.提取值组成的列表这个方法能在某些场景使用,不过一般都是单独提取两个值,返回值是 变量 = {“id”: “演示”,“name”: “演示”}
2. 正则 提取器的应用场景
1.提取某个固定的字段的值
二、CSV 参数化
1.csv绝对路径场景
2.csv相对路径场景
2.1.需要注意的是,相对路径是以jmx脚本所存在目录为开始,…/为脚本上级目录
3.csv文件编码
3.1.如果你的csv文件是通过其他方式转译生成的,那么就选择gb2312编码,直接生成的默认选择utf-8
**
**
4.csv变量名称
4.1.设置变量名称
这步是csv自动化的核心,设置变量名称a,b,c,d对应csv文件的第一行,同时勾选忽略第一行,这样我们调整文件时候也方便维护
5.csv允许带引号
5.1.在某些场景,我们断言或者传递参数,其中字符串中包含了引号,这时候我们就需要勾选允许带引号,默认是关闭状态不需要开启
6.csv线程共享
6.1.正常业务下,一个线程组一个csv配置。线程共享一定要选择当前线程组,不然会出现跨线程变量覆盖、参数传递失效等奇怪问题
三、beanShell 脚本
beanShell 脚本 配合 CSV配置让csv文件更精简,更容易维护,同时也能解决环境依赖项的变动问题
1.beanShell 引用变量与定义变量与引用函数
1.1 vars.get(String key); 从jmeter中获得变量值,如:vars.get(“key”); 注意,需要用双引号,不能这样vars.get(“${key}”);
1.2 vars.put(String key,String value); 数据存到jmeter变量中,如vars.put(“key”,“123456”); //变量名需要用双引号
1.3props.get(String key);与vars作用大致相同,vars 只能在当前线程组内使用,props 可以跨线程组使用
2.beanShell 打印输出日志
2.1 log.info("响应状态码" + ResponseCode);
2.2 log.debu("调试信息");
2.3 log.warn("警告信息");
2.4 log.error("出错信息");
3.beanShell 断言
3.1 名称:BeanShell断言组件的自定义名称,见名知意最好。
3.2 注释:即添加一些备注信息,对该BeanShell断言组件的简短说明,以便后期回顾时 查看。
3.3 Reset bsh.Interpreter before each
call:每个BeanShell测试元素都有自己的解释器副本(对于每个线程)。如果重复调用测试元素,例如在循环内,除非选择在每次调用之前重置bsh.Interpreter选项,否则解释器将保留在调用之间。一些长时间运行的测试可能会导致解释器使用大量内存。
由于BeanShell的bsh.Interpreter存在内存泄露,常规方法无法支持长时间的压力测试。JMeter官网推荐,在使用BeanShell进行长时间测试时,打开选项Resetbsh.Interpreterbefore eachcall,则在每次调用BeanShell程序前,都把解释器重置,以释放解释器之前占用的内存。
参数 (-> String Parameters和String[]bsh.args):输入String参数。String
3.4 []bsh.args是主类main函数的形式参数,是一个String 对象数组,可以用来获取命令 行用户输入进去的参数。
3.5 脚本文件:脚本文件(可以填入脚本文件路径),可以点击后边的浏览选择脚本文 件。
3.6 Script (see below for variables that aredefined):编写脚本,参照下文定义的变量 (使脚本文件参照定义的变量来运行)
四.BeanShell断言的使用
4.1 //状态码断言
log.info(“状态码:” + ResponseCode);
if(ResponseCode.equals(“200”)){
Failure=false; // 表示断言成功
}
else{
Failure=true; // 表示断言失败
FailureMessage=“响应状态码非200”; // 自定义的失败信息
}
注:字符串只能使用双引号,字符串相等要使用" “.equals(” ")表达式。
4.2 响应体包含特定内容断言代码:
五.使用BeanShell去掉某一个请求头参数
5.1 使用beanshell预处理程序要删除不需要的请求头参数
import org.apache.jmeter.protocol.http.control.HeaderManager;
// 获得请求头信息
HeaderManager headers = sampler.getHeaderManager();
// 打印删除指定请求头参数前的全部请求头信息
log.info("删除前" + headers.getHeaders().getStringValue());
// 删除请求头指定的信息
sampler.getHeaderManager().removeHeaderNamed("Content-Type");
// 打印删除指定请求头参数后的全部请求头信息
log.info("删除后" + headers.getHeaders().getStringValue());
六. 上传文件
6.1实际抓取接口
6.1.1 jmeter实际配置接口
注意点:1、确定请求头是符合要求的,一般上传接口会变更请求头信息