В этой записке я приведу пару простых примеров использования библиотеки Rest-Assured, предназначенной для тестирования REST сервисов. Она поддерживает все типы запросов: POST, GET, PUT, DELETE, OPTIONS, PATCH, HEAD и может быть использована для проверки ответов по посланным запросам.
В качестве системы сборки я использую Maven, как наиболее простую и удобную. Итак, добавим в pom.xml следующие зависимости:
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>3.0.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180130</version>
</dependency>
Далее привожу собственно примеры кода. Я думаю, комментарии излишни.
Пример посылки GET-запроса
package com.example.tests;
import static io.restassured.RestAssured.get;
import io.restassured.response.Response;
import org.json.JSONArray;
import org.json.JSONException;
import org.testng.Assert;
import org.testng.annotations.Test;
public class RestAssuredTestArticle {
@Test(description = "GET")
public void getRequestExampleTest() throws JSONException {
Response response = get("http://restcountries.eu/rest/v1/name/russia");
JSONArray jsonResponse = new JSONArray(response.asString());
String capital = jsonResponse.getJSONObject(0).getString("capital");
Assert.assertEquals(capital, "Moscow");
}
}
Пример посылки POST-запроса
package com.example.tests;
import io.restassured.RestAssured;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
import org.json.JSONObject;
import org.testng.Assert;
import org.testng.annotations.Test;
import java.util.Date;
public class RestAssuredTestArticle {
@Test(description = "POST")
public void postRequestExampleTest() {
String someRandomString = String.format("%1$TH%1$TM%1$TS", new Date());
JSONObject requestBody = new JSONObject();
requestBody.put("FirstName", someRandomString);
requestBody.put("LastName", someRandomString);
requestBody.put("UserName", someRandomString);
requestBody.put("Password", someRandomString);
requestBody.put("Email", someRandomString + "@gmail.com");
RequestSpecification request = RestAssured.given();
request.header("Content-Type", "application/json");
request.body(requestBody.toString());
Response response = request.post("http://restapi.demoqa.com/customer/register");
int statusCode = response.getStatusCode();
Assert.assertEquals(statusCode, 201);
String successCode = response.jsonPath().get("SuccessCode");
Assert.assertEquals(successCode, "OPERATION_SUCCESS");
System.out.println(response.getBody().asString());
}
}
Комментарии (8)
tuxi
04.02.2019 03:10+1Я так и не понял из статьи, в чем тут плюшки по сравнению с той же Apache Commons например
sshikov
04.02.2019 09:00Плюшки тут есть, в некоторой дополнительной гибкости (но не факт, что оно лучше нового fluent в commons) — и еще REST Assured это именно средство для тестирования, поэтому там проще писать проверки. Но автор этого не раскрыл нифига.
tuxi
04.02.2019 09:35+1А в REST Assured какая-нибудь валидация структуры json присутствует?
Borz
04.02.2019 10:13там не только целиком структуры, но провалидировать можно только часть структуры, а остальные проигнорить. А ещё не важен порядок объявления полей, но можно и потребовать строгую посследовательность. А ещё можно сделать для конкретного поля свою проверку
qwez
04.02.2019 09:24Автор, вы не уловили суть библиотеки Rest-Assured. Посмотрели бы примеры использования для начала. У вас она просто в качестве http-клиента, но это как из пушки по воробьям. Примерно вот так можно переписать ваш первый пример:
import org.hamcrest.Matchers; import org.testng.annotations.Test; import static io.restassured.RestAssured.*; public class TestTest { @Test public void test() { given() .get("http://restcountries.eu/rest/v1/name/russia") .then() .body("[0].capital", Matchers.equalTo("Moscow")); } }
sshikov
04.02.2019 10:08Ну, в качестве клиента она тоже неплоха. Но в целом вы правы — тема не раскрыта совершенно. При этом тут уже была пара постов на эту же тему, гораздо более подробных.
Borz
вместо "someRandomString" можно более осмысленные поля отправлять с помощью Java Faker