如何在JMeter中验证JSON响应中所有status字段值仅为A或I?
验证API响应中所有记录的status字段合法性
问题描述
我通过HTTP请求调用GET API,得到如下JSON响应:
{"data":[{"id":"gYmSrePrAJHb8G0TDtsArEwvu","description":"Consultant Charge For MRI Scan","siteId":"HC0115B","episodeTypeId":null,"episodeType":null,"serviceCode":"C0000030","serviceCodeDescription":"Consultant Charge For MRI Scan","duration":30,"backgroundColour":"#788BFF","status":"I","includeInNewICESessions":false,"industryStandardCodeScheme":"ISC"},{"id":"Qcbg7JY83M96XJWDvPjtjZccq","description":"wqYhqXnDmU9cYc1JfZ5r","siteId":"HC0115B","episodeTypeId":"I","episodeType":"Inpatient","serviceCode":"P0006410","serviceCodeDescription":"Prosthesis, LENS SP-PC UV 24 DIOPTER (728A)","duration":26,"backgroundColour":"#E2FDFF","status":"A","includeInNewICESessions":false,"industryStandardCodeScheme":"ISC"}],"success":true,"errors":null,"statusCode":200}其中status字段的合法值为
A(活跃)和I(非活跃),不允许出现其他值。需要验证JSON响应中所有记录(可能有100条以上)的status字段值,请问应使用哪种响应断言,或该如何实现验证?
解决方案
一、使用接口测试工具实现
1. Postman
在请求的「Tests」标签中编写JavaScript脚本,遍历所有记录并校验status值:
// 定义合法的status值集合 const validStatuses = new Set(['A', 'I']); // 获取响应中的data数组 const responseData = pm.response.json().data; // 逐个校验每条记录的status responseData.forEach(item => { pm.test(`记录ID ${item.id} 的status字段合法`, () => { pm.expect(validStatuses.has(item.status)).to.be.true; }); });
脚本会针对每条记录生成独立的校验结果,一旦有非法值就会触发断言失败并提示对应的记录ID。
2. JMeter
- 先添加「JSON Extractor」:设置「JSON Path表达式」为
$..data.*.status,「引用名称」设为statusList,「匹配数字」填-1(提取所有匹配的status值) - 再添加「Response Assertion」:
- 「要测试的字段」选择「JMeter变量」,输入变量名
statusList - 「模式匹配规则」选择「匹配」,输入正则表达式
^[AI]$ - 勾选「响应断言」下除「忽略状态」外的所有结果选项
配置完成后,JMeter会自动校验所有提取到的status值是否符合规则。
- 「要测试的字段」选择「JMeter变量」,输入变量名
二、代码实现(以Python为例)
如果需要自行编码完成请求与校验,可以用requests库实现:
import requests # 发送GET请求 response = requests.get("你的API接口地址") response.raise_for_status() # 确保请求本身无错误 data_list = response.json()["data"] # 定义合法状态集合 valid_statuses = {"A", "I"} # 遍历所有记录进行校验 for record in data_list: current_status = record.get("status") assert current_status in valid_statuses, f"记录ID {record['id']} 的status值 {current_status} 非法,仅允许A或I"
运行代码后,若存在非法status值,会直接抛出AssertionError并定位到具体的问题记录。
内容的提问来源于stack exchange,提问作者Madhu Manohar
相关产品推荐
相关产品推荐

