Python 测开28期 - TLF - 学习笔记 - 性能测试 - JMeter后置处理器

一、后置处理器作用

用于对响应数据进行关联处理,比如一个请求需要另一个请求的响应数据作为参数,则需要通过后置处理器获取另一个请求的响应数据。

二、后置处理器类型

1. 正则表达式提取器

(1)正则表达式字符

元字符 含义
() 封装待返回的字符串
. 匹配除换行符以外的任意字符
+ 匹配前面的字符串1次或多次
? 匹配前面的字符串0次或1次,在找到第一个匹配项后停止
* 匹配前面出现的字符0次或多次
^ 匹配字符串的开始位置
$ 匹配字符串的结束位置
| 模型选择符,从中任选一个匹配

(2)正则表达式举例

正则表达式内容 含义 模式
<title>(.*)</title> 匹配左边界为<title>、右边界为</title>的所有字符串 贪婪
<title>(.*?)</title> 匹配左边界为<title>、右边界为</title>的第一个符合条件的字符串 懒惰

(3)正则表达式提取器使用方法

需求:将请求1(https://www.sina.com.cn)的响应数据(网页标题,即<title>xxx</title>中的文本)作为请求2(https://www.baidu.com/S)的参数(r_title)进行传递

做法:
Step1: 添加线程组

Step2: 添加 http 请求(请求1)

Step3: 对请求1设置 正则表达式后置处理器

Step4: 添加 http 请求(请求2)并设定参数

Step5: 添加 查看结果树

注意:结果树中传递的参数可能以编码形式出现,如何能查看传递的参数是否正确呢?解决方法有两种:
方法一:添加一个Debug Sampler,然后在结果树中查看

方法二:添加一个BeanShell 后置处理器,以日志方式输出参数内容。


点击界面右上角感叹号,查看日志信息

2. JSON提取器

(1)JSON匹配格式表达方式

eg: $.weather.city 表示匹配 weather(一级节点) → city(二级节点) 的取值

(2)JSON提取器使用方法

需求:将请求1( http://www.weather.com.cn/data/sk/101010100.html )的响应数据( {“weatherinfo”:{“city”:“北京”,“cityid”:“101010100”,“temp”:“18”,“WD”:“东南风”,“WS”:“1级”,“SD”:“17%”,“WSE”:“1”,“time”:“17:05”,“isRadar”:“1”,“Radar”:“JC_RADAR_AZ9010_JB”,“njd”:“暂无实况”,“qy”:“1011”,“rain”:“0”}}中的 city 的取值 )作为请求2(https://www.baidu.com/S)的参数(s_title)进行传递

做法:
Step1: 添加线程组

Step2: 添加 http 请求(请求1)

Step3: 添加 JSON 提取器

Step4: 添加 http 请求(请求2)

Step5: 添加查看结果树

注意:若传递的参数为编码形式,则可参照正则表达式的解决方案。

3. XPath提取器

(1)节点表达方法

符号 含义
节点名称 选取指定名称的所有节点
/ 根节点开始选取对应的节点,相当于绝对路径
// 任意节点开始选取对应的节点,相当于相对路径
. 选取当前节点
.. 选取当前节点的父节点
@属性名 选取指定的属性

(2)谓语

函数 含义
position() 返回当前被处理的节点的位置
last() 返回当前节点集中的最后一个节点
count() 返回节点的总数目
name 返回当前节点的名称
current-date() 返回当前的日期(含时区)
current-time() 返回当前的时间(含时区)
contains(string1,string2) 若 string1 包含 string2 ,则返回 true,否则返回 false

(3)XPath举例

XPath内容 含义
bookstore 选取 bookstore 的所有子节点
/bookstore 选取根节点 bookstore
/bookstore/book 从根节点 bookstore 开始,向下选取名为 book 的所有节点
//bookstore 从任意节点开始选取名为 ookstore 的所有节点
/bookstore//book 从根节点 bookstore 的后代节点中,选取名为 book 的所有子节点
//@lang 选取所有名为 lang 的属性节点
/bookstore/book[1] 选取 bookstore 的第一个 book 子节点
/bookstore/book[last()] 选取 bookstore 的最后一个 book 子节点
/bookstore/book[position<3] 选取 bookstore 的前两个 book 子节点
//title[@lang] 选取所有含属性名 lang 的 title 节点
//title[@lang=‘eng’ 选取所有属性 lang 取值为 eng 的 title 节点

(4)XPath提取器使用方法

需求:将请求1(htttps://www.itcast.cn)的响应数据(网页标题标签中的内容)作为请求2(https://www.baidu.com/S)的参数(t_title)进行传递

做法:
Step1: 添加线程组

Step2: 添加 http 请求

Step3: 添加 XPath 提取器(注意:选中 “Use Tidy” 使 XPath 后置处理器 具备容错能力)

Step4: 添加 http 请求

Step5: 添加查看结果树

注意:若传递的参数为编码形式,则可参照正则表达式的解决方案。