Сегодня 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/.
- Скачайте и установите Postman: https://www.getpostman.com/downloads/
ПОЛУЧИТЬ ЗАПРОС
- Это первый 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, так и отправленных запросов.
Спасибо за чтение. Ваше мнение очень важно.