Ответ
Нет, статус 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-тестирование включает валидацию контракта (схемы), данных и бизнес-правил.