六、接口关联
1、什么叫接口关联?
前面的接口响应中,有后面接口请求需要的参数值。那么这两个接口就存在关联
如token(用户鉴权),如果是登录之后才能成功请求的接口必须要接口鉴权,需要再发起请求的时候带上token,通常都是从登录接口的响应参数中获取到的。
在jmeter中,接口关联的处理:在前边的接口中加一个后置处理器。把响应的内容提取出来,用一个变量接收,后边的接口需要用的时候就可以直接引用这个变量获取。
调试取样器:一般用来debug调试,查看中间变量的值,可以帮助我们分析问题
2、jmeter处理接口关联:后置处理器
后置处理器:每个接口发送完请求/收到响应之后要做的事情
2.1 json提取器
当响应体的结构为json时,优先使用json提取器
注:如果你想要提取的数据不在响应体中就不能用json提取器。只能提取响应体不能从其他的部分提取 【局限性】
名称:给这个JSON提取器起一个名字,方便后续在测试计划中识别和管理
Apply to:
- Main sample and sub-samples:对主样本和子样本都应用(如HTTP请求及其所有重定向/附加请求)。
- Main sample only:只对主样本应用(即只对主HTTP请求的响应体提取)。
-
Sub-samples only:只对子样本应用(如重定向或附加请求)。
-
JMeter Variable Name to use(要使用的JMeter变量名)
- 作用:指定要从哪个变量中提取JSON内容。
- 默认:通常是
responseBody
,即从响应体中提取。 - 高级用法:如果你要从其他变量(如前置处理器设置的变量)中提取,可以填写对应变量名。
Names of created variables(创建变量的名称):
- 作用:填写你希望提取出来的数据存储到哪个变量名中。
- 格式:可以填写多个变量名,用分号分隔。
- 举例:
token;gqid
JSON Path expressions(JSON路径表达式)
- 作用:填写对应的JSONPath表达式,用于从JSON数据中提取你需要的字段。
- 格式:每一行对应一个上面变量名的提取规则。
- 举例:
$..token;$..gqid
json的表达式:1、返回的结果是数组【列表】,可能会有多个值,所以要用具体的值要索引取值。2、绝对路径: $.根节点名.二级节点名称,如果有数组/列表,[0]索引取值 -- 不推荐 麻烦3、相对路径: $..末梢节点名称 【递归写法】 -- 推荐
Match No. (0 for Random)(匹配编号,0表示随机)
- 作用:指定提取第几个匹配结果。
- 常用值:
1
:第一个匹配项2
:第二个匹配项0
:随机一个匹配项-1
:全部匹配项(会生成变量名后缀为_ALL的变量)
1、当json提取的结果只有一个值的时候: 填>=0的任何一个数字都可以拿到这个值2、json提取到多个值的时候:在调试取样器里会有jid_MatchNr的值表示这个变量取到多少个值3、正数:如果返回的值的量大于这个正数据,就是对应的位置值【1-第一个值,2-第二个值】4、如果返回值数量小于填的正数,拿到的就是空。5、负数: 返回所有的值,变量名称加上下划线和数字, 引用的时候,变量名称已经变了。【name_1,name_2】此时直接写这个变量名取不到任何数据的。![]()
Compute concatenation var (suffix ALL)(计算拼接变量(后缀ALL))
- 作用:如果选择,JMeter会把所有匹配项拼接成一个字符串,变量名会加
_ALL
后缀。 - 用途:适合需要所有匹配项合并时使用。
Default Values(默认值)
- 作用:如果JSON路径没有提取到内容,变量会被赋予这个默认值。
- 建议:可以填写如
NOT_FOUND
等,便于判断提取失败。 - 写多个json提取式的时候,一定要填默认值了,不填会报错。
2.2 正则表达式
可以提取响应/请求中的任何信息,相对会复杂一些
配置与json提取器差不多,这里不赘述
正则表达式写法: 左边界(正则式)右边界1、以小括号为标识,小括号里面的内容,就是正则式 --正则表达式匹配的内容就是提取的内容2、要准确的写出左边界和右边界3、正则式要写正确: 推荐使用万能匹配表达式 (.*?) 正则提取器中的模板:写法 $数字$4、如果正则表达式里有多个括号(),那么这个模板就是取第几个括号的值;![]()
正则表达式语法手册:
https://tool.oschina.net/uploads/apidocs/jquery/regexp.html
2.3 边界值提取器
如果能用边界提取器的就用边界替换正则,难度可以大大降低。而且可以从非json格式里取。
与正则提取器很类似,也可以提取请求或响应中信息:
1、准确写出 左边界和右边界即可,没有正则表达式,简单很多。
2、匹配数字: 跟json提取器一致,0随机,正数表示对应位置,负数表示所有。
可以在查看结果中切换展示,测试一些我们需要的信息