英語から自動翻訳されています。

英語で読む
Proxy Mail QA

pytest でサインアップメールをテストする

pytest でメール認証をテストするには、テストごとに新しいアドレスを用意してサインアップし、コードまたはリンクを待ってフローを完了します。Proxy Mail QA の Python ヘルパーは標準ライブラリのみを使う 1 つのファイルです。フォームの前に create_address、後に wait_for_code または wait_for_link を使います。Python 版の Playwright と Selenium のどちらでも、Free プランで動作します。

更新日:

セットアップ

Python のドキュメント からヘルパー proxymail_qa.py をテストフォルダにコピーし、API キー を PROXYMAIL_QA_API_KEY に設定します。シェル、Git から除外した .env ファイル、または CI のシークレットに設定できます。Free プランで十分です。

テスト

Python 向けの Playwright の場合:

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"])

コードの場合は wait_for_code(address, since=submitted) を使い、返された値を入力します。Selenium でも呼び出しは同じです。driver.find_element でフィールドを見つけ、コードを送信するかリンクを開きます。since により、フォーム送信前に送られたメールは待機の対象外になるため、テストを再試行しても古いメールを読むことはありません。

リンクだけでなくメールも確認する

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 は、SPF、DKIM、DMARC、localhost や暗号化されていない http へのリンク、リンク先などについて判定結果を返します。メール自体は返しません。expect_no_email は、拒否されるべき 2 回目のリセットリクエストなど、ある操作で何も送信されないことを確認します。

CI で実行し、プルリクエストにレポートを表示する

conftest.py でヘルパーの pytest フックをインポートします。GitHub Actions では、テストの前に Proxy Mail QA アクション を追加します。プルリクエストのレポートには、各メールの送信元のテストと、失敗したテストとそのメールの状況が表示されます。

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 }}

フックは実行中以外は何もせず、フック自体がテストを失敗させることはありません。詳しくは Python のドキュメント と CI での実行 をご覧ください。

次のサインアップテストで試してみてください

無料プラン、クレジットカード不要。アドレスを作成して、コードやリンクが届くのを確かめてください。

無料アカウントを作成アプリを開く

よくある質問

pip パッケージはありますか?

まだありません。ヘルパーは Python の標準ライブラリのみを使う 1 つのファイルです。Python のドキュメントからテストフォルダにコピーするだけで、インストールや更新は不要です。

Selenium で動作しますか?

はい。ヘルパーはブラウザを操作しません。アドレスを作成してコードまたはリンクを返すだけで、入力やリンクを開く操作は Selenium や Playwright のコードで行います。

メールが届かない場合は?

待機は ProxyMailQAError を送出し、Proxy Mail QA で判断できる範囲で理由を示します。最も多いのは、アプリのメールプロバイダーがサンドボックスモードやテストモードになっていて、確認済みのアドレスにしか送信しないケースです。待ち時間を延ばすのではなく、送信側を修正してください。

AI ツールでアプリを作りましたか?使ったツールを選んでください

このページについて質問がありますか?

質問はどの言語でもかまいません。ドキュメントからすぐに回答を得ることも、Proxy Mail QA チームに質問を送ることもできます。チームからの返信は英語です。