Гарантирует ли HTTP-статус 200 (OK), что запрос работает корректно?

«Гарантирует ли HTTP-статус 200 (OK), что запрос работает корректно?» — вопрос из категории API тестирование, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, статус 200 лишь означает, что сервер успешно обработал запрос и отправил ответ, но не гарантирует корректность данных или бизнес-логики.

Что может пойти не так при статусе 200:

  • Некорректная структура JSON/XML: ответ приходит, но не соответствует ожидаемой схеме (отсутствуют обязательные поля, неверный тип данных).
  • Неверные данные: например, запрос на создание пользователя вернул 200, но в ответе id пользователя равен null или 0.
  • Нарушение бизнес-правил: запрос на списание средств вернул 200, но баланс не изменился.
  • Неполные данные: запрос на получение списка элементов вернул 200 с пустым массивом [], когда ожидался непустой список.

Поэтому в API-тестах необходимо проверять не только статус, но и тело ответа (response body):

import requests
import jsonschema
from pydantic import BaseModel, ValidationError

# 1. Проверка статуса
response = requests.get('https://api.example.com/v1/users/123')
assert response.status_code == 200

# 2. Проверка структуры через JSON Schema
schema = {
    "type": "object",
    "properties": {
        "id": {"type": "integer"},
        "name": {"type": "string"},
        "email": {"type": "string", "format": "email"}
    },
    "required": ["id", "name", "email"]
}
jsonschema.validate(instance=response.json(), schema=schema)

# 3. Проверка бизнес-логики (например, данные соответствуют запрошенному ID)
user_data = response.json()
assert user_data['id'] == 123

# 4. Проверка с помощью Pydantic (валидация типов и значений)
class User(BaseModel):
    id: int
    name: str
    email: str

try:
    validated_user = User(**user_data)
except ValidationError as e:
    pytest.fail(f"Response validation failed: {e}")

Полноценное API-тестирование включает валидацию контракта (схемы), данных и бизнес-правил.