如何对嵌套JSON结构的API响应中FP为FOP2的相关字段做断言
接口响应断言实现方案
核心逻辑为:先从响应数组中过滤出FP等于FOP2的对象,再逐层校验其下SP数组、Exam数组的字段即可,以下是不同常用工具的实现方式:
1. Postman 脚本断言(接口调试场景)
直接在Postman的Tests标签页粘贴以下代码即可:
// 将响应转换为JSON对象 const resJson = pm.response.json(); // 过滤出FP=FOP2的目标条目 const targetItem = resJson.find(item => item.FP === 'FOP2'); pm.test("存在FP为FOP2的条目", () => { pm.expect(targetItem).to.exist; pm.expect(targetItem.SMO).to.eql(false); }); pm.test("SP与Exam字段校验", () => { const targetSP = targetItem.SP[0]; pm.expect(targetSP.name).to.eql("FOP2"); const targetExam = targetSP.Exam[0]; pm.expect(targetExam.Marksguid).to.eql("8c49f158-7286-4f15-904c-564b41966b6b"); pm.expect(targetExam.apiUrl).to.eql("test1"); pm.expect(targetExam.interval).to.eql(65); pm.expect(targetExam.schemaVersion).to.eql("1.2"); pm.expect(targetExam.authenticationType).to.eql("Basic"); });
2. Python + pytest 实现
用requests发送请求后使用以下断言逻辑:
import requests def test_fop2_api_assert(): resp = requests.get("替换为你的接口地址") res_json = resp.json() # 过滤目标条目 target_item = next(item for item in res_json if item["FP"] == "FOP2") # 根层级字段校验 assert target_item["SMO"] is False # SP字段校验 target_sp = target_item["SP"][0] assert target_sp["name"] == "FOP2" # Exam字段校验 target_exam = target_sp["Exam"][0] assert target_exam["Marksguid"] == "8c49f158-7286-4f15-904c-564b41966b6b" assert target_exam["apiUrl"] == "test1" assert target_exam["interval"] == 65 assert target_exam["schemaVersion"] == "1.2" assert target_exam["authenticationType"] == "Basic"
3. Java + RestAssured 实现
import static io.restassured.RestAssured.given; import static org.hamcrest.Matchers.equalTo; public class ApiTest { public void checkFop2Field() { given() .when() .get("替换为你的接口地址") .then() .body("find {it.FP == 'FOP2'}.SMO", equalTo(false)) .body("find {it.FP == 'FOP2'}.SP[0].name", equalTo("FOP2")) .body("find {it.FP == 'FOP2'}.SP[0].Exam[0].Marksguid", equalTo("8c49f158-7286-4f15-904c-564b41966b6b")) .body("find {it.FP == 'FOP2'}.SP[0].Exam[0].apiUrl", equalTo("test1")) .body("find {it.FP == 'FOP2'}.SP[0].Exam[0].interval", equalTo(65)) .body("find {it.FP == 'FOP2'}.SP[0].Exam[0].schemaVersion", equalTo("1.2")) .body("find {it.FP == 'FOP2'}.SP[0].Exam[0].authenticationType", equalTo("Basic")); } }
注意事项:如果实际返回中SP或Exam数组存在多个元素,只需把取下标[0]的逻辑改为循环遍历所有元素校验即可。
内容的提问来源于stack exchange,提问作者dhiwakaran arumugam
相关产品推荐
相关产品推荐

