简介
本文详细介绍如何进行 JMeter的上个接口返回的值作为下一个接口的参数。可以通过 JsonPath 提取所需要的值,功能非常强大(注意取样器返回必须为 Json)。
步骤
① 添加HTTP请求默认值(这步非必要,仅做记录)
测试过程中有多个sampler(取样器)请求时,其中大多数如ip,协议,端口号,编码这些都是重复的,为了以后迁移或修改方便,将相同的参数放到一块,就有了配置元件http请求默认值。请求默认值填写参数后,其它请求中相同的参数可以留空。
参数取值优先级:JMeter优先读取【HTTP请求】中的参数值(比如,在【HTTP 请求默认值】设置了“端口号”为8080,在【HTTP请求】设置了“端口号”为8888,发送请求时,优先获取请求上带的端口号参数8888;若请求上的参数为空,再去获取HTTP 请求默认值的对应参数值。)
②添加请求,添加JSON提取器
JsonPath介绍
JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具, 在Python、Java、Javascript等编程语言中都有相应的类库提供。jmeter的json 提取器元件就可以使用jsonpath语法来截取json文档的内容。
jsonpath语法如下: $:表示根目录 .:表示下一节点 ..:表示任意一个节点 举例如下: $.id : 其中$代表根目录,这个表达式能取出 1712903618659638 $.data.dataList[0].title: 遇到数组,使用[下标] ,这个表达式能取出 默认分类 $..title:任意节点中有title的值,则取第一个值;这个表达式也能取出 默认分类 { "id": "1712903618659638", "state": { "code": 0, "msg": "操作成功" }, "data": { "total": 4, "dataList": [ { "id": 0, "liveId": 2000002089, "level": 1, "parentId": null, "title": "默认分类", "type": "question", "status": null, "sort": null, "createBy": null, "createTime": null, "updateBy": null, "updateTime": null }, { "id": 25912, "liveId": 2000002089, "level": 1, "parentId": null, "title": "题库分类2", "type": "question", "status": "Y", "sort": null, "createBy": 2000002048, "createTime": 1712903568000, "updateBy": 2000002048, "updateTime": 1712903568000 }, { "id": 581, "liveId": 2000002089, "level": 1, "parentId": null, "title": "555", "type": "question", "status": "Y", "sort": null, "createBy": 2000002048, "createTime": 1558686131000, "updateBy": 2000002048, "updateTime": 1558686131000 } ] }, "etag": null }
复制
实例:通过课程信息获取到店铺ID接口的响应body { "data": { "courseConfig": { "businessId": 2100000881350072, "censorStatus": "audit_pass", "displayStatus": null, "updateTime": null, "title": "名称不符合运营规范", "liveId": 2000002089, "shareType": "normal", "imgUrl": "https:xxx/channelNormal.png", "createBy": null, "createTime": null, "updateBy": null, "id": null, "describe": null, "businessType": "channel" } }, "etag": null, "id": "1583460509602802", "state": { "msg": "操作成功", "code": 0 } }
复制
要取liveId字段,所以 JSON Path expressions 设置成 $.data.courseShareConfigPo.liveId
②添加请求,设置变量参数
(1)添加http 请求,并设置为get请求,
(2)打开Body Data(消息体数据)页,设置Json格式,并参数化,使用 ${变量名},取自JSON提取器种的引用名称(Name of created variable) 。
(3)参数化时,可以直接设置,参照如下
通过结果树,我们发现Jmeter发送的getData已经成功读取 [通过课程信息获取到店铺ID] 接口的响应body的liveId数据,并成功参数化。