You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对嵌套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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:27:03