Configuration
Copiez le helper, proxymail_qa.py, depuis la documentation Python dans votre dossier de tests, et placez une clé d’API dans PROXYMAIL_QA_API_KEY, dans votre shell, dans un fichier .env exclu de Git ou dans les secrets de votre CI. Le forfait Free suffit.
Le test
Avec Playwright pour 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"])Pour un code, utilisez wait_for_code(address, since=submitted) et saisissez ce qu’il renvoie. Avec Selenium, les appels sont les mêmes : trouvez les champs avec driver.find_element et envoyez le code ou ouvrez le lien. since fait ignorer à l’attente tout ce qui a été envoyé avant l’envoi du formulaire : un test relancé ne lit donc jamais un ancien e-mail.
Vérifier l’e-mail, pas seulement le lien
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 renvoie des verdicts sur SPF, DKIM et DMARC, les liens vers localhost ou en http simple, la destination du lien et plus encore, jamais l’e-mail lui-même. expect_no_email vérifie qu’une action n’envoie rien, comme une seconde demande de réinitialisation qui doit être refusée.
L’exécuter dans CI, avec un rapport sur la pull request
Importez les hooks pytest du helper dans conftest.py. Dans GitHub Actions, ajoutez l’action Proxy Mail QA avant les tests : le rapport sur la pull request indique alors de quel test provient chaque e-mail, et liste les tests échoués avec ce qu’ont fait leurs e-mails.
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 }}Les hooks ne font rien en dehors d’une exécution et ne font jamais échouer vos tests eux-mêmes. Plus d’informations dans la documentation Python et Exécution dans CI.