Ответ
Тестирование регистрации — комплексная задача, охватывающая функциональность, удобство использования и безопасность.
Основные области проверки:
| Область | Что проверяем | Пример тест-кейса / Проверки |
|---|---|---|
| Валидация полей | Корректность формата, обязательность, ограничения длины. | 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 (соцсети), гостевой вход, восстановление пароля.