Как провести комплексное тестирование веб-сервиса (REST API)?

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

Ответ

Тестирование REST API охватывает несколько критичных уровней качества.

1. Функциональное тестирование

Проверка, что API работает согласно спецификации (OpenAPI/Swagger).

  • Валидация кодов состояния: 200 OK, 201 Created, 400 Bad Request, 404 Not Found, 500 Internal Server Error.
  • Валидация схемы ответа: Соответствие JSON-схеме (формат, типы данных, обязательные поля).
  • Проверка бизнес-логики: Корректность вычислений и преобразований данных.

Пример теста на Python (pytest + requests):

import pytest
import requests

BASE_URL = "https://api.example.com"

def test_create_and_get_item():
    # 1. Create
    payload = {"title": "Test Item"}
    create_resp = requests.post(f"{BASE_URL}/items", json=payload)
    assert create_resp.status_code == 201
    item_id = create_resp.json()["id"]

    # 2. Read
    get_resp = requests.get(f"{BASE_URL}/items/{item_id}")
    assert get_resp.status_code == 200
    assert get_resp.json()["title"] == payload["title"]

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

  • Замер времени отклика (latency).
  • Нагрузочное тестирование для определения пределов пропускной способности (с помощью Locust или JMeter).

3. Тестирование безопасности

  • Аутентификация/Авторизация: Проверка токенов (JWT), API-ключей, ролей.
  • Валидация входных данных: Защита от инъекций (SQL, NoSQL), XSS.
  • Чувствительные данные: Отсутствие в логах паролей, токенов.
  • Заголовки безопасности: Наличие Content-Security-Policy.

4. Надежность и интеграция

  • Тестирование ошибок: Поведение при неверных данных или недоступности зависимых сервисов.
  • Повторные запросы (idempotency): Для методов PUT, DELETE.

Инструменты: Postman/Newman (для коллекций), pytest (для автоматизации), OWASP ZAP (для безопасности).