Automatisch aus dem Englischen übersetzt.

Auf Englisch lesen
Proxy Mail QA

Registrierungs-E-Mails mit pytest testen

Um E-Mail-Bestätigung in pytest zu testen, gib jedem Test eine frische Adresse, registriere dich damit, warte dann auf den Code oder Link und schließe den Ablauf ab. Der Python-Helfer von Proxy Mail QA ist eine Datei, die nur die Standardbibliothek nutzt: create_address vor dem Formular, wait_for_code oder wait_for_link danach. Er funktioniert mit Playwright für Python und Selenium, im Free-Plan.

Aktualisiert am

Einrichtung

Kopiere den Helfer proxymail_qa.py aus der Python-Doku in deinen Testordner und lege einen API-Schlüssel in PROXYMAIL_QA_API_KEY ab, in deiner Shell, in einer .env-Datei außerhalb von Git oder in den Secrets deines CI. Der Free-Plan reicht.

Der Test

Mit Playwright für Python:

test_signup.py
import re
from playwright.sync_api import Page, expect
from proxymail_qa import create_address, delete_address, now, wait_for_link
def test_sign_up_verifies_the_email(page: Page):
account = create_address()
page.goto("/signup")
page.get_by_label("Email").fill(account["address"])
page.get_by_label("Password").fill(account["password"])
submitted = now()
page.get_by_role("button", name="Sign up").click()
page.goto(wait_for_link(account["address"], since=submitted))
expect(page).to_have_url(re.compile("verified"))
delete_address(account["address"])

Für einen Code nutze wait_for_code(address, since=submitted) und tippe ein, was es zurückgibt. Mit Selenium sind die Aufrufe gleich: Finde die Felder mit driver.find_element und sende den Code oder öffne den Link. since lässt das Warten alles ignorieren, was vor dem Absenden des Formulars gesendet wurde, sodass ein wiederholter Test nie eine alte E-Mail liest.

test_emails.py
import time
from proxymail_qa import check_email, count_emails, now, wait_for_link
def test_sign_up_sends_one_good_verification_email(page, account):
submitted = now()
page.get_by_role("button", name="Sign up").click()
wait_for_link(account["address"], since=submitted)
time.sleep(10) # give a duplicate time to arrive
assert count_emails(account["address"], since=submitted, type="link")["count"] == 1
assert check_email(account["address"], since=submitted, expect_host="staging.example.com")["failed"] == []

check_email liefert Urteile zu SPF, DKIM und DMARC, zu Links auf localhost oder reines http, wohin der Link führt und mehr, nie die E-Mail selbst. expect_no_email prüft, dass eine Aktion nichts sendet, etwa eine zweite Reset-Anfrage, die abgelehnt werden sollte.

In CI ausführen, mit einem Bericht im Pull Request

Importiere die pytest-Hooks des Helfers in conftest.py. Füge in GitHub Actions die Proxy Mail QA Action vor den Tests hinzu: Der Bericht im Pull Request sagt dann, aus welchem Test jede E-Mail kam, und listet die fehlgeschlagenen Tests mit dem, was ihre E-Mails taten.

conftest.py
from proxymail_qa import pytest_runtest_setup, pytest_runtest_teardown, pytest_runtest_logreport, pytest_sessionfinish
.github/workflows/e2e.yml
- uses: aaquib90/proxymail-qa-action@v1
with:
api-key: ${{ secrets.PROXYMAIL_QA_API_KEY }}
- run: pytest
env:
PROXYMAIL_QA_API_KEY: ${{ secrets.PROXYMAIL_QA_API_KEY }}

Die Hooks tun außerhalb eines Laufs nichts und lassen deine Tests nie selbst fehlschlagen. Mehr in der Python-Doku und unter In CI ausführen.

Probier es bei deinem nächsten Registrierungstest aus

Kostenloser Tarif, keine Kreditkarte nötig. Erstelle eine Adresse und sieh zu, wie der Code oder Link ankommt.

Kostenloses Konto erstellenApp öffnen

Fragen

Gibt es ein pip-Paket?

Noch nicht. Der Helfer ist eine einzelne Datei, die nur die Standardbibliothek von Python nutzt: Kopiere sie aus der Python-Doku in deinen Testordner, und es gibt nichts zu installieren oder aktuell zu halten.

Funktioniert es mit Selenium?

Ja. Der Helfer fasst den Browser nicht an: Er erstellt die Adresse und liefert den Code oder Link, und dein Selenium- oder Playwright-Code tippt ihn ein oder öffnet ihn.

Was, wenn die E-Mail nie ankommt?

Das Warten löst ProxyMailQAError aus, mit dem Grund, soweit Proxy Mail QA ihn erkennen kann: Meist ist der E-Mail-Anbieter der App im Sandbox- oder Testmodus und sendet nur an verifizierte Adressen. Behebe es auf der Sendeseite, statt länger zu warten.

Deine App mit einem KI-Tool gebaut? Wähle deins

Eine Frage zu dieser Seite?

Frag in jeder Sprache. Die Doku kann dir sofort antworten oder deine Frage an das Team von Proxy Mail QA schicken, das auf Englisch antwortet.

Doku fragen