
В настоящее время каждый из нас сталкивается с 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. Благодаря этому ваши тесты будут легко различимы. Но это зависит только от вас!

