Напиши Pytest-тест для API-эндпоинта POST /clients, который создает клиента.

Тест сначала создаёт клиента и проверяет 201 и client_id, затем повторяет запрос с тем же ИНН и ожидает 409. Данные должны быть заранее валидными и уникальными для тестового запуска.

Короткий ответ

Что ответить на собеседовании

Тест сначала создаёт клиента и проверяет 201 и client_id, затем повторяет запрос с тем же ИНН и ожидает 409. Данные должны быть заранее валидными и уникальными для тестового запуска.

Подробный разбор

Ответ с пояснениями

Условие

Напиши Pytest-тест для API-эндпоинта POST /clients, который создает клиента.

Нужно проверить: статус-код 201, что в ответе присутствует client_id,

и что повторный запрос с тем же ИНН вернет 409 Conflict.

Ответ

Тест сначала создаёт клиента и проверяет 201 и client_id, затем повторяет запрос с тем же ИНН и ожидает 409. Данные должны быть заранее валидными и уникальными для тестового запуска.

def test_duplicate_inn(api_client, api_base_url, unique_client_payload):
    payload = unique_client_payload
    first = api_client.post(
        f'{api_base_url}/clients', json=payload, timeout=10
    )
    assert first.status_code == 201
    data = first.json()
    assert 'client_id' in data
    assert data['client_id'] is not None

    second = api_client.post(
        f'{api_base_url}/clients', json=payload, timeout=10
    )
    assert second.status_code == 409

Fixtures здесь проектные: клиент с нужной авторизацией, адрес изолированной среды и payload со всеми обязательными полями. Fixture данных должна организовать очистку по уникальному тестовому признаку, в том числе после падения. Формат ИНН и дополнительные поля нельзя выдумывать без контракта API.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее