
В настоящее время каждый из нас сталкивается с REST API, разрабатывая или используя такие сервисы. Кроме того, мы живем в эру микросервисов, где мы разделяем нашу бизнес-логику на небольшие отдельные сервисы, независимые от каждого. В основном эти сервисы следуют принципам RESTful и используют для связи формат JSON, который стал наиболее широко используемым из-за своей простоты.
pyhttptest — инструмент командной строки для HTTP-тестов через API-интерфейсы RESTful
Благодаря этой утилите можно автоматизировать тестирование в три простых шага.
1. Установка пакета
pip install pyhttptest
2. Опишите ваши тест-кейсы HTTP-запросов для вашей службы API в простейшем и широко используемом формате JSON, записав их в файл.
Примеры определения тест-кейса
- Чтобы отправить HTTP GET запрос
- Создаем JSON файл, например data/test_server_status.json
{ "name": "TEST: Get server status", "verb": "GET", "endpoint": "/get", "host": "https://httpbin.org", "headers": { "Accept-Language": "en-US" } }
- Чтобы отправить HTTP POST запрос
- Создаем JSON файл, например, data/test_create_html_bin.json
{ "name": "TEST: Create an HTML bin", "verb": "POST", "endpoint": "post", "host": "https://httpbin.org", "payload": { "content": "Hello, world!" } }
Пример определения множественных тестов
- Создаем JSON файл, например data/requests.json
[ { "name": "TEST: List all users", "verb": "GET", "endpoint": "api/v1/users", "host": "http://localhost:8085/", "headers": { "Accept-Language": "en-US" }, "query_string": { "limit": 1 } }, { "name": "TEST: Add a new user", "verb": "POST", "endpoint": "api/v1/users", "host": "http://localhost:8085/", "payload": { "username": "pyhttptest", "email": "admin@pyhttptest.com" } }, { "name": "TEST: Modify an existing user", "verb": "PUT", "endpoint": "api/v1/users/XeEsscGqweEttXsgY", "host": "http://localhost:8085/", "payload": { "username": "pyhttptest" } }, { "name": "TEST: Delete an existing user", "verb": "DELETE", "endpoint": "api/v1/users/XeEsscGqweEttXsgY", "host": "http://localhost:8085/" } ]
3.Запускаем команду и получаем отчет
pyhttptest execute data/test_server_status.json
Отчет с одиночного теста

pyhttptest execute data/requests.json
Отчет множественного тестирования

Свойства, которые вы должны указать в .json файле таковы:
- name — имя тест-кейса
- verb — HTTP метод
- endpoint — ресурс, который вы хотите вызвать на сервере
- host — адрес сервера хоста
- headers — HTTP хэдеры. Все доступные поля HTTP поддерживаются
- query_string — строковые параметры после знака вопроса
- payload — загружаемые данные
Best practices
У вас может возникнуть один вопрос: как добавлять, структурировать и организовывать тестовые примеры в мой существующий/новый проект. Каждый проект Python, в котором есть тесты, содержит в своем каталоге проектов папку, которая называется tests/.
По соглашению, из этого каталога лучшие фреймворки, такие как unittest и pytest, ищут и выполненяют определенные тест-кейсы в скриптах Python. Чтобы не связываться с этими тестами и не нарушать соглашения, мы предлагаем создать новый каталог в корневом каталоге вашего проекта с именем live_tests/.
Внутри нового каталога вы можете поместить все файлы .json с определенными тестовыми примерами для API. Благодаря этому ваши тесты будут легко различимы. Но это зависит только от вас!