一、后置处理器作用
用于对响应数据进行关联处理,比如一个请求需要另一个请求的响应数据作为参数,则需要通过后置处理器获取另一个请求的响应数据。
二、后置处理器类型
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: 添加查看结果树
注意:若传递的参数为编码形式,则可参照正则表达式的解决方案。