Configuración
Copia el helper, proxymail_qa.py, desde la documentación de Python a tu carpeta de pruebas, y pon una clave de API en PROXYMAIL_QA_API_KEY, en tu shell, en un archivo .env excluido de Git o en los secretos de tu CI. El plan Free es suficiente.
La prueba
Con Playwright para 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"])Para un código, usa wait_for_code(address, since=submitted) y escribe lo que devuelve. Con Selenium, las llamadas son las mismas: busca los campos con driver.find_element y envía el código o abre el enlace. since hace que la espera ignore todo lo enviado antes de enviar el formulario, así una prueba reintentada nunca lee un correo antiguo.
Revisa el correo, no solo el enlace
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 devuelve veredictos sobre SPF, DKIM y DMARC, enlaces a localhost o a http sin cifrar, adónde lleva el enlace y más, nunca el correo en sí. expect_no_email comprueba que una acción no envíe nada, como una segunda solicitud de restablecimiento que debería rechazarse.
Ejecútalo en CI, con un reporte en el pull request
Importa los hooks de pytest del helper en conftest.py. En GitHub Actions, agrega la acción de Proxy Mail QA antes de las pruebas: el reporte en el pull request indica de qué prueba vino cada correo y lista las pruebas fallidas con lo que hicieron sus correos.
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 }}Los hooks no hacen nada fuera de una ejecución y nunca hacen fallar tus pruebas por sí mismos. Más en la documentación de Python y en Ejecutar en CI.