Ответ
Для тестирования API в Python используется набор инструментов, покрывающих разные уровни: от простых HTTP-запросов до нагрузочного тестирования и проверки соответствия спецификации.
-
Функциональное и интеграционное тестирование
-
requests+pytest: Классическая связка.requestsотправляет HTTP-запросы, аpytestиспользуется как фреймворк для написания тестов и выполнения проверок (assert).import requests def test_get_user(): response = requests.get("https://api.example.com/users/1") assert response.status_code == 200 assert response.json()["data"]["id"] == 1 -
httpx: Современная альтернативаrequestsс поддержкой HTTP/2 и асинхронных запросов. Часто используется для тестирования ASGI-приложений (FastAPI, Starlette). -
TestClient(для веб-фреймворков): Инструменты, встроенные во фреймворки (например,TestClientв FastAPI илиtest_client()во Flask), позволяют тестировать приложение в памяти, без запуска реального HTTP-сервера. Это быстрее и надежнее для интеграционных тестов.# Пример для FastAPI from fastapi.testclient import TestClient from my_app import app client = TestClient(app) def test_root_endpoint(): response = client.get("/") assert response.status_code == 200 assert response.json() == {"message": "Hello World"}
-
-
Нагрузочное тестирование
-
Locust: Популярный инструмент для имитации большого количества одновременных пользователей. Тесты пишутся на Python, что позволяет создавать сложные сценарии поведения пользователей.from locust import HttpUser, task class WebsiteUser(HttpUser): @task def get_posts(self): self.client.get("/posts")
-
-
Тестирование на основе спецификаций
Schemathesis: Автоматически генерирует и выполняет тесты на основе спецификации API (OpenAPI/Swagger). Этот подход (property-based testing) помогает находить множество пограничных случаев и несоответствий документации.# Запуск тестов для API, описанного в swagger.json schemathesis run --checks all http://example.com/swagger.json
Помимо Python-инструментов, часто используются GUI-клиенты, такие как Postman или Insomnia, для ручного тестирования и отладки API.