在jmeter接口测试的过程中,经常会遇到了需要关联参数的情况,在接口响应后,提取请求返回结果中的某个值或者某一组值,作为下一个接口的入参,例如token或者其他变量,需要设置成全局变量或者局部变量来给下个接口去调用。
1.jmeter这个工具提供了比较多的提取元件,例如正则表达式提取,当然还有专门处理JSON格式响应数据的元件【JSON Extractor】,本次主要使用的就是json提取器,以下是接口的详细操作:
一、在接口请求内添加 JSON Extractor,路径如下

二、JSON Extractor里面需要填写变量路径(JSON PATH),如果不清楚这个提取表达式是否能够将想要的数据
提取出来,可以在请求时,在响应结果里去测试下提取表达式,jmeter默认的查看结果树是text文本格式,需要
快速看出变量的层级,修改显示格式改成JSON Path Tester,可以在这里直接对结果进行调试。
例如我需要提取:access_token 这个变量
那他的表达式就是:$..access_token
可以看到已经提取到数据了
 json表达式语法规则如下表: 
三、在json 提取器里完善需要填写的参数
 如果不放心,还可以在请求后添加一个Debug Sampler 查看我们需要提取的数据是否提取成功 
四、提取的参数需要跨线程来使用,那就需要提取的参数设置为 全局变量 操作如下:
1.在提取数据的这个线程组添加 BeanShell取样器(这个元件与HTTP请求元件是同级),添加路劲如下:  2.我们需要运行函数助手,利用工具自带的函数 __setProperty 将获取到的参数设为属性  填写需要的参数  3.在将刚刚利用函数生成的字符串粘贴到 BeanShell取样器 的脚本区域  4.在使用函数助手中的 __P函数来调用Jmeter属性,获取传递给下个接口的参数值  其中${__P(access_token,)}就是所取到的变量,可以在另一个线程中使用该变量。
五、给到其他线程组使用刚刚提取的参数,就可以了

|