背景
昨年PlaywrightによるE2Eの自動テストの拡充を行なっていましたが、自分がQAとして関わっているプロダクトには以下のようなメール認証を必要とするシチュエーションがいくつかあり、そこを自動テストでどのように突破するかが課題になっていました。
- アカウント作成時のメール認証
- ログイン時にメールからコードを取得し入力する
- ユーザー招待時にメールの招待リンクを踏む
Mailosaurについて
上記の課題を解決するために、いろいろと調べていたところMailosaurというサービスがあるとわかりました。
おそらく造語なので読み方がいまだに自信ないですが、たぶんメーラソーで問題ないと思います。
イギリスにある企業が開発しているサービスです。公式HPによると使用している企業にはPayPalやUberなどの名前が掲載されていますが、日本語の情報は現状あまりないので日本で導入している企業はさほど多くないかもしれません。
ユーザー数や1日に受信可能なメール数により料金が変わります。(2週間のフリートライアルが可能です。)
使い方
個人的にはとても使いやすいサービスだと思っています。
Mailosaurの利用を開始するとメールサーバーを作成できるので、mailosaurドメインでQA対象のプロダクトのアカウント作成を行います。
例
test@{your_server_id}.mailosaur.net
そうすると、mailosaurのメールサーバーに届いたメール内に記載されているコードやリンクはAPI経由で容易に取得することができるのでPlaywrightと組み合わせることにより、自動テストでメール認証を突破することが可能になります。(もちろんGmailのように画面からメールを確認することも可能です。)
例えばログイン画面でメールからコードを取得して入力している箇所のコードは以下のような形になります。
import MailosaurClient from "mailosaur";
const mailosaur = new MailosaurClient(YOUR_MAILOSAUR_API_KEY);
const serverId = YOUR_MAILOSAUR_SERVER_ID;
test("ログイン", async ({ page }) => {
// テスト開始以後のメールを取得するために指定する
const testStart = new Date();
const testMailAddress = "test@abcde.mailosaur.net"
const password = "password"
// メールアドレス、パスワードを入力
await page.mailAddressForm.fill(testMailAddress);
await page.passwordForm.fill(password);
await page.loginButton.click();
// 送信されたメールを取得
const email = await mailosaur.messages.get(
serverId,
{
sentTo: testMailAddress,
subject: "認証コードのお知らせ",
},
{
receivedAfter: testStart,
}
);
// メールからコードを取得する
const code = email.html.codes[0].value;
// コードを入力
await page.codeForm.fill(code);
await page.confirmButton.click();
});
sentTo(送信先メールアドレス)
とsubject(件名)
を指定することにより、取得すべきメールを特定していますが、それだけだとテストを重ねると重複してしまうのでreceivedAfter
を指定してテスト開始以降に送信されたメールに絞ることにより対象のメールを1件にすることもできます。
今後
今回は自動テストにおいてのメール認証突破に関する内容になりましたが、Mailosaurはメール送信やメール文面チェックなどのQAでも活用できると思いますので、活用の幅を広げていきたいと考えております。