在Jmeter里面我们主要通过后置处理器来实现关联,主要有两种方式,一种是JSON提取器,一种是正则表达式处理器
1、JSON提取器
json提取器是专门针对json数据进行提取的后置处理器,用$代表json数据,配置基本和正则表达式提取器类似
场景:当前有两个接口,get接口可以获取到一些详细信息,其中返回字段里面包含skuName,login接口需要用到get接口中返回的skuName做为用户名传入
get接口返回值:
{"code":"0","message":"success","data":{"id":1,"name":"testname1","info":"testinfo"}}
Names of created variables:引用名称,匹配后的结果,保存到一个参数中,如param
JSON Path expressions:json路径表达式,直接通过`$`表达式提取,直接使用`.`语法,如果遇到数组,直接用`.*`
Match No:匹配数字,由于在关联场景中,有可能会获取到多个数据,所以此处需要指定取哪个值,0代表随机取值,1获取第一个值,2获取第二个值,3获取第三个值。。。如果想要获取所有的值则写-1
Default Values:默认值
如果uName里面存的是数组,可以通过调试取样器来帮助我们调试
线程组–>添加–>取样器–>调试取样器
此处配置不用修改
uName_1:即提取出来的值,如果有多个值,会显示uName_2,uName_3。。。
uName_matchNr:表示数组长度
在json提取器中如果你想要获取多个字段,则需要添加多个json提取器
2、正则表达式提取器
在用jmeter编写脚本的过程中,我们也可以通过正则表达式来获取http请求返回的数据,它可以处理所有的文本处理器,不在局限于json了
在正则表达式提取器中可以分别提取主体、信息头、url等中的信息
引用名称:匹配后的结果,保存到一个参数中,如param
正则表达式:支持正则表达式的语法,用()来进行分组,指定要获取的内容,如":(.+?),正则表达式写的时候可以分为三个步骤
第一步,先把要提取的数据的左右边界,包括要提取的数据都拷贝过来
"name":"testname1",
第二步,把你想要的数据用括号括起来
"name":"(testname1)",
第三步,把你想要的数据用正则表达式代替,此处给大家推荐一个万能表达式`.+?`
"name":"(.+?)",
模板:由于正则表达式中可能存在多个括号,需要知道取哪一组数据,$1$表示取匹配到的第一组数据,$2$为第二组
匹配数字:当某组数据中包含多少个参数时,0代表随机,1代表该组的第一个参数,2表示第二个。。。-1代表获取全部的参数,这个时候,引用名称就变成了参数数组,可以通过param_n来获取指定的参数,当有多组数据时,第一组为param_1_g1,第二组为param_1_g2
常用的正则表达式