目前,绝大多数接口协议的响应结果都采用JSON格式,因此在接口测试的场景编排中对于接口的参数提取及引用变得越来越重要。尤其是在实际工作中通常会遇到一些复杂的业务流程,需要对JSON的结果进行特定的提取和引用,以及结合循环控制器使用。
MeterSphere一站式开源持续测试平台的接口测试模块支持JSONPath类型的参数提取,可以提取给定JSON文档的部分内容。本文将分享通过MeterSphere进行接口测试时,用JSON提取数组及引用在实际工作场景中的一些高级用法,为实际的测试工作提效提速。
实际工作中常见的使用场景:
-
提取数组中某个特定值;
-
提取数组中全部值;
-
提取数组中的某几个特定值;
-
按下标引用数组中某个值;
-
引用数组全部值;
-
获取数组元素的数量;
-
ForEach控制器循环引用数组中的值。
注意:示例均以在 MeterSphere 中登录接口为例。
1 提取数组中某个特定值 {#1-%E6%8F%90%E5%8F%96%E6%95%B0%E7%BB%84%E4%B8%AD%E6%9F%90%E4%B8%AA%E7%89%B9%E5%AE%9A%E5%80%BC}
用法举例:输入$.data.groups[n].name提取特定值。
2 提取数组中全部值 {#2-%E6%8F%90%E5%8F%96%E6%95%B0%E7%BB%84%E4%B8%AD%E5%85%A8%E9%83%A8%E5%80%BC}
用法举例:输入$.data.groups[*].name ,并勾选匹配多条以提取全部值。
3 提取数组中的某几个特定值 {#3-%E6%8F%90%E5%8F%96%E6%95%B0%E7%BB%84%E4%B8%AD%E7%9A%84%E6%9F%90%E5%87%A0%E4%B8%AA%E7%89%B9%E5%AE%9A%E5%80%BC}
用法举例:如提取数组中第1个和第3个值,则输入$.data.groups[1,3].name ,并勾选匹配多条。
4 按下标引用数组中某个值 {#4-%E6%8C%89%E4%B8%8B%E6%A0%87%E5%BC%95%E7%94%A8%E6%95%B0%E7%BB%84%E4%B8%AD%E6%9F%90%E4%B8%AA%E5%80%BC}
用法举例:输入${name_1}引用数组中的第一个值。
5 引用数组全部值 {#5-%E5%BC%95%E7%94%A8%E6%95%B0%E7%BB%84%E5%85%A8%E9%83%A8%E5%80%BC}
用法举例:输入${name_ALL}以引用数组中的全部值。
6 获取数组元素的数量 {#6-%E8%8E%B7%E5%8F%96%E6%95%B0%E7%BB%84%E5%85%83%E7%B4%A0%E7%9A%84%E6%95%B0%E9%87%8F}
用法举例:输入${name_matchNr}以获取数组元素的数量。
7 ForEach控制器循环引用数组中的值 {#7-foreach%E6%8E%A7%E5%88%B6%E5%99%A8%E5%BE%AA%E7%8E%AF%E5%BC%95%E7%94%A8%E6%95%B0%E7%BB%84%E4%B8%AD%E7%9A%84%E5%80%BC}
用法举例:添加循环控制器,使用方式可以用${n}或者vars.get("n")进行提取。
9. 按条件提取 {#9.-%E6%8C%89%E6%9D%A1%E4%BB%B6%E6%8F%90%E5%8F%96}
用法举例:提取当前用户已授权的角色中,所有用户组为项目的项目ID集合。
原始 json 如下:
提取表达式
$.data.userGroups[?(@.groupId =="project_admin")].sourceId
之后再循环读取。
备注:关于JSON提取规则及使用方式可参考文章 《JMeter之JSON提取器详解(史上最全)》