Как вы тестируете функционал регистрации пользователя?

«Как вы тестируете функционал регистрации пользователя?» — вопрос из категории Основы тестирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тестирование регистрации — комплексная задача, охватывающая функциональность, удобство использования и безопасность.

Основные области проверки:

Область Что проверяем Пример тест-кейса / Проверки
Валидация полей Корректность формата, обязательность, ограничения длины. Email без "@", пароль короче 8 символов → должна быть понятная ошибка.
Бизнес-логика Уникальность логина/email, подтверждение email/SMS, условия согласий. Регистрация с существующим email → ошибка "Пользователь уже существует".
Интеграции Отправка письма для подтверждения, запись в БД, обновление профиля. После успешной регистрации в таблице users появляется запись со статусом pending.
Безопасность Хеширование паролей, защита от ботов (CAPTCHA), CSRF-токены. Пароль в БД хранится в виде хеша (например, bcrypt), а не в открытом виде.
UX/UI Ясность сообщений об ошибках, доступность, работа на разных устройствах. Сообщение "Пароли не совпадают" появляется рядом с полем подтверждения пароля.

Пример автотеста на Python (pytest):

def test_successful_registration(api_client, db_connection, fake_email):
    """Проверяет успешную регистрацию нового пользователя."""
    user_data = {
        "email": fake_email,
        "password": "Str0ngP@ss!",
        "confirm_password": "Str0ngP@ss!"
    }

    # 1. Отправка запроса на регистрацию
    response = api_client.post("/api/register", json=user_data)
    assert response.status_code == 201

    # 2. Проверка ответа API
    response_json = response.json()
    assert "id" in response_json
    assert response_json["email"] == user_data["email"]

    # 3. Проверка записи в базе данных
    user_in_db = db_connection.execute(
        "SELECT id, email, status FROM users WHERE email = %s", (fake_email,)
    ).fetchone()
    assert user_in_db is not None
    assert user_in_db["status"] == "pending_verification"

    # 4. (Опционально) Проверка отправки письма (через мок или тестовый почтовый сервер)
    # assert email_was_sent(to=fake_email, subject_contains="Confirm")

Дополнительные сценарии: Тестирование регистрации через OAuth (соцсети), гостевой вход, восстановление пароля.