Autifyでメール送受信を伴うユーザー操作のテストをしてみた(固定メールアドレスを使った場合)

2022.03.24

こんにちは、CX事業本部 IoT事業部の若槻です。

テスト自動化プラットフォームAutifyでは、メールテスト機能によりテストで使用するメールアドレスの作成とメールを使用したテストの作成・実行が可能です。

このメール機能では、2種類のメールアドレスの作成方法があるとのことです。

メールアドレスには、テスト実行ごとに異なるアドレスが発行される「ランダムメールアドレス」と、常に同じアドレスが使用される「固定メールアドレス」の2種類があります。

今回は、Autifyのメール機能で固定メールアドレスを使用し、メール送受信を伴うユーザー操作のテストをしてみました。

やってみた

例として、Cognito user poolでのユーザーの操作によるパスワードリセットメールの送信のテストをAutifyで作成してみます。

user poolの作成

テストに使用するCognito user poolを作成します。

# user pool作成
$ USER_POOL_NAME=test-pool
$ aws cognito-idp create-user-pool \
  --pool-name ${USER_POOL_NAME} \
  --alias-attributes "email" \
  --schema \
    Name=email,Required=true

# user pool domain作成
$ USER_POOL_ID=<USER_POOL_ID>
$ COGNITO_DOMAIN_NAME=20220324-test
$ aws cognito-idp create-user-pool-domain \
  --user-pool-id ${USER_POOL_ID} \
  --domain ${COGNITO_DOMAIN_NAME}

# user pool client作成
$ USER_POOL_CLIENT_NAME=test-client
$ REDIRECT_URL=https://classmethod.jp/
$ aws cognito-idp create-user-pool-client \
  --user-pool-id ${USER_POOL_ID} \
  --client-name ${USER_POOL_CLIENT_NAME} \
  --no-generate-secret \
  --supported-identity-providers "COGNITO" \
  --callback-urls ${REDIRECT_URL} \
  --logout-urls ${REDIRECT_URL} \
  --allowed-o-auth-flows "code" \
  --allowed-o-auth-scopes "phone" "email" "openid" "profile" "aws.cognito.signin.user.admin" \
  --allowed-o-auth-flows-user-pool-client

Autifyでの固定メールアドレスの作成

Autifyのコンソールにサインインします。

[アカウント]-[設定]でワークスペースを選択し、[メールアドレス]で[作成]をクリック。

メール名を指定して[作成]をクリック。

するとtestmail.autify.comというドメインで、ランダムな英数字から成るメールアドレスを生成できました。

固定メールアドレスでユーザーをuser poolに登録する

テスト準備として、固定メールアドレスを使用したユーザーをuser poolに登録します。

アプリなどへのユーザー登録時には、一般的にはメールアドレスの確認や一時パスワードの通知などのメールの送受信が発生しますが、Autifyで生成したメールアドレスでは受信トレイを利用できるため、テスト用ユーザーの準備なども簡単に行えます。

$ USER_NAME=autify-user01
$ MAIL=<先程作成した固定メールアドレス>

$ aws cognito-idp admin-create-user \
  --user-pool-id ${USER_POOL_ID} \
  --username ${USER_NAME} \
  --user-attributes \
    Name=email,Value=${MAIL} \
    Name=email_verified,Value=True

Autifyのワークスペース設定コンソールのメールアドレス一覧で先程作成した固定メールアドレスを選択。

受信トレイが開きます。メールが届いているので選択。

受信メールの内容が確認できます。一時パスワードを控えます。

user pool clientのHosted UIのURLを生成し、ブラウザでアクセスします。

$ COGNITO_DOMAIN_NAME=<user pool domain>
$ CLIENT_ID=<user pool clientID>
$ REDIRECT_URL=https%3A%2F%2Fclassmethod.jp%2F
$ REGION=ap-northeast-1

$ echo "https://${COGNITO_DOMAIN_NAME}.auth.${REGION}.amazoncognito.com/login?response_type=code&client_id=${CLIENT_ID}&redirect_uri=${REDIRECT_URL}"

固定メールアドレスと一時パスワードを指定してサインインします。

新しいパスワードを指定して送信します。

サインインが完了し、コールバックURLにリダイレクトされました。

メール送受信を伴うテストを作成する

今回は、テストシナリオ「サインイン画面からの操作によりパスワードリセットメールが届く」を作成してみます。

Autifyコンソールで[シナリオ]で[新規シナリオ]をクリック。

[開始URL]に先程作成したHosted UIのURLを指定し、[レコーディングを開始]をクリック。

するとレコーダーが起動し、ブラウザのシークレットウィンドウで開始URLが開きます。[Forgot your password?]をクリック。

固定メールアドレスを指定し、[Reset my password]をクリックしてパスワード変更メールを送信します。

右下のウィジェットのメールアイコンをクリック。

[固定]タブで今回使用した固定メールアドレスを選択し、受信トレイを開きます。

すると新しいメールが届いているので開きます。

パスワードリセットのための検証コードが記載されたメールがちゃんと届いていますね。[戻る]をクリック。

[閉じる]をクリック。

ウィジェットのチェックマークをクリック。

これにより受信メールに対するアサーションを指定することができます。

まずはメールの件名がYour verification codeであるというアサーションを追加します。

再度チェックマークをクリックし、メールの本文にYour password reset code isという文字列を含んでいるというアサーションを追加します。

[保存]をクリックしてレコーディングを完了させます。

するとシナリオの画面に戻ります。レコーディングした操作が記録されています。メールを開くステップが件名が Your verification code に近いメールを開くとなっているのが賢くて凄いですね。

不要なステップを削除し、シナリオ名を指定したら[保存]をクリックします。

[今すぐ実行]をクリック。するとテストが開始されます。

テスト結果を見ると、テストが成功したことが確認できました!

あとはこのテストを定期的あるいはアプリの実装変更時などに実行するようにし、不具合や意図しない影響が発生していないかのテスト(リグレッションテスト)を行うことになります。

テストを失敗させてみる

テスト失敗時の動作も確認してみます。

user poolからユーザーを削除します。

$ aws cognito-idp admin-delete-user \
--user-pool-id ${USER_POOL_ID} \
--username <固定メールアドレス>

テストを実行すると、既にユーザーは削除されているためパスワードリセットメールが送信されず、Autify側でメールが見つけられずエラーとなりました。期待通りです!

おわりに

Autifyのメール機能で固定メールアドレスを使用し、メール送受信を伴うユーザー操作のテストをしてみました。

AWS単体でメール送受信を伴うテストをしようとしたことがあったのですが、Route 53にMXレコードを登録したり、S3バケットに保管されたメールオブジェクトをパースする処理をLambdaで作ったりととても大変でした。しかしAutifyを使用すればこれらの面倒をすっ飛ばして簡単にテストケースの作成や実行ができるため重宝しそうです。

参考

以上