Как в авто тестах грамотно проводить тесты связанные с рассылкой на email, как настроить процесс?

Рейтинг: 1Ответов: 1Опубликовано: 22.04.2023

Вэб сервисы любят время от времени отправлять письмо пользователю на email, для подтверждения/восстановления учетной записи, или просто информационные например.
(вообще я использую pytest, думаю здесь это не так важно)

Как грамотно обрабатывать такие ситуации в автотестах?
Не в плане какого-нибудь селениума, скорее общего подхода

До этого я использовал сервис "mailforspam.co/", но честно сказать мне вообще это не нравится, хотелось бы что то подобное иметь у себя локально и поднимать по желанию.
Было бы круто дернуть апишку почты, распарсить код подтверждения(например) и ехать дальше по тестам.

Да и опять же интересно мнение опытных автотестировщиков, наверняка есть какой-то устаканившийся способ что бы не изобретать велосипед(но что то не нагуглилось правда).

Ответы

▲ 3

Автотесты могут в себя включать юнит-тесты и интеграционные тесты, у них различные цели и способы тестирования.

Юнит-тесты

Это тесты отдельного функционала внутри сервиса/модуля. Здесь тестируется инкапслуированная логика, а не взаимодействия между сервисами. Касательно почты, в такого рода тестах проверяют, что сервис отправляет то что нужно и когда нужно.

При этом, функционал связанный с межсервисным взаимодействием часто заглушается/мокается, т.к это не входит в цели данных тестов, лишь мешает. В Питоне для этого часто используется утилита unittest.mock, которая позволяет переопределить любую функцию или объект, например, заменив функцию отправки письма на функцию, которая будет сохранять содержимое письма для последующей проверки в тесте.

Интеграционные тесты

В интеграционных тестах проверяется корректность взаимодействия между сервисами/модулями системы и высокоуровневые бизнес-процессы, часто в составе CI/CD-пайплайнов, где происходит проверка ответов от других подсистем.

Если ваше приложение довольно маленькое или просто письма не обрабатываются другим внутренним сервисом, то проверять факт успешной отправки письма можно через использование тестового ящика и считывание его содержимого с использованием API вашего почтового сервиса или API/SDK сервиса рассылок, например, у MailSlurp есть готовая интеграция с pytest.