Automatizzare i test di verifica email con indirizzi usa e getta
Costruisci test end-to-end affidabili per i flussi di registrazione, reset password e sistemi di notifica usando l'API di EvilMail.
EvilMail Team20 febbraio 20269 min di lettura
Se la tua applicazione invia email — conferme di registrazione, reset password, fatture, notifiche — hai bisogno di test automatizzati che verifichino che quelle email arrivino effettivamente e contengano il contenuto corretto. Abbiamo visto troppi team saltare il testing delle email perche sembra complicato. Non lo e, e questa guida lo dimostrera.
Il problema fondamentale nel testare i flussi email e che servono caselle di posta reali e raggiungibili che si possano leggere programmaticamente. Usare account Gmail personali nelle pipeline CI e fragile, insicuro e non scala. E esattamente qui che le API per email usa e getta guadagnano il loro posto in uno stack di testing maturo.
Configurare l'ambiente di test
Per prima cosa, ottieni la tua API key dalla dashboard di EvilMail. Salvala come variabile d'ambiente nel tuo sistema CI — non committare mai le API key nel controllo versione.
export EVILMAIL_API_KEY="your_api_key_here"
Creare un indirizzo email di test
Prima di ogni esecuzione di test, genera un nuovo indirizzo usa e getta:
La risposta include l'indirizzo email e un token di sessione. Usa l'indirizzo email per registrare un account di test nella tua applicazione.
Polling della casella di posta
Dopo aver attivato un'azione di invio email nella tua app (registrazione, reset password, ecc.), interroga l'endpoint inbox fino all'arrivo del messaggio:
In un test reale, incapsuleresti questo in un ciclo di retry con un timeout. Ecco un esempio pratico in 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')
Integrazione con pipeline CI/CD
Questo schema funziona perfettamente con qualsiasi sistema CI — GitHub Actions, GitLab CI, Jenkins, CircleCI. Il principio chiave e: ogni esecuzione di test ottiene un indirizzo usa e getta unico, esegue le sue asserzioni e l'indirizzo scade automaticamente. Nessuno script di pulizia, nessuna casella condivisa che si riempie, nessun test instabile causato da email residue delle esecuzioni precedenti.
Un passo di un workflow GitHub Actions potrebbe apparire cosi:
Non limitarti a controllare che un'email sia arrivata. Verifica l'oggetto, l'indirizzo del mittente, la presenza di link critici (URL di verifica, token di reset) e che quei link portino effettivamente a pagine valide. Un test email completo valida l'intera catena dall'attivazione alla consegna alla correttezza del contenuto.
Scalare a centinaia di test
Per suite di test grandi che necessitano di molti indirizzi email simultanei, usa l'endpoint di creazione account per generare indirizzi sotto il tuo dominio. Questo ti da il pieno controllo sullo spazio dei nomi ed evita qualsiasi limitazione di frequenza sull'endpoint temp-email:
Il testing delle email non dovrebbe essere il fragile ripensamento nella tua suite di test. Con un'API per email usa e getta adeguata, diventa deterministico e affidabile come qualsiasi altro test di integrazione. Rilascia con la fiducia che le tue email funzionino davvero.