【发布时间】:2020-04-20 07:32:54
【问题描述】:
我有几个 JSON 对象作为响应,每个对象都包含特定的 id。
{
"data": [{
"id": 1,
"status": {
"id": 0
}
},
{
"id": 2,
"status": {
"id": 0
}
},
{
"id": 3,
"status": {
"id": 0
}
}
]
}
我需要测试每个data.status.id 都有一定的价值:
then().
spec(basicResponse).
body("data.status.id", equalTo(0));
但是equalTo 匹配器一次将预期值与找到的 id 的整个列表相比较。不是每个人都单独找到 id。
java.lang.AssertionError: 1 expectation failed.
JSON path data.status.id doesn't match.
Expected: 0
Actual: [0, 0, 0]
如何在不将响应数据提取到 List 的情况下对其进行测试,然后通过 foreach 或类似的方式对其进行检查?
int statusNeeded = 0;
List<int> idsList = given().
get(Endpoints.GetCampaigns).
then().
extract().body().jsonPath().getList("data.status.id");
for (int statusId: idsList)
if(!statusNeeded.equals(statusId)) Assert.fail("Some id is not " + statusNeeded);
【问题讨论】:
-
您是否需要验证状态 ID 是否具有某个值,或者您是否需要验证它不应为 0 以外的任何其他值?
-
其次,我需要验证每个状态ID都有0值。
标签: java rest-assured matcher hamcrest rest-assured-jsonpath