Zurück zum Blog
QA-Automatisierung: Wie man Anmelde-E-Mails mit Playwright und der JunkMail-API validiert

QA-Automatisierung: Wie man Anmelde-E-Mails mit Playwright und der JunkMail-API validiert

E2E-Tests enden oft beim E-Mail-Versand. Erfahren Sie, wie Sie den Kreis schließen und den Klick auf den Bestätigungslink mithilfe einer programmierbaren E-Mail-API testen.

Von Leandre5.1.2026

Es ist der klassische Albtraum des QA-Ingenieurs oder Fullstack-Entwicklers: das Testen des Anmeldeflusses (Sign Up Flow).

Das Szenario ist auf dem Papier einfach:

  1. Der Benutzer füllt das Formular aus.
  2. Er erhält eine E-Mail mit einem magischen Link.
  3. Er klickt auf den Link.
  4. Sein Konto wird aktiviert.

Mit modernen Tools wie Playwright oder Cypress sind die Schritte 1 und 4 trivial. Aber die Schritte 2 und 3 sind oft ein schwarzes Loch. Wie überprüft man, ob eine E-Mail wirklich gesendet wurde? Wie extrahiert man den Validierungslink darin, um programmgesteuert darauf zu klicken?

Oft verwenden Entwicklerteams Hacks:

  • Verbindung zu einem echten Gmail-Konto über IMAP (langsam, instabil, Google blockiert oft die Verbindung).
  • Mocken des E-Mail-Versands (schnell, testet aber nicht die tatsächliche Zustellbarkeit oder das HTML-Template).
  • Verwendung von Mailhog/Mailcatcher lokal (gut, funktioniert aber nicht in Staging/Prod).

Die robuste Lösung? Verwenden Sie eine wegwerfbare und programmierbare E-Mail-API wie JunkMail.

Die Testarchitektur

Das werden wir bauen:

  1. Playwright generiert eine eindeutige E-Mail-Adresse über die JunkMail-API.
  2. Playwright füllt das Anmeldeformular Ihrer App mit dieser E-Mail aus.
  3. Playwright fragt die JunkMail-API ab (Polling), bis die Nachricht empfangen wird.
  4. Playwright extrahiert die Validierungs-URL (Regex) aus dem Nachrichtentext.
  5. Playwright navigiert zu dieser URL und überprüft den Erfolg.

Voraussetzungen

  • Node.js installiert.
  • Ein Playwright-Projekt (npm init playwright@latest).
  • Ein JunkMail-API-Schlüssel (verfügbar in Ihrem Business-Dashboard).

Der Code

Hier ist ein vollständiges Beispiel in TypeScript.

1. Der JunkMail-API-Client

Zuerst erstellen wir einen kleinen Helfer, um mit JunkMail zu interagieren.

// utils/junkmail.ts
import { request } from '@playwright/test';

const JUNKMAIL_API_URL = 'https://junkmail.site/api/v1';
const API_KEY = process.env.JUNKMAIL_API_KEY;

export async function createTempEmail() {
  const context = await request.newContext();
  const response = await context.post(`${JUNKMAIL_API_URL}/emails`, {
    headers: { 'Authorization': `Bearer ${API_KEY}` }
  });
  return await response.json(); // Gibt zurück { id: "...", address: "xyz@junkmail.site" }
}

export async function waitForEmail(addressId: string, timeout = 30000) {
  const context = await request.newContext();
  const startTime = Date.now();

  while (Date.now() - startTime < timeout) {
    const response = await context.get(`${JUNKMAIL_API_URL}/emails/${addressId}/messages`, {
      headers: { 'Authorization': `Bearer ${API_KEY}` }
    });
    const messages = await response.json();
    
    if (messages.length > 0) {
      return messages[0]; // Wir geben die erste empfangene Nachricht zurück
    }
    
    // 1s warten vor erneutem Versuch
    await new Promise(r => setTimeout(r, 1000));
  }
  throw new Error('E-Mail nicht rechtzeitig empfangen');
}

2. Der E2E-Test

Nun verwenden wir diesen Helfer in unserer Playwright-Spezifikation.

// tests/signup.spec.ts
import { test, expect } from '@playwright/test';
import { createTempEmail, waitForEmail } from '../utils/junkmail';

test('Ein neuer Benutzer kann sich registrieren und seine E-Mail validieren', async ({ page }) => {
  // 1. Eine eindeutige E-Mail-Adresse für diesen Test erstellen
  const tempEmail = await createTempEmail();
  console.log(`Test-E-Mail generiert: ${tempEmail.address}`);

  // 2. Das Anmeldeformular ausfüllen
  await page.goto('https://meine-app.com/register');
  await page.fill('input[name="email"]', tempEmail.address);
  await page.fill('input[name="password"]', 'Passwort123!');
  await page.click('button[type="submit"]');

  await expect(page.locator('text=Überprüfen Sie Ihre E-Mails')).toBeVisible();

  // 3. Auf den Empfang der E-Mail warten (JunkMail-Seite)
  const message = await waitForEmail(tempEmail.id);
  console.log(`E-Mail empfangen: ${message.subject}`);

  // 4. Den Validierungslink extrahieren
  // Wir suchen nach einer URL wie https://meine-app.com/verify?token=...
  const linkRegex = /https:\/\/meine-app\.com\/verify\?token=[a-zA-Z0-9-]+/;
  const match = message.body.text.match(linkRegex);
  
  if (!match) throw new Error('Validierungslink nicht in der E-Mail gefunden');
  const verificationUrl = match[0];

  // 5. Den Validierungslink besuchen
  await page.goto(verificationUrl);

  // 6. Überprüfen, ob das Konto aktiviert ist
  await expect(page.locator('text=Konto erfolgreich aktiviert')).toBeVisible();
});

Warum ist es besser als andere Methoden?

Datenisolation

Jeder Test verwendet eine frische E-Mail-Adresse (test-123@junkmail.site, test-456@junkmail.site). Sie riskieren keinen Datenkonflikt (z.B. "Diese E-Mail existiert bereits"), wenn Sie Ihre Tests parallel ausführen.

Vollständiger Test (End-to-End)

Im Gegensatz zu Mocks testen Sie:

  • Dass Ihr Versanddienst (SendGrid, AWS SES...) funktioniert.
  • Dass Ihr HTML-Template den Link nicht zerstört.
  • Dass der Validierungslink im Browser tatsächlich funktioniert.

Stabilität und Geschwindigkeit

Die JunkMail-API ist für Entwickler konzipiert. Sie ist schnell, RESTful und erfordert keine komplexe IMAP-Konfiguration oder 2FA-Umgehung wie bei Gmail.

Der philosophische Moment: QA vs. Realität

Ein Test, der die Realität nicht reproduziert, ist kein Test, sondern eine Hoffnung. Ihre Benutzer "mocken" ihre E-Mails nicht. Sie erwarten wirklich, sie zu erhalten. Wenn Ihr E-Mail-Versandsystem ausfällt (Quote überschritten, IP-Blacklist), werden Ihre gemockten Tests immer noch grün sein, aber Ihr Geschäft wird stillstehen.

Das Testen mit einer echten E-Mail-Empfangsinfrastruktur ist der einzige Weg, um absolutes Vertrauen in Ihren Anmelde-"Happy Path" zu haben.

Fazit

Die Automatisierung von E-Mail-Tests sollte kein Schmerz sein. Mit den richtigen Tools ist es so einfach wie ein API-Aufruf. Integrieren Sie JunkMail in Ihre CI/CD-Pipeline und hören Sie auf, bei jedem Deployment die Daumen zu drücken.

Bereit zu coden? Holen Sie sich Ihren API-Schlüssel auf JunkMail Developer.