Automatisera e-postverifieringstester med engangsadresser
Bygg palitliga end-to-end-tester for registreringsfloden, losenordsaterstaallning och notifikationssystem med EvilMail API.
EvilMail Team20 februari 20269 min läsning
Om din applikation skickar e-post — registreringsbekraftelser, losenordsaterstaallningar, fakturor, notifikationer — behover du automatiserade tester som verifierar att dessa e-postmeddelanden faktiskt anlaander och innehaller ratt innehall. Vi har sett alltfor manga team som hoppar over e-posttestning for att det kanns komplicerat. Det ar det inte, och den har guiden kommer att bevisa det.
Det grundlaggande problemet med att testa e-postfloden ar att du behover riktiga, natbara inkorgar som du kan lasa programmatiskt. Att anvanda personliga Gmail-konton i CI-pipelines ar brakligt, osakert och skalar inte. Det ar exakt har som API:er for engangse-post gor sig fortjanta av sin plats i en mogen teststack.
Konfigurera din testmiljo
Forst, hamta din API-nyckel fran EvilMail-panelen. Lagra den som en miljovariabel i ditt CI-system — committa aldrig API-nycklar till versionshantering.
export EVILMAIL_API_KEY="your_api_key_here"
Skapa en test-e-postadress
Fore varje testkorrning, generera en ny engangse-post:
Svaret inkluderar e-postadressen och en sessionstoken. Anvand e-postadressen for att registrera ett testkonto i din applikation.
Polla inkorgen
Efter att ha utlost en e-postskickande aktion i din app (registrering, losenordsaterstaallning osv.), polla inkorg-endpointen tills meddelandet anlaander:
I ett riktigt test skulle du kapsla in detta i en retry-loop med en timeout. Har ar ett praktiskt Python-exempel:
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')
Integration med CI/CD-pipelines
Detta monster fungerar smidigt med alla CI-system — GitHub Actions, GitLab CI, Jenkins, CircleCI. Grundprincipen ar: varje testkorrning far en unik engangsadress, kor sina pastaenden och adressen gar ut automatiskt. Inga cleanup-skript, inga delade brevlador som belamras, inga opaalitliga tester orsakade av kvarlaamnande e-post fran tidigare korrningar.
Kontrollera inte bara att ett e-postmeddelande anlande. Verifiera amnesraden, avsandaradressen, forekomsten av kritiska lankar (verifierings-URL:er, aterstallningstoken) och att dessa lankar faktiskt leder till giltiga sidor. Ett komplett e-posttest validerar hela kedjan fran utlosare till leverans till innehallskorrekthet.
Skala upp till hundratals tester
For stora testsviter som behover manga samtidiga e-postadresser, anvand kontoskapande-endpointen for att skapa adresser under din egen doman. Detta ger dig full kontroll over namnrymden och undviker eventuell hastighetsbegransning pa temp-email-endpointen:
E-posttestning bor inte vara den brakliga eftertanken i din testsvit. Med ett ordentligt API for engangse-post blir det lika deterministiskt och palitligt som alla andra integrationstester. Leverera med fortroendet att dina e-postmeddelanden faktiskt fungerar.