Извлечение вложенного значения из ответа «Будьте уверены» - PullRequest
0 голосов
/ 20 апреля 2020

Мне нужно извлечь и / или подтвердить значения в «полях» (ie. «Согласие», «количество ошибок») в следующем json теле ответа:

{
"next": null,
"previous": null,
"results": [
    {
        "huid": "be7d-794186bda2d3",
        "name": null,
        "language": "eng",
        "arns": [
            "doodle:123456"
        ],
        "groups": [],
        "fields": {
            "consent": "TRUE",
            "failure_count": 2,
            "timestamp": "2020-04-17T12:04:04.978887Z",
            "registration_type": "normal"
        },
        "blocked": false,
        "stopped": false,
        "created_on": "2020-04-17T12:04:04.978887Z",
        "modified_on": "2020-04-17T12:04:05.692949Z"
    }
]

}

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Вы можете преобразовать ваше тело ответа в jsonpath. После преобразования в jsonpath вы можете использовать приведенный ниже код, чтобы получить значение «согласия», «количества ошибок».

JsonPath responseJsonPath = new JsonPath(jsonString) 
String consent = responseJsonPath.getString("results[0].fields.consent");
int failureCount = responseJsonPath.getInt("results[0].fields.failure_count");

Я думаю, вы получаете ValidatableResponse из API. Пожалуйста, дайте мне знать, если у вас возникнут проблемы.

0 голосов
/ 22 апреля 2020

Если вы ожидаете результат в виде массива, вы можете создать класс pojo. Например:

public class ExampleResponse {
    private Object next;
    private Object previous;
    private Result[] results;

    //add getters and setters

    public class Result {
        private String huid;
        private String name;

        //add getters and setters
    }
}

и затем преобразуйте ваш json ответ на java объект

ExampleResponse pojo = given()
    .when().get(endpoint)
    .then().extract().body().as(ExampleResponse.class);

, после этой манипуляции вы можете извлечь и / или подтвердить любое поле. Например:

...
results[0].isBlocked();
...

Также вы можете попробовать извлечь значение поля, используя метод пути:

...
given()
    .when().get(endpoint)
    .path("results[0].arns[0]");

...

given()
    .when().get(endpoint)
    .path("results[0].fields.timestamp");
...

Если вы ожидали обычного json (без результатов в виде массива), вы можете использовать это методы:

//assert value
given()
    .when().get(endpoint)
    .then()
    .assertThat()
    .body("result.name", equalTo(someName));

//assert response has or not parameter
given()
    .when().get(endpoint)
    .then()
    .body("results", hasKey("name"))
    .body("results", not(hasKey("name")));

Больше примеров на странице использования . И это описание тоже может пригодиться! Надеюсь, что это поможет!

...