如何从 REstAssured 中的 Json 数组中获取 JSON 对象
How to fetch JSON object from Json array in REstAssured
谁能帮我解决这个问题:
我不熟悉 RestAssured
并在我们的自动化脚本中处理 JSON
。
我有一个 API
其响应是 JSONArray
即
[{
"id": 1002,
"entity": "testcase",
"fieldName": "TextName",
"displayName": "Name"
}, {
"id": 1003,
"entity": "testcase",
"fieldName": "steps",
"displayName": "TestSteps"
}]
在自动化时,为了验证我需要获取响应。
我已经尝试了下面的但没有得到预期的输出
String API = "/field/entity/testcase"
Response response = given().auth().preemptive().basic("test.manager", "test.manager").when().get(API);
JSONObject JSONResponseBody = new JSONObject(response.body().asString());
Assert.assertEquals(JSONResponseBody.getString("fieldName"), "TextName");
我也试过这个:
JSONArray array = new JSONArray();
JsonObject JSONResponseBody = array.getJsonObject(0);
提前致谢
你应该试试这个:
String API = "/field/entity/testcase"
Response response = given().auth().preemptive().basic("test.manager", "test.manager").when().get(API);
JSONArray JSONResponseBody = new JSONArray(response.body().asString());
Assert.assertEquals(JSONResponseBody.getJsonObject(0).getString("fieldName"), "TextName");
这些验证可以直接使用 restAssured - ValidatableResponseOptions 本身来实现
String API = "/field/entity/testcase"
given().auth().preemptive().basic("test.manager", "test.manager").
when().get(API).
then().assertThat().body("fieldName[0]", equalTo("TextName");
注-
"equalTo" 静态导入后需要验证
import static org.hamcrest.Matchers.equalTo;
正如关于如何做到这一点的另一种想法,我可能会这样做:
ValidatableResponse statusResponse = givenJsonRequest().when()
.get("/field/entity/test").then();
ArrayList<Map<String,?>> jsonAsArrayList = statusResponse.extract()
.jsonPath().get("");
Optional<Map<String,?>> filtered = jsonAsArrayList.stream()
.filter(m -> m.get("fieldName1").equals("Whatever1"))
.filter(m -> m.get("jsonObject").toString().contains("Whatever2"))
.findFirst();
Assert.assertTrue(filtered.isPresent(), "Test expected a result after filtering.");
谁能帮我解决这个问题:
我不熟悉 RestAssured
并在我们的自动化脚本中处理 JSON
。
我有一个 API
其响应是 JSONArray
即
[{
"id": 1002,
"entity": "testcase",
"fieldName": "TextName",
"displayName": "Name"
}, {
"id": 1003,
"entity": "testcase",
"fieldName": "steps",
"displayName": "TestSteps"
}]
在自动化时,为了验证我需要获取响应。 我已经尝试了下面的但没有得到预期的输出
String API = "/field/entity/testcase"
Response response = given().auth().preemptive().basic("test.manager", "test.manager").when().get(API);
JSONObject JSONResponseBody = new JSONObject(response.body().asString());
Assert.assertEquals(JSONResponseBody.getString("fieldName"), "TextName");
我也试过这个:
JSONArray array = new JSONArray();
JsonObject JSONResponseBody = array.getJsonObject(0);
提前致谢
你应该试试这个:
String API = "/field/entity/testcase"
Response response = given().auth().preemptive().basic("test.manager", "test.manager").when().get(API);
JSONArray JSONResponseBody = new JSONArray(response.body().asString());
Assert.assertEquals(JSONResponseBody.getJsonObject(0).getString("fieldName"), "TextName");
这些验证可以直接使用 restAssured - ValidatableResponseOptions 本身来实现
String API = "/field/entity/testcase"
given().auth().preemptive().basic("test.manager", "test.manager").
when().get(API).
then().assertThat().body("fieldName[0]", equalTo("TextName");
注- "equalTo" 静态导入后需要验证
import static org.hamcrest.Matchers.equalTo;
正如关于如何做到这一点的另一种想法,我可能会这样做:
ValidatableResponse statusResponse = givenJsonRequest().when()
.get("/field/entity/test").then();
ArrayList<Map<String,?>> jsonAsArrayList = statusResponse.extract()
.jsonPath().get("");
Optional<Map<String,?>> filtered = jsonAsArrayList.stream()
.filter(m -> m.get("fieldName1").equals("Whatever1"))
.filter(m -> m.get("jsonObject").toString().contains("Whatever2"))
.findFirst();
Assert.assertTrue(filtered.isPresent(), "Test expected a result after filtering.");