EvilMail
Розробникам

Автоматизація тестування email-верифікації за допомогою одноразових адрес

Побудуйте надійні end-to-end тести для процесів реєстрації, відновлення паролів та систем сповіщень з використанням API EvilMail.

EvilMail TeamFebruary 20, 20269 хв читання

Якщо ваш додаток відправляє електронну пошту — підтвердження реєстрації, скидання паролів, рахунки-фактури, сповіщення — вам потрібні автоматизовані тести, які перевіряють, що ці листи дійсно доходять і містять правильний контент. Ми бачили занадто багато команд, які пропускають тестування пошти, бо це здається складним. Це не так, і цей посібник це доведе.

Фундаментальна проблема тестування поштових процесів полягає в тому, що потрібні реальні, досяжні поштові скриньки, які можна читати програмно. Використання особистих Gmail-акаунтів у CI-пайплайнах — це крихке, небезпечне рішення, яке не масштабується. Саме тут API одноразової пошти займають своє законне місце у зрілому стеку тестування.

Налаштування тестового середовища Спершу отримайте API-ключ у панелі керування EvilMail. Збережіть його як змінну середовища у вашій CI-системі — ніколи не комітьте API-ключі у систему контролю версій. ``` export EVILMAIL_API_KEY="your_api_key_here" ```

Створення тестової поштової адреси Перед кожним запуском тестів генеруйте нову одноразову адресу: ``` curl -X POST https://evilmail.pro/api/temp-email \ -H 'Content-Type: application/json' \ -H 'X-API-Key: '"$EVILMAIL_API_KEY" \ -d '{"domain": "evilmail.pro", "ttlMinutes": 30}' ```

У відповіді ви отримаєте email-адресу та токен сесії. Використайте адресу для реєстрації тестового облікового запису у вашому додатку.

Опитування вхідних Після виклику дії, що відправляє лист у вашому додатку (реєстрація, скидання пароля тощо), опитуйте ендпоінт вхідних, поки повідомлення не надійде: ``` curl https://evilmail.pro/api/inbox \ -H 'X-API-Key: '"$EVILMAIL_API_KEY" ```

У реальному тесті ви обгорнете це у цикл повторних спроб із таймаутом. Ось практичний приклад на Python: ``` import requests import time

API_KEY = os.environ['EVILMAIL_API_KEY'] BASE = 'https://evilmail.pro'

def wait_for_email(subject_contains, timeout=60): deadline = time.time() + timeout while time.time() < deadline: r = requests.get(f'{BASE}/api/inbox', headers={'X-API-Key': API_KEY}) messages = r.json().get('data', []) for msg in messages: if subject_contains in msg['subject']: return msg time.sleep(3) raise TimeoutError('Email not received') ```

Інтеграція з CI/CD пайплайнами Цей патерн працює без проблем з будь-якою CI-системою — GitHub Actions, GitLab CI, Jenkins, CircleCI. Ключовий принцип: кожен запуск тестів отримує унікальну одноразову адресу, виконує свої перевірки, і адреса автоматично спливає. Жодних скриптів очищення, жодних спільних скриньок, які засмічуються, жодних нестабільних тестів через залишки від попередніх запусків.

Крок workflow у GitHub Actions може виглядати так: ``` - name: Run email integration tests env: EVILMAIL_API_KEY: ${'{ secrets.EVILMAIL_API_KEY }'} run: pytest tests/email/ -v --timeout=120 ```

Що саме перевіряти Не обмежуйтесь перевіркою самого факту доставки листа. Верифікуйте тему повідомлення, адресу відправника, наявність критичних посилань (URL верифікації, токени скидання) та те, що ці посилання дійсно ведуть на валідні сторінки. Повноцінний тест пошти валідує весь ланцюжок від тригера до доставки й до коректності контенту.

Масштабування до сотень тестів Для великих наборів тестів, яким потрібно багато одночасних поштових адрес, використовуйте ендпоінт створення акаунтів для розгортання адрес на власному домені. Це дає повний контроль над простором імен та дозволяє уникнути rate limiting на ендпоінті тимчасової пошти: ``` curl -X POST https://evilmail.pro/api/accounts \ -H 'X-API-Key: '"$EVILMAIL_API_KEY" \ -H 'Content-Type: application/json' \ -d '{"email": "[email protected]", "password": "testpass"}' ```

Після завершення тестового набору масово видаліть тестові акаунти: ``` curl -X DELETE https://evilmail.pro/api/accounts \ -H 'X-API-Key: '"$EVILMAIL_API_KEY" \ -H 'Content-Type: application/json' \ -d '{"emails": ["[email protected]"]}' ```

Підсумок Тестування пошти не повинно бути крихким постскриптумом у вашому наборі тестів. З правильним API одноразової пошти воно стає таким само детермінованим і надійним, як будь-який інший інтеграційний тест. Деплойте з впевненістю, що ваші листи дійсно працюють.

Схожі статті