19. REST API. Продолжаем изучать - qa-guru/knowledge-base GitHub Wiki
Как отправлять API-запросы без браузера
Обычно API-запросы отправляются силами браузера. К примеру, пользователь нажимает на сайте кнопку, браузер отправляет запрос, получает ответ, преобразует его и на странице происходят изменения. Для написания тестов часто удобно отправлять запросы самостоятельно. Для этих целей предусмотрено несколько способов.
Ищем нужный запрос и отправляем через консоль
Сперва необходимо найти нужный запрос. Это позволит в дальнейшем вызывать его без браузера. Сделать это можно с помощью инструментов разработчика в самом браузере.
К примеру, нам надо получить API-запрос, который отправляется после нажатия кнопки Add to cart
на сайте Demo Web Shop.
Для этого переходим на сайт, открываем инструменты для разработчиков и переходим во вкладку Network
.
Нажимаем кнопку Add to cart
и отслеживаем запросы в меню. Можно заметить, что после нажатия кнопки сайт отправил несколько запросов и один из них подходит нам. Обычно по названию запроса можно легко идентифицировать необходимый запрос.
Нажимаем на запрос с помощью правой кнопки мыши, переходим во вкладку Copy
и копируем его в нужном формате. Если вы работает на Unix-подобной системе, то следует выбрать Copy as cURL
, если на Windows, то можно выбрать Copy as PowerShell
.
После этого можно открыть терминал, вставить скопированный запрос и выполнить его. Если после этого обновить страницу, то её содержимое поменяется.
Postman
Postman — это HTTP-клиент для тестирования API. Инструмент позволяет проверять API-запросы, оптимизировать и отлаживать их. Также Postman позволяет в более удобном виде узнать что делает конкретный API-запрос.
Postman можно использовать с помощью браузера или нативного приложения, которое доступно для Windows, macOS и Linux. Для доступа к инструменту необходимо пройти регистрацию, а приложение можно скачать и установить по ссылке.
Для добавления нового запроса нажимаем кнопку Import
.
Далее переходим во вкладку Raw Text
, вставляем скопированный запрос и нажимаем Import
.
Теперь, когда мы будем нажимать на кнопку Send
, Postman самостоятельно будет отправлять запрос и выводить ответ в консоль.
Также во вкладке Headers
можно отключить лишние заголовки, которые не влияют на корректность ответа. Вычислить такие можно с помощью отключения и проверки каждого.
Отправляем запросы в коде
Тест с отправкой запросов из кода может выглядеть следующим образом:
public class DemowebshopTests {
@Test
void addToCartAsNewUserTest() {
given()
.contentType("application/x-www-form-urlencoded; charset=UTF-8")
// body, скопированный из вкладки Body в Postman
.body("product_attribute_72_5_18=53" +
"&product_attribute_72_6_19=54" +
"&product_attribute_72_3_20=57" +
"&addtocart_72.EnteredQuantity=1")
.when()
// URL из поля Post в Postman
.post("http://demowebshop.tricentis.com/addproducttocart/details/72/1")
.then()
.log().all()
// Статус-код запроса
.statusCode(200)
// Ответ запроса
.body("success", is(true))
.body("message", is("The product has been added to your " +
"<a href=\"/cart\">shopping cart</a>"))
.body("updatetopcartsectionhtml", is("(1)"));
}
@Test
void addToCartWithCookieTest() {
Integer cartSize = 0;
ValidatableResponse response =
given()
.contentType("application/x-www-form-urlencoded; charset=UTF-8")
// Cookie из меню заголовков в Postman
.cookie("Nop.customer=88f590c6-59e9-4a55-b243-7395b35f0ce2;")
.body("product_attribute_72_5_18=53" +
"&product_attribute_72_6_19=54" +
"&product_attribute_72_3_20=57" +
"&addtocart_72.EnteredQuantity=1")
.when()
.post("http://demowebshop.tricentis.com/addproducttocart/details/72/1")
.then()
.log().all()
.statusCode(200)
.body("success", is(true))
.body("message", is("The product has been added to your " +
"<a href=\"/cart\">shopping cart</a>"));