Сегодня 7-й день соревнований по тестированию API, организованных WeTest Auckland. Задача дня - выполнить первое упражнение, размещенное в Клубе (Министерство тестирования).

Цель упражнения - выполнить несколько простых вызовов API (например, запросы GET / POST), используя как можно больше инструментов.

Первый шаг - найти общедоступный API, который мы можем использовать для практики тестирования API (это было рассмотрено на пятом дне испытания). Вот список на выбор:

  • Http://wiremock.org / - Симулятор для API на основе HTTP. В Wiremock замечательно то, что он предоставляет примеры размещенного API, которые мы можем вызывать напрямую. Это также позволяет нам изменять эти API через простой пользовательский веб-интерфейс. Зарегистрируйтесь и попробуйте
  • Https://reqres.in/ - reqres также предоставляет размещенный REST API, похожий на Wiremock. Однако он не дает возможности изменять API и не требует регистрации.
  • Https://thronesdb.com/api - Публичный API ThronesDB доступен для всех, кто имеет доступ к сервисам, связанным с игровыми данными ThronesDB. Этот API предназначен для использования в сборщиках колод, базах данных карт, менеджерах турниров…
  • Https://developer.marvel.com/docs - в основном предоставляет только API-интерфейсы, использующие метод GET, и требует регистрации для генерации ключа API.
  • JSON Server. Это удобно, если вы хотите создать поддельный REST API локально.

Более общедоступные API-интерфейсы можно найти по адресу: https://www.ministryoftesting.com/dojo/lessons/websites-to-practice-testing?s_id=19103

В этом посте я буду использовать http://reqres.in для отправки запросов GET и POST.

Теперь, когда мы проверили несколько общедоступных API, пришло время изучить несколько инструментов, которые мы могли бы использовать. Ниже приведены несколько популярных инструментов:

Ниже приведены несколько статей, в которых перечислены инструменты тестирования API:





В сегодняшнем упражнении я буду использовать Postman для отправки запросов GET и POST на https://reqres.in/.

ПОЛУЧИТЬ ЗАПРОС

  • Это первый API, который мы будем тестировать: https://reqres.in/api/users?page=1. Это вернет объект JSON, показывающий переданную страницу, количество пользователей, возвращенных страницей, общее количество пользователей, общее количество страниц и массив JSON, который содержит информацию о пользователях на предоставленной странице (попробуйте в браузер, если хотите ... или проверьте, как отправить запрос в Postman в следующих шагах):

  • В почтальоне создайте новый запрос:
  • Введите имя и описание запроса, добавьте его в коллекцию и нажмите «Сохранить»:

  • Обратите внимание, как на левой панели отображается запрос с указанным именем.
  • Обратите внимание, что запрос содержит поле МЕТОД, для которого по умолчанию установлено значение GET; давайте не будем его менять, так как первый отправляемый запрос - это GET-запрос:

  • Теперь введите URL-адрес запроса в поле рядом с полем МЕТОД: https://reqres.in/api/users
  • На вкладке «Параметры» под URL-адресом введите параметры. В нашем случае мы передаем параметр page и нажимаем Отправить:

  • Мы только что отправили первый запрос GET и получили ответ JSON. Обратите внимание, что статус - 200 🎉 - этот запрос не требует никаких заголовков или аутентификации.
  • Давайте подтвердим ответ. Перейдите на вкладку «Тесты». Можно написать непосредственно сценарий проверки или выбрать несколько предопределенных сценариев на правой панели на вкладке «Тесты» (выберите: код состояния: код 200) - нажмите кнопку «Отправить»
  • Обратите внимание, что у нас есть результаты теста, показывающие 1/1 на панели ответов. Этого не было до добавления утверждения

  • Давайте напишем небольшой скрипт, который проверяет правильность информации, возвращаемой в ответе - убедитесь, что общее количество равно 12.
pm.test("Total number of users is 12", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.total).to.eql(12);
});

pm.test просто сообщает почтальону, что это тест. Первый параметр - это сообщение, которое будет отображаться для идентификации теста, а второй параметр - это функция, выполняющая операцию проверки.

Внутри функции, переданной в качестве второго параметра в тест, мы сначала сохраняем ответ JSON в переменной с именем jsonData (pm.response.json() возвращает ответ как объект JSON), затем мы утверждаем, что «общий» ключ в jsonData равен равно 12.

  • Нажмите кнопку «Отправить». Обратите внимание, что у нас есть 2/2 на странице результатов теста под панелью ответов.

  • Измените утверждение. Предположим, мы ожидаем, что количество пользователей будет 11.
pm.test("Total number of users is 11", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.total).to.eql(11);
});

Нажмите кнопку «Отправить». Обратите внимание на результаты теста, у нас есть сбой, поскольку возвращенный ответ имеет общее количество, равное 12, в то время как мы ожидаем 11:

Запрос POST

  • Мы собираемся создать нового пользователя, отправив запрос POST. В Postman создайте новый запрос, измените МЕТОД на POST и введите URL: https://reqres.in/api/users
  • В этом случае нам нужно передать имя и работу. В противном случае новый пользователь будет создан без имени. Некоторые API-интерфейсы будут возвращать ошибку о том, что имя не было передано, тот, который мы тестируем, просто создает пользователя без имени (нажмите кнопку «Отправить» и обратите внимание на возвращенный ответ)
  • Давайте отправим имя и задание в рамках этого запроса. Перейдите на вкладку «Тело» на панели запросов → выберите переключатель «необработанный» → выберите JSON (приложение / json) вместо текста → введите {“name":”Ali", “job":"tester"} в поле ниже Это. Нажмите кнопку «Отправить».

Упражнение. Добавьте тесты на вкладке «Тесты», чтобы проверить имя и задание, возвращенные в ответе.

Как мы можем узнать, что отправлять в теле запроса? это должно быть частью документации API (для этого запроса его можно найти по адресу: https://reqres.in)

Кроме того, если у вас недостаточно документации, запрос можно проверить в инструментах разработчика Chrome и импортировать в почтальон. Пожалуйста, проверьте следующие шаги:

  • В Chrome перейдите по адресу: https://reqres.in
  • Откройте инструменты разработчика и перейдите на вкладку «Сеть».
  • На веб-странице нажмите «Создать» API.
  • Обратите внимание, что на вкладке «Сеть» появился запрос «пользователи», щелкните его.
  • Обратите внимание на все детали запроса (если вы прокрутите вниз вкладку «Заголовки», вы увидите что-то под названием «Данные запроса», это то, что должно быть в разделе «Тело» в Postman ».

Если вы не хотите копировать / вставлять эту информацию в Postman, вы можете сделать следующее:

  • Щелкните правой кнопкой мыши запрос пользователя в инструментах разработчика Chrome.
  • Щелкните пункт меню Копировать.
  • Нажмите Копировать как cURL
  • Перейти к почтальону
  • Нажмите кнопку «Импорт» (находится рядом с кнопкой «Создать»).
  • Выберите «Вставить необработанный текст» и вставьте скопированный cURL.
  • Нажмите "Импортировать".
  • Теперь у вас есть готовый запрос со всеми необходимыми данными, измените значения по своему усмотрению.

На гифке ниже показаны описанные шаги:

Я надеюсь, что это было полезно.

Как насчет того, чтобы попытаться отправить запросы с помощью другого инструмента. В следующем разделе мы создадим поддельные API и будем использовать HTTP-клиент для отправки запросов. Для этого мы будем использовать JavaScript.

Предварительные условия:

  • Установите Node.js и npm. На этом сайте объясняется, что это такое и как их установить https://www.npmjs.com/get-npm
  • Установите IDE / Editor / Terminal - я использую Vscode, у него есть встроенный терминал

Создайте поддельный API

  • В вашем терминале создайте новый каталог. Назовите его «поддельный API»: mkdir fake-api
  • Перейдите в новый каталог: cd fake-api
  • Давайте настроим новый пакет npm. Запустите npm init. Сохраняйте значения по умолчанию, когда задают вопросы об инициализации
  • Установите json-server: npm install json-server
  • Внутри вашего каталога создайте новый файл JSON. Назовите его books.json. Введите информацию о книгах в следующем формате JSON:
{
"books": [
{
"id": 1,
"title": "Harry Potter and the Philosopher's Stone",
"Author": "J.K. Rowling"
},
{
"id": 2,
"title": "Harry Potter and the Chamber of Secrets",
"Author": "J.K. Rowling"
},
{
"id": 3,
"title": "Harry Potter and the Prizoner of Azkaban",
"Author": "J.K. Rowling"
},
{
"id": 4,
"title": "Thinking, Fast and Slow",
"Author": "Daniel Kahneman"
}
]
}
  • Возможно, вы уже знаете, что будут делать наши API. Запустите сервер JSON: ./node_modules/.bin/json-server — watch books.json
  • В браузере введите следующий URL-адрес: http: // localhost: 3000 / books / 1. Первая введенная книга должна быть возвращена. Это запрос GET
  • Мы также можем отправить запрос POST, передав полезные данные, включая следующий объект json. Попробуйте в Postman
{
 "id": 5,
 "title": "new-title",
 "author": "new-author"
}

Новый объект книги добавляется в массив JSON вbooks.json файле.

Установите и используйте HTTP-клиент

Этот HTTP-клиент может заменить инструмент, который мы обычно используем для отправки и тестирования запросов. Этот вид инструментов не имеет готового списка функций для облегчения тестирования (например, предварительный сценарий, тесты и т. Д., Например, предоставляемые Postman). Однако достаточно отправить запрос.

Возможна интеграция таких инструментов, как Cucumber, с HTTP-клиентом, что позволит нам писать наши тестовые сценарии в синтаксисе Gherkin. Например, запрос выше будет следующим:

Given There is a list of books in the Library
When the user requests the first book by ID
Then 'Harry Potter and the Philosopher's Stone' will be returned

Этот вид интеграции не рассматривается в этом посте. А пока установим HTTP-клиент (axios) и отправим простой запрос:

  • В новом экземпляре терминала установите axios: npm i axios
  • Создайте новый файл с именем get-book.js, в котором мы собираемся создать запрос GET. Вот содержание:
const axios = require('axios');
//Make a request for a book with a given ID
axios.get('http://localhost:3000/books/3')
.then( function (response) {
//handle success
console.log(response.data);
})
.catch(function (error) {
//handle error
console.log(error)
})
  • Теперь нам нужно запустить этот файл, чтобы отправить запрос. В вашем терминале выполните следующую команду: node get-books.js

  • На следующих этапах рассмотрим POST-запрос, в котором мы собираемся добавить новую книгу в список. Создайте новый файл js с именем add-book.js
  • Добавьте в файл следующее:
const axios = require('axios');
axios.post('http://localhost:3000/books', {
"id": 5,
"title": "My New Book",
"author": "Cool Author"
})
.then(function (response) {
console.log(response.data);
})
.catch(function (error) {
console.log(error.message);
});
  • Заходим в терминал и запускаем node add-book.js
  • Зайдите в свой books.json файл и обратите внимание, как добавилась новая книга

Мы рассмотрели отправку запроса GET и запроса POST с использованием Postman и HTTP-клиента. Это базовая реализация как поддельных API, так и отправленных запросов.

Спасибо за чтение. Ваше мнение очень важно.