Ответ
Нет, статус 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-тестирование включает валидацию контракта (схемы), данных и бизнес-правил.
Ответ 18+ 🔞
Да ты послушай, какая история интересная вырисовывается! Многие думают, что если сервер вернул статус 200, то всё, пиши пропало — успех, можно расслабиться и пить чай. Ёпта, вот это и есть главная ловушка, в которую все лезут, как слепые котята!
Статус 200 — это просто грубая отмашка от сервера, типа «запрос твой, чувак, дошёл, я его прочитал и что-то тебе отправил в ответ». А что он там отправил — хуй с горы знает! Может, он тебе такую ахинею в JSON'е прислал, что хоть святых выноси.
Что может пойти не так, даже если светится этот злосчастный 200:
- JSON кривой, как рога у чёрта. Вроде ответ есть, а попробуй распарсь — обязательных полей нет, типы данных перепутаны. Удивление пиздец, когда вместо числа строку присылают.
- Данные — мусор полный. Запрос на создание юзера вроде прошёл, 200 получил, а в ответе
idпользователя —null. И чё с этим делать? Доверия ебать ноль к такому АПИ. - Бизнес-логика пошла лесом. Запрос на списание бабла отработал, статус 200, а баланс, сука, не изменился. Вот тут и начинается терпения ноль ебать.
- Пустота в ответе. Запрашиваешь список заказов, получаешь 200 и пустой массив
[]. А где, блядь, заказы? Сам от себя охуел.
Вывод простой, как три копейки: в АПИ-тестах обязательно нужно проверять не только статус, но и тело ответа. Иначе вся твоя автотестируемая хуйня накроется медным тазом.
Вот смотри, как это по-человечески делается:
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. Лезем в саму суть. Данные-то правильные? Того юзера я запрашивал?
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}")
Короче, нормальное тестирование АПИ — это когда ты вротберунчик проверяешь всё: и контракт (схему), и сами данные, и чтобы бизнес-правила не нарушались. Иначе потом сидишь и думаешь, какого хуя всё падает в продакшене, а тесты-то зелёные.