目录
JMeter(一):基础概念
JMeter(二):配置元件
JMeter(三):变量参数化
JMeter(四):监听器
JMeter(五):脚本录制
JMeter(六):断言
Jmeter(七):逻辑控制器
JMeter(八):定时器
后置处理器
后续操作的子件集合,对请求响应做一些处理,或者抓取响应数据,提取变量方便后续使用
场景:B测试需要使用A接口返回的数据,故需要对A接口的响应报文进行后置处理
比如一个登录接口,登录成功后有响应信息,响应里有特殊标志,如 IsSuccess=True、Message=登录成功,我们可以根据标志来判断,把标志打印出来或复制出来,此时就需要用到后置
1、JSON Extractor
路径:右击添加-->后置处理器-->JSON Extractor
作用:获取json格式的响应数据
演示案例:查看天气预报
1.1、添加HTTP请求,设置IP、方法、路径以及参数信息
1.2、添加JSON Extractor
- variable names:变量名称,提取到的值存放在该变量中,后续通过该变量即可引用提取到的数据
- json path expressions:格式为 $.XX.XX.XX,$.必须要的,若有很多层级,用英文句号.隔开,若为空即默认取第一个数据
- Default Value:未取到值的时候默认值
1.3、添加Debug PostProcessor
1.4、请求页面的注释,参数化,此处为${result}
1.5、添加查看结果树
延升:若要提取多个值,怎么处理?
解决办法:Variable names 、JSON Path expressions及Default Values这3个字段的数量一定要一致,中间用英文分号;分隔,其中Default Values的值可以根据需要设置
若取不到变量的值,它会根据Default Values定义的赋值为默认值,本次练习设的是0,也可以改成其他值
有些Json数据里面还嵌套了列表,那么用 $.XX[n].XX表示,n=0表示取第一行,n=1表示取第二行,以此类推
(PS:数组的索引从0开始表示第一个)
2、XPath Extractor
路径:右击添加-->后置处理器-->XPath Extractor
作用:获取xml格式的响应数据
- 引用名称:抓取数据或响应后需要保存到哪个变量中
- xpath query:路径 ,格式为 //节点.节点
- 匹配数字:0随机,-1取所有值,以数组形式存储1;2.....**
- 缺省值:未取到值的时候默认值
3、正则表达式提取器(万能提取)
在测试过程中,许多接口的入参不是事先预知的,而是前一个接口的响应结果的某个字段(接口之间的依赖关系),这就需要用户能够动态的提取前一个接口的响应参数并传递出来。
如果用户需要将该字段提取出来作为下一个接口的入参,需要在该接口节点下添加一个“正则表达式提取器”
路径:右击添加-->后置处理器-->正则表达式提取器
- 名称:可以写成名称+注释,方便识别,比如图中的可以改成正则提取申请单号
- 引用名称:其他地方引用提取值的变量名称
- 正则表达式:描述字符串排列的一套规则,用于将需要的数据提取出来(字符串的匹配)
PS:()表示提取,要提取的内容需要用小括号括起来 - 模板:表示使用提取到的第几个值,如果前面的正则表达式取了不止一个参数(多个括号括起来),那么这里需要指定参数的组别
格式为$n$,可以是$1$,$2$等,表示解析到的第几个值给str。正则表达式的提取模式,值是从1开始的,0则对应的是整个匹配的表达式。如对于表达式s(.*) 值0对应str,值1对应tr
$-1$:表示取所有值
$0$:表示随机取值
$1$:表示取第1个
$2$:表示取第二个
以此类推 - 匹配数字(0代表随机 ):0 代表随机取值,-1 代表全部取值,其余正整数代表将在已提取的内容中,第几个匹配的内容
- 缺省值:如果正则表达式没有查找到值,则使用此缺省值
比如提取页面上的申请单号438,看到DeBug的输出是正确的,如下:
假如匹配数字填的是-1,通过${variablename_1}的方式来取第1个匹配的内容,${variablename_2}来取第2个匹配的内容
PS:*和*?是不一样的,在上述的例子中使用正则<title>(.*?)</title>(懒惰模式)或者正则<title>(.*)</title>(贪婪模式)都是可行的
懒惰模式:也就是非贪婪模式,采用的是就近匹配原则,一旦找到结尾字符,就停止搜索
贪婪模式:找到一个结尾字符后,不会停止,直到找不到结尾字符为止,才会停止搜索
关于正则表达式,演示字符串:abcdcdcdefgphhhp345pythony_py
符号 | 含义 | 举例 | 输出 |
---|---|---|---|
. | 除换行符以外的任意字符 | .python... | 5pythonny_p |
^ | 边界限定,字符串的开始位置 | ^abc | abc |
$ | 边界限定 , 字符串的结束位置 | py$ | py |
* | 限定符, 0次、1次或多次前面的原子 | py.*y | pythony_py |
? | 限定符,0次、1次前面的原子,在找到第一个匹配项后停止 | py.*?y | pythony |
+ | 限定符,1次或多次前面的原子 | py+n | python |
{n} | 限定符,前面的原子刚好出现n次 | ph{2} | phh |
{n,} | 限定符,前面的原子至少出现n次 | ph{2,} | phhh |
{n,m} | 限定符, 前面的原子至少出现n次,至多出现m次 | ph{1,2} | phh |
| | 模式选择符,从中任选一个匹配 | python|ph | ph |
() | 模式单元符,将原子组合使用 | (cd){1,} | cdcdcd |
4、CSS/JQuery Extractor
路径:右击添加-->后置处理器-->CSS/JQuery Extractor
只支持css,不支持JQuery
5、Debug PostProcessor
路径:右击添加-->后置处理器-->Debug PostProcessor
设置为True时可以打印相关信息,一般保持默认设置
作用:一般在需要获取响应数据(正则、XPath、JSON提取器)时添加,方便在调试脚本时实时查看是否正确的提取到了所要的信息,不过还得添加查看结果树,因为脚本执行以后需要到结果树中查看打印信息