Ответ 1
Решено! Я решил это так:
@Test
public void test() {
RestAssured.get("/foos").then().assertThat()
.body("size()", is(2));
}
У меня есть конечная точка, которая возвращает JSON как:
[
{"id" : 4, "name" : "Name4"},
{"id" : 5, "name" : "Name5"}
]
и класс DTO:
public class FooDto {
public int id;
public String name;
}
Теперь я тестирую длину возвращаемого массива json следующим образом:
@Test
public void test() {
FooDto[] foos = RestAssured.get("/foos").as(FooDto[].class);
assertThat(foos.length, is(2));
}
Но есть ли способ сделать это без добавления в массив FooDto? Что-то вроде этого:
@Test
public void test() {
RestAssured.get("/foos").then().assertThat()
.length(2);
}
Решено! Я решил это так:
@Test
public void test() {
RestAssured.get("/foos").then().assertThat()
.body("size()", is(2));
}
Есть способы. Я решил с помощью ниже
@Test
public void test() {
ValidatableResponse response = given().when().get("/foos").then();
response.statusCode(200);
assertThat(response.extract().jsonPath().getList("$").size(), equalTo(2));
}
с использованием restassured 3.0.0
Я решил аналогичную задачу с GPath.
Response response = requestSpec
.when()
.get("/new_lesson")
.then()
.spec(responseSpec).extract().response();
Теперь я могу извлечь тело ответа как String и использовать встроенные возможности GPath
String responseBodyString = response.getBody().asString();
assertThat(from(responseBodyString).getList("$").size()).isEqualTo(YOUR_EXPECTED_SIZE_VALUE);
assertThat(from(responseBodyString).getList("findAll { it.name == 'Name4' }").size()).isEqualTo(YOUR_EXPECTED_SUB_SIZE_VALUE);
В качестве полного примера см. http://olyv-qa.blogspot.com/2017/07/restassured-short-example.html
@Эктор
[
{"id" : 4, "name" : "Name4"},
{"id" : 5, "name" : "Name5"}
]
Это был действительно неудачный пример. Здесь у вас есть матрица [2,2].
Если вы создаете что-то вроде этого:
[
{"id" : 4, "name" : "Name4"},
{"id" : 5, "name" : "Name5"},
{"id" : 6, "name" : "Name6"}
]
Теперь вы все еще пройдете тестирование:
@Test
public void test() {
RestAssured.get("/foos").then().assertThat()
.body("size()", is(2));
}
Подумайте, было ли это намеренно. body("size()",is(2));
представляет body("size()",is(2));
Имейте проверку длины одного узла вместо количества записей в ответе.
Это то, что вам нужно сделать, чтобы получить размер.
Response response =
given()
.header("Accept","application/json")
.when()
.get("/api/nameofresource")
.then()
.extract()
.response();
Получив ответ, вы можете сделать следующее, чтобы получить размер.
int size = response.jsonPath(). getList ("id"). size();
надеюсь это поможет. :)