Ответ
Выбор библиотеки для HTTP-запросов в автотестах зависит от языка и контекста проекта. Вот мои основные инструменты:
1. Python: requests
- Почему: Это де-факто стандарт. Имеет интуитивно понятный API, отличную документацию и широкую экосистему.
-
Пример использования в тесте с
pytest:import requests import pytest BASE_URL = "https://api.example.com/v1" def test_get_user_returns_200_and_correct_schema(): # Act response = requests.get(f"{BASE_URL}/users/1", headers={"Authorization": "Bearer token123"}) # Assert assert response.status_code == 200 data = response.json() assert "id" in data assert "name" in data assert isinstance(data["id"], int) # ... дальнейшие проверки по JSON Schema или Pydantic модели def test_post_user_creates_resource(): payload = {"name": "John", "email": "john@test.com"} response = requests.post(f"{BASE_URL}/users", json=payload) assert response.status_code == 201 assert "location" in response.headers # Проверяем заголовок с ссылкой на новый ресурс
2. Java: REST Assured
-
Почему: Это не просто HTTP-клиент, а целый DSL (Domain Specific Language) для тестирования REST API. Позволяет в цепочке методов описывать запрос, отправлять его и проводить валидацию ответа.
import static io.restassured.RestAssured.*; import static org.hamcrest.Matchers.*; @Test public void testUserEndpoint() { given() .header("Content-Type", "application/json") .auth().oauth2(accessToken) .when() .get("/api/users/1") .then() .statusCode(200) .body("id", equalTo(1)) .body("name", notNullValue()) .time(lessThan(2000L)); // Проверка времени ответа }
3. Для более сложных сценариев:
- Асинхронные запросы: В Python для асинхронных фреймворков (FastAPI) использую
httpxилиaiohttpв асинхронных тестах. - Генерация клиента: В некоторых проектах мы генерируем типизированного API-клиента на основе OpenAPI/Swagger спецификации (с помощью
openapi-generator), что делает тесты еще более надежными и соответствующими контракту.