我们在进行接口测试时,避免不了一个接口的请求参数是另一个接口的响应数据,所有这里需要使用提取器来从响应报文中获取我们想要的内容。
常用的提取器
1、正则表达式提取器
2、XPath提取器
3、JSON提取器
正则表达式提取器
添加方式:
线程组--> HTTP请求 --> (右键添加) 后置处理器 --> 正则表达式提取器
正则表达式提取器主要是根据前后的字符串来找到要提取的内容,一般用(.+?)代替要提取的内容,下面是一个登陆信息的返回值,我将用它演示如何提取nickname的值
首先为请求添加正则表达式取样器
说明:
引⽤名称:其他请求引⽤的参数名称,引⽤格式${参数名}
正则表达式
():括起来的部分就是要提取的。
.:匹配任何字符串。
+:⼀次或多次。
*: 0次或多次
?:不要太贪婪,在找到第⼀个匹配项后停⽌ abcbcd (a(.*?)->a)(a(.+?)->ab)
模板:⽤$$引⽤起来,如果在正则表达式中有多个正则表达式,则可以是$1$、$2$等等,表
示解析到的第⼏个值给引⽤名称
匹配数字: -1全部,0 随机,1第⼀个2第⼆个,以此类推
缺省值:如果参数没有取得到值,那默认给⼀个值让它取
在调试取样器中查看一下取值情况
从上图可以看出,实际获取nickname的value的是nickname_1,所以大家在引用参数时,应使用${nickname_1}
xpath提取器
该提取器一般只用于web页面
添加方式:
线程组--> HTTP请求 --> (右键添加) 后置处理器 --> xpath提取器
这里以获取百度的title作为演示,首先为请求添加一个xpath提取器
说明:
useTidy:如果勾选此项,则使⽤Tidy将HTML响应解析为XHTML。当需要处理的⻚⾯是HTML格式时,必须选中该选项,当需要处理的⻚⾯是XML或XHTML格式(例如,RSS返回)时,取消选中该选项。
引⽤名称:保存xpath语句截取结果的变量名
XPath Query:⽤于提取值的XPath表达式(大家需要了解一下XPath路径表达式,可参考:https://www.cnblogs.com/zhaozhan/archive/2009/09/09/1563617.html)
匹配数字:如果XPath路径查询导致许多结果,则可以选择提取哪个作为变量
0:表示随机
-1:表示提取所有结果(默认值),它们将被命名为<变量名>_N(其中N从1到结果的个数) X:表示提取第X个结果。如果这个x⼤于匹配项的数量,则不返回任何内容。将使⽤默认值
缺省值:参数的默认值
在调试取样器中查看一下取值情况
JSON提取器
添加⽅式:
线程组--> HTTP请求 --> (右键添加) 后置处理器 --> Json提取器
这里使用json提取器从登录接口的响应信息中提取token的值,首先为接口添加json提取器
说明:
Names of created variables:存放提取出的值的参数
JSON Path Expressions:JSON路径表达式
Match No: 取第⼏个值,-1取全部,整数按顺序取值
Jsonpath语法
JsonPath语法:
假设:jsondemo: {data:{"name":"lili"}, lis: [{"age":19}, {"age":18}]}
$.key.key:取字典包字典的值
取name: $.data.name # 结果取到name的值 lili
$.key.[*].key : 取字典包列表的值
取列表中所有age的值: $.lis.[*].age # 返回所有age值 [19,18] 放到⼀个列表中
$.key.[索引].key: 取列表中某个字典的值,索引从0开始
取列表中第⼀个字典的age值: $.lis.[0].age. # 返回值为第⼀个字典的age,19
$..key: 递归查找json中所有的某个key的值
取所有的age: $..age # 返回值 [19,18]
jsonpath官⽅帮助⽂档:
https://github.com/json-path/JsonPath
调试取样器
添加调试取样器后在察看结果树中能看到我们在脚本中所有参数化变量所取的值,这样有利于我们排错,如下图,在调试取样器中,可看出,token已经取出。