
«Письмо пришло» — недостаточный результат теста.
Сообщение о регистрации может попасть в почтовый ящик не тому получателю, содержать просроченную ссылку, сломанный мобильный макет, имя хоста продакшн‑окружения или тему, не имеющую смысла на другом языке. Хорошее тестирование писем охватывает весь пользовательский путь и оставляет достаточно доказательств для диагностики сбоя.
Временные почтовые ящики полезны здесь, потому что каждый запуск может начинаться с чистого адреса. Ящик должен быть одноразовым; результат теста — нет.
Создайте небольшую, продуманную матрицу
Начните с потоков, которые могут заблокировать пользователя:
- проверка нового аккаунта;
- сброс пароля;
- приглашение в команду или рабочее пространство;
- подтверждение изменения электронной почты;
- ссылка для входа или одноразовый код;
- оповещение о безопасности после чувствительного действия.
Для каждого потока протестируйте «счастливый путь», один просроченный или повторно использованный credential, и одну ошибку со стороны получателя. Это выявляет больше реальных дефектов, чем отправка десятков одинаковых сообщений «счастливого пути».
Используйте один ящик на каждый сценарий
Повторное использование одного адреса создает неоднозначность. Старое сообщение о сбросе может быть принято за самое новое, а параллельные тесты могут потреблять ссылки друг друга.
Сгенерируйте уникальный адрес для каждого тестового случая или запуска. Записывайте его вместе с номером сборки, окружением, локалью и сценарием. Если тест не проходит, адрес становится частью доказательств и может быть проверен до истечения срока хранения.
Не используйте реальные адреса клиентов в staging. Это создает риск нежелательных сообщений, загрязняет аналитику и усложняет автоматическую очистку.
Проверьте конверт перед содержимым
Прежде чем кликать что-либо, проверьте:
- Сообщение было отправлено на точно тот адрес, который создан для этого теста.
- Домен отправителя соответствует ожидаемому для данного окружения.
- Тема идентифицирует действие, не раскрывая конфиденциальные данные.
- Пришло только ожидаемое количество сообщений.
- Временная метка позже действия, которое её инициировало.
Эти проверки выявляют проблемы маршрутизации и дублирования до того, как их скроет парсер содержимого.
Тестируйте контент так, как его видит пользователь
Откройте сообщение как в узком, так и в широком окне просмотра. Убедитесь, что основное действие видно, текстовая версия понятна, а длинные адреса или URL не ломают макет.
Для потока, основанного на коде, проверьте, что новый код работает один раз и после использования становится недействительным. Для потока, основанного на ссылке, подтвердите хост и окружение перед её открытием. Сообщение из staging, указывающее на продакшн, блокирует релиз, даже если ссылка технически работает.
Также проверьте менее заметные детали: поведение reply-to, контакт поддержки, формулировку срока действия, локаль и название аккаунта или рабочего пространства, отображаемое в сообщении.
Негативные случаи, которые заслуживают внимания
Полезные негативные тесты включают:
- запрос второго кода и подтверждение, что первый аннулирован;
- открытие просроченной ссылки;
- открытие одной и той же ссылки дважды;
- изменение состояния аккаунта до использования сообщения;
- приглашение адреса, который уже принадлежит участнику;
- ввод неподдерживаемого или некорректного адреса;
- задержка доставки настолько, что срок действия истекает.
Эти тесты выявляют условия гонки и вводящие в заблуждение сообщения об ошибках, которые простой проверкой ящика никогда не обнаружит.
Разделяйте сбой продукта и задержку доставки
Когда сообщение отсутствует, сохраняйте временные метки действия пользователя, постановки задачи в очередь, передачи провайдеру и поступления в ящик, если эти сигналы доступны. Скриншот пустого ящика доказывает лишь, что сообщение не было видно в этот момент.
Используйте диагностическую последовательность в Письмо с подтверждением не приходит: найдите сломанный шаг перед тем, как создать расплывчатую задачу «почта не работает».
Что автоматизировать
Автоматизируйте стабильные контракты:
- генерировать уникальный адрес;
- инициировать действие продукта;
- опрашивать с ограниченным тайм‑аутом и экспоненциальным откатом;
- сопоставлять ожидаемого отправителя и тему;
- читать самое новое подходящее сообщение;
- проверять код или ссылку в продукте;
- сохранять полезные доказательства сбоя;
- выполнять очистку.
Оставьте визуальную проверку, качество текста и необычное поведение клиента в фокусированном ручном проходе. Автоматизация хороша для повторения, но не для вкуса.
Надёжная автоматизация API временных ящиков охватывает сторону API, включая опрос и очистку.
Полезный отчет о сбое
Отчет, которым разработчики могут воспользоваться, содержит сценарий, окружение, адрес, время триггера, ожидаемого отправителя, наблюдаемые сообщения, время последнего опроса, статус ответа и скриншот или отфильтрованный фрагмент тела. Никогда не прикрепляйте живые секреты или повторно используемые ссылки подтверждения к публичной задаче.
Цель не в том, чтобы доказать ненадёжность электронной почты. Цель — определить, какой контракт не сработал, и оставить воспроизводимый путь к исправлению.