Поддельная автоматизация API: утверждение не работает - PullRequest
2 голосов
/ 11 января 2020

Я тестирую поддельный API https://jsonplaceholder.typicode.com/

Это следующие задачи:

  • Получить случайного пользователя (userID), распечатать его адрес электронной почты для консоли.
  • Используя этот идентификатор пользователя, получите связанные сообщения этого пользователя и убедитесь, что они содержат действительные идентификаторы сообщений (целое число от 1 до 100).
  • Создайте сообщение, используя тот же идентификатор пользователя с непустым заголовком и телом убедитесь, что возвращен правильный ответ (поскольку это фиктивный API, он может не возвращать код ответа 200, поэтому проверьте документацию).

Ниже приведен код Я написал:

import io.restassured.http.ContentType;
import io.restassured.response.Response;
import io.restassured.path.json.JsonPath;
import org.junit.Assert;
import org.junit.Test;

import static io.restassured.RestAssured.given;
import static org.hamcrest.Matchers.*;

public class JsonPlaceHolder {
    @Test
    public void getUserId() {
        Response response = given().when().get("https://jsonplaceholder.typicode.com/users?id=2")
                .then().assertThat().statusCode(200).extract().response();
        String responseInString = response.asString();
        System.out.println(responseInString);

        // get the user email address from the response
        JsonPath jsonPath = new JsonPath(responseInString);
        String emailAddress = jsonPath.getString("email");
        System.out.println(emailAddress);
    }

    @Test
    public void userPost() {
        Response response = given().contentType(ContentType.JSON).when().get("https://jsonplaceholder.typicode.com/posts?userId=2")
                .then().assertThat().statusCode(200).extract().response();
        String responseInString = response.asString();
        System.out.println(responseInString);

        // Using the userID, get the user’s associated posts and
        JsonPath jsonPath = new JsonPath(responseInString);
        String userPosts = jsonPath.getString("title");
        System.out.println(userPosts);

        // verify the Posts contain valid Post IDs (an Integer between 1 and 100).
        String postId = response.asString();
        System.out.println(postId);
        **response.then().assertThat().body("id", allOf(greaterThanOrEqualTo(1), lessThanOrEqualTo(100)));**
    }
}

Это ошибка утверждения, которую я получаю ниже: Пожалуйста, предложите какое-то решение. Спасибо

java .lang.AssertionError: 1 ожидание не выполнено. JSON идентификатор пути не совпадает. Ожидаемый: (значение, равное или превышающее <1>, и значение, меньшее или равное <100>) Фактический: [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

1 Ответ

1 голос
/ 13 января 2020

Ваша основная ошибка в том, что поле id в теле на самом деле является массивом, а не одним значением, поэтому сопоставление allOf применяется к массиву, а не к каждому отдельному значению, что приводит к ошибке.

Как правило, вам нужно связать everyItem matcher перед:

response.then().assertThat().body("id", everyItem(allOf(greaterThanOrEqualTo(1), lessThanOrEqualTo(100))));
...