Учебное пособие по тестированию REST Assured API
⚡ Умное резюме
Компания REST Assured зарекомендовала себя как JavaБиблиотека с открытым исходным кодом, которая упрощает автоматизированное тестирование REST API. Эта платформа позволяет инженерам по качеству проверять сложные JSON-ответы, заголовки, коды состояния и время ответа, используя понятный синтаксис в стиле BDD с бесшовной интеграцией с Maven.

Что такое будьте уверены?
Будьте уверены позволяет тестировать REST API с использованием Java-библиотек и хорошо интегрируется с Maven. Он имеет очень эффективные методы сопоставления, поэтому утверждение ожидаемых результатов также довольно просто. В Rest Assured есть методы для получения данных практически из каждой части запроса и ответа, независимо от того, насколько сложны структуры JSON.
Для сообщества тестировщиков автоматизированное тестирование API по-прежнему является новым и нишевым явлением. Сложности JSON оставляют тестирование API неисследованным. Но это не делает его менее важным в процессе тестирования. Фреймворк Rest Assured.io упростил использование основных основ Java, что делает его очень желательным для изучения.
Зачем нужна гарантия безопасности?
Представьте, что вы открываете свой Google На картах вы можете найти нужное место и сразу увидеть ближайшие рестораны, варианты поездок от ведущих туристических компаний и множество других вариантов. Мы все знаем, что это не так просто. Google продукты, так как же это работает? Google Удалось ли их отобразить? Для этого используются открытые API этих поставщиков. Если вас попросят протестировать подобную конфигурацию, даже до того, как пользовательский интерфейс будет создан или начнется разработка, тестирование API становится чрезвычайно важным. Многократное тестирование с различными комбинациями данных делает этот случай очень подходящим для автоматизации.
Ранее команды использовали динамические языки, такие как Groovy Для достижения этой цели использовался язык Ruby, что оказалось непростой задачей. Поэтому функциональное тестирование API не получило широкого распространения.
Однако, с помощью Rest Assured автоматизированное тестирование API и отправка простых HTTPS-запросов с удобными для пользователя настройками становятся простыми, если у пользователя есть базовые знания в этой области. JavaRest Assured полезен для понимания тестирования API и интеграционного тестирования. Он обеспечивает высокую степень уверенности в бэкэнде, в то время как тестировщики фронтенда могут сосредоточиться на пользовательском интерфейсе и операциях на стороне клиента. Rest Assured — это проект с открытым исходным кодом, и постоянное добавление методов и библиотек сделало его отличным выбором для автоматизации API.
REST Assured vs Postman: Ключевые отличия
И REST Assured, и Postman Проверка REST API — это сложная задача, однако каждый инструмент подходит для разных этапов жизненного цикла тестирования. Выбор подходящего инструмента зависит от навыков вашей команды, масштаба проекта и потребностей в интеграции.
| Аспект | Будьте уверены | Postman |
|---|---|---|
| Тип | Java библиотека для автоматизации на основе кода | API-клиент с графическим интерфейсом пользователя и поддержкой скриптов. |
| лучший вариант использования | Конвейеры непрерывной интеграции и наборы регрессионных тестов | Ручное исследование и быстрая проверка API |
| Требование навыков | Основные Java необходимые знания | Минимальный код; используется JavaФрагменты скриптов |
| Отчетность | Интегрируется с TestNG, JUnitи Очарование | Встроенные сводки о выполнении программ через интерфейс командной строки Newman. |
Многие команды используют Postman для ранней прототипной моделиping и переключитесь на REST Assured для автоматической регрессии, как только API заработает.tracТ стабилизируется.
Как настроить Rest Assured.io с помощью Eclipse
Настройка REST Assured включает в себя три основные зависимости: JavaIDE и Maven. Выполните следующие шаги, чтобы избежать ошибок сборки в дальнейшем.
Шаг 1) Установите Java. Обратитесь к этому инструкция
Шаг 2) Загрузите IDE для начала: затмение
Шаг 3) Установите Maven и настройте свое затмение. Ссылаться здесь.
Настройка Будьте уверены
- Создайте проект Maven в своей IDE. Мы используем IntelliJ, но аналогичная структура будет доступна в любой другой IDE.
- Откройте файл POM.xml.
Структура проекта для рабочей среды Maven с поддержкой REST Assured
Для отдыха.io: Для Java версия < 9 пользователей:
Добавьте приведенную ниже зависимость в ваш POM.xml:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>json-path</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>xml-path</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>json-schema-validator</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency>
Для отдыха.io: Для Java Пользователи версии 9+:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured-all</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency>
Поиск и устранение неисправностей:
Если вы видите ошибки и не уверены, правильно ли были загружены зависимости, выполните следующие действия:
- Выполните сборку Maven, чтобы импортировать все зависимости. Инструкции по настройке Maven вы найдете здесь. Guru99.
- Если ошибки сохраняются, выполните команду Maven clean, а затем Maven install. Сборка должна завершиться без ошибок.
- Добавьте следующие импорты в ваш файл конфигурации. Java Проверьте класс и убедитесь в отсутствии ошибок компиляции.
import io.restassured.RestAssured.*; import io.restassured.matcher.RestAssuredMatchers.*; import org.hamcrest.Matchers.*;
Первый простой сценарий «Будьте уверены»
После установки зависимостей вы можете написать свой первый скрипт. Фреймворк использует подход разработки, основанный на поведении (BDD), и читается почти как английский язык.
Синтаксис:
Синтаксис Rest Assured.io — наиболее читаемая часть фреймворка, поскольку он очень похож на BDD и понятен.
Given().
param("x", "y").
header("z", "w").
when().
Method().
Then().
statusCode(XXX).
body("x", "y", equalTo("z"));
Объяснение:
| Code | объяснение |
|---|---|
| Данный() | Ключевое слово 'Given' позволяет задать фон. Здесь передаются заголовки запроса, параметры запроса и пути, тело запроса и cookie. Это необязательно, если эти элементы не требуются в запросе. |
| Когда() | Ключевое слово 'when' обозначает предпосылку вашего сценария. Например, когда вы получаете/отправляете/размещаете что-либо, сделайте что-нибудь другое. |
| Метод() | Замените это любой из операций CRUD (get/post/put/delete). |
| Затем() | Здесь размещаются ваши условия утверждения и сопоставления. |
Теперь, когда у вас есть необходимая структура и некоторые знания синтаксиса, давайте создадим наш первый простой тест. Ничего страшного, если структура покажется вам новой, по мере того, как вы будете писать код и анализировать каждую строку, вы освоитесь.
Что ты принесешь?
Откройте браузер и нажмите – https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Убедитесь, что вы видите что-то, как показано ниже.
Пример ответа API, полученного с помощью REST Assured.
В случае возникновения ошибки в браузере при попытке получить ответ на запрос:
- Проверьте, использовали ли вы протокол HTTPS или HTTP. В настройках вашего браузера могут быть ограничения на доступ к небезопасным сайтам.
- Проверьте, не блокирует ли какой-либо прокси-сервер или брандмауэр открытие веб-сайта вашим браузером.
*Внимание – Вы не использовали здесь никаких заголовков, ни тела сообщения, ни cookie-файлов. Это было URLИ вы получаете контент из API, а не публикуете или обновляете существующий контент. Это делает запрос GET. Запомните это, чтобы лучше понять наш первый тест.
Цель вашего теста:
Цель сценария — вывести на консоль IDE тот же вывод, который вы получили в браузере через Rest Assured.
Давайте закодируем это с помощью следующих шагов:
Получение тела ответа
Шаг 1) Создайте класс с именем «myFirstRestAssuredClass».
Шаг 2) Создайте метод с именем «getResponseBody».
Шаг 3) Аналогично структуре, изученной ранее, при появлении определенных условий и последующем вводе следующего кода:
данный(). -> Не требуются заголовки, нет параметров запроса или пути.
when(). -> Не заданы конкретные условия.
получать('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). -> только URL необходимо предоставить.
then(). -> Никаких специальных утверждений не требуется.
log().all() -> После получения всего ответа, выведите в лог ответ, заголовки и, по сути, всё, что возвращает запрос.
public static void getResponseBody(){
given().when().get("https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log()
.all();
}
Теперь обратите внимание, что URL Используемый запрос длинный и менее читабельный. Присмотревшись, вы заметите, что используются 3 параметра запроса:
- Пользовательский ИД
- Пароль
- Аккаунт_Нет
Rest Assured позволяет передавать каждую часть (запрос, путь, параметр заголовка) отдельно, что делает код более читаемым и простым в сопровождении. Кроме того, при необходимости можно параметризовать данные из внешнего файла.
Для использования параметров запроса мы возвращаемся к нашему определению синтаксиса и видим, что все они передаются как часть заданного.
public static void getResponseBody(){
given().queryParam("CUSTOMER_ID","68195")
.queryParam("PASSWORD","1234!")
.queryParam("Account_No","1")
.when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log()
.body();
}
**Обратите внимание, что мы использовали «body» вместо «all»; это помогает нам...**tracтолько основную часть ответа.
Выход:
Получение кода статуса ответа
Следующий метод, который мы реализуем с помощью скрипта, — это получение кода состояния и добавление утверждения для его проверки.
Шаг 1) Создайте метод с именем getResponseStatus().
Шаг 2) Используйте ту же структуру запроса, что и выше. Скопируйте и вставьте его.
Шаг 3) Вместо того чтобы записывать это в лог, используйте метод `getStatus`.Code«Встроенный метод Rest Assured для получения значения кода состояния».
Шаг 4) Чтобы проверить, равен ли ваш код состояния 200, используйте ключевое слово assertThat().statusCode(ожидалCode).
**Примечание - URL — это переменная, используемая для простоты. URL содержит весь API-запрос URL.
public static void getResponseStatus(){
int statusCode= given().queryParam("CUSTOMER_ID","68195")
.queryParam("PASSWORD","1234!")
.queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
System.out.println("The response status is "+statusCode);
given().when().get(url).then().assertThat().statusCode(200);
}
Выход:
Деловая потребность
Одно из основных правил автоматизации заключается в том, что мы должны ставить контрольные точки, чтобы тест продолжался только при выполнении всех необходимых условий. При тестировании API самая основная проверка — это проверка того, находится ли код состояния запроса в формате 2XX.
Полный код на данный момент:
import java.util.ArrayList;
import static io.restassured.RestAssured.*;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
public class myFirstRestAssuredClass {
final static String url="https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1";
public static void main(String args[]) {
getResponseBody();
getResponseStatus();
; }
//This will fetch the response body as is and log it. given and when are optional here
public static void getResponseBody(){
given().when().get(url).then().log()
.all();
given().queryParam("CUSTOMER_ID","68195")
.queryParam("PASSWORD","1234!")
.queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log().body();
}
public static void getResponseStatus(){
int statusCode= given().queryParam("CUSTOMER_ID","68195")
.queryParam("PASSWORD","1234!")
.queryParam("Account_No","1")
.when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
System.out.println("The response status is "+statusCode);
given().when().get(url).then().assertThat().statusCode(200);
}
}
*Заметка:
- В данном сценарии код 200 означает успешный ответ. Иногда может потребоваться, чтобы запрос завершился неудачей, в этом случае можно использовать коды 4XX или 5XX. Попробуйте изменить код состояния, указав недопустимые параметры, и проверьте результат.
- Когда мы утверждаем условие, на консоли не будет печати, если не произойдет ошибка.
Скрипт для получения различных частей ответа
Помимо тела ответа и кода состояния, REST Assured также предоставляет доступ к заголовкам, времени ответа и типу контента через цепочки вызовов.tracметоды Tor. Ключевое слово 'ex'tract' необходим для получения этих конкретных деталей.
заголовок
Rest Assured — очень простой язык, и получение заголовков так же просто. Имя метода — headers(). Как и раньше, мы создадим отдельный метод, делающий то же самое.
public static void getResponseHeaders(){
System.out.println("The headers in the response "+
get(url).then().extract()
.headers());
}
Обратите внимание, что вызов `given().when()` здесь пропущен, и строка кода начинается с `get()`. Это связано с тем, что перед отправкой запроса и получением ответа не выполняется никаких предварительных условий или проверок. В таких случаях их использование необязательно.
Выход:
Деловая потребность:
Довольно часто для последующего запроса потребуется использовать токен авторизации или cookie сессии, и эти данные обычно возвращаются в заголовках ответа.
Время отклика
Чтобы получить время, необходимое для получения ответа от серверной части или других нижестоящих систем, Rest Assured предоставляет метод timeIn с подходящей единицей времени, чтобы получить время, необходимое для возврата ответа.
public static void getResponseTime(){
System.out.println("The time taken to fetch the response "+get(url)
.timeIn(TimeUnit.MILLISECONDS) + " milliseconds");
}
Выход:
Деловая потребность:
Очень важной характеристикой тестирования API является время ответа, которое измеряет производительность приложения. Время, затраченное на ваш запрос, может быть больше или меньше в зависимости от скорости вашего интернета, производительности API в данный момент, нагрузки на сервер и других факторов, влияющих на время.
Content-Type
Тип содержимого возвращаемого ответа можно получить с помощью метода «contentType()».
public static void getResponseContentType(){
System.out.println("The content type of response "+
get(url).then().extract()
.contentType());
}
Результат
Деловая потребность:
Иногда получение типа контента имеет решающее значение для обеспечения отсутствия уязвимостей в системе безопасности, связанных с междоменными угрозами, и для подтверждения того, что передаваемый контент соответствует стандартам API.
Получить отдельный элемент JSON
Исходя из предоставленного ответа, вам необходимо рассчитать общую сумму. Вам нужно найти каждую сумму и сложить их.
Шаги:
Шаг 1) Поле amount находится внутри массива с ключом “statements”, который, в свою очередь, находится в списке с ключом “result”.
Шаг 2) Rest Assured предоставляет механизм для доступа к значениям в API с помощью параметра «path».
Шаг 3) Путь для получения значений выглядит так: “result.statements.AMOUNT”. Представьте это как XPath в Selenium.
Шаг 4) Получите все значения в коллекции, затем пройдите циклом по всем значениям, чтобы вычислить сумму.
public static void getSpecificPartOfResponseBody(){
ArrayList<String> amounts = when().get(url).then().extract().path("result.statements.AMOUNT") ;
int sumOfAll=0;
for(String a:amounts){
System.out.println("The amount value fetched is "+a);
sumOfAll=sumOfAll+Integer.valueOf(a);
}
System.out.println("The total amount is "+sumOfAll);
}
Примечание: Поскольку значение суммы имеет строковый тип данных, для суммирования мы преобразуем его в целое число.
Выход:
Лучшие практики автоматизации тестирования REST Assured
Как только вы освоите основы, применение дисциплинированных шаблонов обеспечит надежность вашего набора тестов по мере расширения API-интерфейса. Приведенные ниже методы помогут командам избежать нестабильных тестов и дополнительных затрат на обслуживание.
- Централизуйте базу URL: Храните базовый URI и токены аутентификации в одном классе конфигурации или файле свойств. Это позволяет избежать дублирования и упрощает переключение между средами.
- Используйте спецификации запроса и ответа: Создавайте многократно используемые объекты RequestSpecBuilder и ResponseSpecBuilder. Это позволяет сократить количество шаблонного кода, когда многие тесты используют общие заголовки или утверждения.
- Проверка JSON-схемы: Объедините REST Assured с модулем json-schema-validator для подтверждения соответствия.tracЦелостность схемы. Проверки схемы выявляют критические изменения до того, как они достигнут конечных потребителей.
- Вынести тестовые данные во внешний носитель: Храните полезные данные в JSON-файлах или используйте поставщиков данных из TestNGЗакодированные данные быстро устаревают.
- Проведите независимые тесты: Каждый тест должен самостоятельно создавать и удалять свои данные. Зависимые от порядка выполнения наборы тестов непредсказуемо завершаются с ошибкой при параллельном запуске CI.
- Выборочный сбор журналов событий: Используйте log().ifError() в стабильных тестовых наборах и log().all() во время отладки. Подробные логи замедляют работу конвейеров CI и скрывают реальные проблемы.
- Подключитесь к CI/CD: Запускайте REST-тесты с помощью Maven Surefire или Failsafe. JenkinsИспользуйте GitHub Actions или GitLab. Запускайте проверки работоспособности (smoke checks) для каждого коммита и полную регрессионную проверку в течение ночи.
Внедрение этих навыков на раннем этапе превращает автоматизацию API в долгосрочный актив, а не в хрупкое узкое место.


