前端接口响应中,有后面接口请求所需要的参数值,那么这两个接口就存在关联
例如:token:用户鉴权(令牌),如果登录之后才能操作的接口,必须要接口鉴权,每个接口都需要带上这个token,这个token都是从登录接口返回的结果中获取的
中jmeter中,中前面接口请求中,添加一个后置处理器,把响应的内容提取出来,用一个变量进行接受,后面的接口需要的时候,直接引用这个变量就可以了
例如,后置处理器:每个接口发送完成请求后,会收到响应信息,处理这些响应信息所做的事情
调试取样器:一般用来做debug调试,查看中间变量的值,分析问题可以使用
在jmeter中,后置处理器有:json提取器、正则提取器、边界提取器
json表达式可以使用相对路径、绝对路径进表示
$..末梢节点名称【递归写法】
,推荐使用,例如:$..token
$.根节点.二级节点名称
,如果由数组或列表,使用[0]进行取值# 注意:
如果响应提取的数据不在响应体中,就不能用json提取器
只能提取响应体内容,不能从其他地方提取
使用正则表达式写法【左边界(正则)右边界】
(.*?)
# 常用元字符
`.` 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
# 常用的限定符
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n, m} 重复n到m次
(.*?)几乎能匹配所有的东西
函数就是方法,jmeter是java开发的,所有jmeter的函数其实就是java方法。
${__函数名(,)}
双下划线开否,函数名严格区分大小写,所以,建议中使用函数时,我们使用jmeter自带的函数助手,直接复制,这样可以避免错误变量是不可以调用函数的
# jmeter的函数有两种
* 自带的函数,如果digest函数
* 扩展函数,如安装一些插件才会有,md5函数,需要装jpgc的插件后才有
基础函数
1) ${__Random(,,)}
和 ${__RandomString}
:随机函数
2)${__time(,)}
:获取当前的时间戳函数,默认是时间戳,可以定义格式,年月日、时分秒、年月日-时分秒
3)${__CSVRead(,)}
读取csv文件的函数,可不用,直接使用CSV配置元件来替代
4)${__digest(,,,,)}
进行加密算法的函数,只能做简单的加密,支持MD2、MD5、SHA-1、SHA-224等算法
5)BeanShell
函数与BeanShell
元件
BeanShell
函数或元件6) ${__counter(,)}
:计数函数,用于计数,比如:发送了多少次请求
使用场景
* 统计发送请求的数量
* counter函数生成的数字做变量名的下标,实现循环依次调用多个变量,每个用户名不一样
counter函数有个弊端,只会无限增1,不能限定范围,越界里就取不到数据了,可以使用计数器解决越界问题
7)${__V(,)}
:V函数,是一个拼接函数
${__V(user${num},)}
:拼接变量和变量
${__V(user${__counrer(,)},)}
:拼接变量和函数
8)计数器:不是函数,是一个配置元件—对比counter函数功能
计算器是一个配置元件,可以控制生成一个数字从哪里开始,到哪里结束并间隔多少,限定一个区间,不会像counter函数一样,越界就取不到值里
总结__counter函数与计数器的区别
* __counter函数比较简单,只能从1开始递增,不能设置起始值和最大值,一般只会用来计算没如果用于做下标,可能会越界
* 计数器可以设置起始值和最大值,还能设置数字格式和递增步长,更为灵活,长度可以限定,不会越界
如果统计个数的话,用__counter函数会更好
如果用来作为数字下标,计算器会更好
两个使用都需要借助V函数来拼接
用户定义的变量,是可以跨线程组使用的。用户参数,不能直接跨线程组使用
* 在jmeter中,除了用户定义的变量,其他任何元件中定义的变量名称都是用户参数类型,都不能跨线程组使用
* 所以需要使用属性进行跨线程组的变量调用
Jmeter属性中,分为静态属性、动态属性
属性相关的操作
${setProperty(,,)}
${property(,,)}
或者${__P(,)}
属性的使用场景
9)${setProperty(,,)}
设置动态属性函数
${setProperty(,,)}
函数,才会添加属性成功,如:在调试取样器或后置调试处处理程序里调用这个设置属性函数,执行就可以了10)${property(,,)}
和${__P(,)}
获取属性函数
直接调用jmeter属性的值,因为属性是多个线程组共享的,这样可以实现用户参数跨线程组使用
jmeter工具执行顺序
如果同一个线程组多个取样器,是从上到下依次执行的
如果多个线程组之间,并行执行,没有严格先后顺序
如果设置两个线程组,一个设置属性,一个获取属性,执行过程中,会出现如下现象:
因为jmeter中,默认的时候,多个线程组是并行运行的,有可能出现先后的执行差异
所以获取属性第一次可能没有值,但是不影响性能测试的结果。因为性能测试中执行的总次数远远大于1次
在功能测试中,如果希望每一次都可以取到值,可以设置固定定时器,延迟启动