Код-ревью Middle API-автотесты обновлено

Ревью: API-тест профиля

Вопрос

Найдите проблемы в API-тесте.

import requests

TOKEN = "eyJhbGciOiJIUzI1NiJ9.prod-admin-token"

def test_update_profile():
    r = requests.put(
        "https://api.shop.ru/v1/users/42",
        json={"name": "Тест"},
        headers={"Authorization": f"Bearer {TOKEN}"},
    )
    assert r.status_code in range(200, 300)
    assert r.json() == {"id": 42, "name": "Тест", "updated_at": "2026-10-01T10:00:00Z"}

Коротко

Правильно: тестовое окружение из конфига, пользователь создаётся фабрикой, токен этого пользователя из фикстуры, клиент с таймаутом, точный статус, проверка полей с игнорированием времени (или проверка его формата), затем GET.

Что должен найти ревьюер

  1. Безопасностьстрока 3
    Токен в коде, да ещё боевой администраторский: утечка секрета, брать из переменных окружения CI
  2. Безопасностьстрока 7
    Боевой адрес API и захардкоженный id чужого пользователя: тест меняет реальные данные
  3. Стильстрока 6
    Запрос собирается в тесте руками, нет слоя клиента и таймаута запроса
  4. Ошибкастрока 11
    Любой 2xx вместо точного ожидаемого статуса
  5. Ошибкастрока 12
    Сравнение всего ответа вместе с updated_at, который меняется: тест всегда упадёт
  6. Стильстрока 12
    Нет проверки побочного эффекта: GET после PUT

Разбор

Правильно: тестовое окружение из конфига, пользователь создаётся фабрикой, токен этого пользователя из фикстуры, клиент с таймаутом, точный статус, проверка полей с игнорированием времени (или проверка его формата), затем GET.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме