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:
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.
Prüf die E-Mail, nicht nur den Link
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.
from proxymail_qa import pytest_runtest_setup, pytest_runtest_teardown, pytest_runtest_logreport, pytest_sessionfinish - 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.