Configurando o Ambiente de Testes
Testar fluxos de verificação de e-mail manualmente é lento, propenso a erros e não escalável. A solução é automatizar todo o processo utilizando endereços de e-mail descartáveis que podem ser criados e descartados sob demanda.
Para começar, você precisará de:
- Uma chave de API do EvilMail
- Python 3.8+ instalado
- A biblioteca requests
pip install requests pytestCriando E-mails de Teste via API
O primeiro passo é gerar um endereço de e-mail descartável para cada caso de teste:
curl -X POST https://evilmail.com/api/temp-email
-H "Authorization: Bearer YOUR_API_KEY"
-H "Content-Type: application/json"
-d '{"domain": "evilmail.com", "prefix": "test-signup"}'A API retorna um endereço de e-mail único que está imediatamente pronto para receber mensagens.
Monitorando a Caixa de Entrada
Após acionar o fluxo de verificação da sua aplicação, você precisa monitorar a caixa de entrada até que o e-mail de verificação chegue:
curl -X GET https://evilmail.com/api/inbox/[email protected]
-H "Authorization: Bearer YOUR_API_KEY"Exemplo em Python: wait_for_email
Aqui está uma função robusta para aguardar o e-mail de verificação com timeout e polling:
import requests
import time
def wait_for_email(address, api_key, timeout=60, interval=2):
"""Aguarda a chegada de um e-mail na caixa de entrada especificada."""
url = f"https://evilmail.com/api/inbox/{address}"
headers = {"Authorization": f"Bearer {api_key}"}
deadline = time.time() + timeout
while time.time() < deadline:
response = requests.get(url, headers=headers)
response.raise_for_status()
messages = response.json().get("messages", [])
if messages:
return messages[0]
time.sleep(interval)
raise TimeoutError(
f"Nenhum e-mail recebido em {address} após {timeout} segundos"
)
# Uso em um teste
def test_signup_verification():
# 1. Criar e-mail temporário
resp = requests.post(
"https://evilmail.com/api/temp-email",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"domain": "evilmail.com", "prefix": "test-signup"}
)
email = resp.json()["email"]
# 2. Registrar usuário na sua aplicação
requests.post("https://yourapp.com/signup", json={
"email": email,
"password": "TestPassword123!"
})
# 3. Aguardar e-mail de verificação
message = wait_for_email(email, "YOUR_API_KEY")
# 4. Extrair link de verificação e confirmar
assert "verify" in message["body"].lower()
assert message["subject"] is not NoneIntegração com GitHub Actions CI/CD
Integre os testes de verificação de e-mail ao seu pipeline de CI/CD com GitHub Actions:
name: Email Verification Tests
on: [push, pull_request]
jobs:
test-email-flows:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install dependencies
run: pip install requests pytest
- name: Run email verification tests
env:
EVILMAIL_API_KEY: ${{ secrets.EVILMAIL_API_KEY }}
run: pytest tests/test_email_verification.py -vAsserções e Validações
Testes eficazes de verificação de e-mail devem validar:
- A entrega do e-mail dentro do tempo esperado
- O assunto e remetente corretos
- A presença de um link de verificação válido no corpo
- O funcionamento correto do link de verificação
- A ativação da conta após a verificação
Escalando para Centenas de Testes
Ao escalar sua suíte de testes, considere:
- Prefixos únicos: Use timestamps ou UUIDs nos prefixos dos e-mails para evitar colisões
- Execução paralela: Configure o pytest-xdist para executar testes em paralelo
- Rate limiting: Respeite os limites da API e implemente backoff exponencial
- Limpeza: Exclua endereços temporários após os testes para manter o ambiente limpo
# Executar 8 testes em paralelo
pytest tests/test_email_verification.py -n 8 --dist=loadfileCom esta abordagem, é possível executar centenas de testes de verificação de e-mail de forma confiável e eficiente em seu pipeline de CI/CD.

