MoeMail
返回部落格

自動化郵件驗證測試(Playwright、Cypress、Selenium)

註冊與密碼重設流程是出了名的難測,因為關鍵那一步——驗證信——會離開你的應用程式。解法是:給每次測試執行一個它能用程式讀取的專屬一次性收件匣。這篇指南示範這個模式在 Playwright、Cypress 與 Selenium 上的做法,底層架在一個一次性郵箱 API 之上。

為什麼郵件測試容易不穩

郵件是非同步的:它得穿過 SMTP 伺服器,可能要幾秒才到,而測試卻期待快速、可預期的結果。多次執行共用同一個人類信箱,會造成互相干擾與殘留的舊訊息。解藥是按需建立郵箱——每個測試配一個全新、可送達的地址,再透過 API 消化它的訊息。

這個模式

  1. 在測試開頭開一個臨時郵箱(隨機或自訂地址)。
  2. 把 UI 推進到會觸發驗證信的那一步。
  3. 等待訊息——輪詢收件匣,或對 webhook 反應以做到零延遲送達。
  4. 從訊息內文抽出驗證連結或一次性驗證碼。
  5. 繼續流程(點連結/輸入驗證碼)並斷言成功。

保持 DRY:一個可重用的幫手

別把收件匣 API 呼叫散落在每個測試檔裡。把建立/等待/抽取包進一個模組:一個 Playwright fixture、一個 Cypress 自訂指令,或一個 Selenium 幫手類別。這樣測試讀起來就像「開收件匣、註冊、等驗證、斷言」——傳輸層的細節不會滲進斷言裡。

各框架備註

  • Playwright——把幫手做成 fixture,讓每個測試自動拿到全新收件匣;等訊息時用 web-first 的 expect.poll
  • Cypress——把 API 呼叫包進 cy.task 或自訂指令;別用隨意的 cy.wait,改成輪詢直到訊息抵達。
  • Selenium——把建立/輪詢/抽取放進類似 page-object 的幫手,並用明確的等待來等訊息。

可靠性訣竅

優先用 webhook 取代密集輪詢,以削減延遲與請求數。給每次執行一個獨一無二的地址,讓平行測試永遠不會撞號。大型套件要留意每月 API 配額——在安全的前提下共用收件匣做多次斷言,並把輪詢間隔放寬。每個呼叫都用 X-API-Key 標頭裡的 API key 來認證。

立即開始

從個人檔案抓一把 API key、讀 OpenAPI 文件,先串一個 fixture:開收件匣、等一封訊息。第一次接觸一次性收件匣?先從什麼是臨時郵箱開始。