Как протестировать API endpoint (ручку)?

«Как протестировать API endpoint (ручку)?» — вопрос из категории API тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Комплексное тестирование API включает проверку функциональности, надежности, производительности и безопасности.

1. Позитивное тестирование: Проверка корректных запросов с ожидаемым успешным ответом.

import requests

def test_get_user_success():
    # Arrange
    url = 'https://api.example.com/users/1'
    # Act
    response = requests.get(url)
    # Assert
    assert response.status_code == 200
    data = response.json()
    assert data['id'] == 1
    assert 'name' in data
    # Проверка схемы ответа (например, с помощью Pydantic или jsonschema)

2. Негативное тестирование:

  • 400 Bad Request: невалидные параметры, некорректный JSON в теле.
  • 401 Unauthorized / 403 Forbidden: запрос без токена или с недостаточными правами.
  • 404 Not Found: запрос к несуществующему ресурсу.
  • 409 Conflict / 422 Unprocessable Entity: нарушение бизнес-правил.

3. Тестирование граничных значений и валидации: Для параметров типа limit, offset, age проверить минимальные, максимальные и недопустимые значения.

4. Тестирование производительности и нагрузки:

  • Время отклика: с помощью инструментов (k6, Locust, JMeter).
  • Нагрузка: как ведет себя endpoint под пиковой нагрузкой.
  • Устойчивость: проверка на таймауты и частично невалидные данные.

5. Проверка безопасности:

  • Инъекции: попытка передачи SQL, NoSQL, команд в параметрах.
  • Авторизация: попытка доступа к данным другого пользователя (IDOR).
  • Лимиты запросов (Rate Limiting).

6. Проверка документации и контракта: Соответствие ответов спецификации OpenAPI/Swagger. Используйте инструменты контрактного тестирования (Pact).

Инструменты: Postman/Newman (для коллекций), pytest (для Python), RestAssured (для Java).