モバイルアプリのE2E自動テストをMagicPodで始めた話

こんにちは、QAエンジニアのSammyです。今回は、最近導入したE2Eテスト自動化ツール「MagicPod」について、導入の背景からトライアルの経緯、実際に使ってみた感想までをまとめてお届けします。

モバイルアプリのテスト自動化を検討される方のヒントになれば嬉しいです。

耳で聞きたい方はぜひこちらをお聴きください👂


1.導入の背景

Voicyでは2つのモバイルアプリを提供しており、合計で2000件以上のリグレッションテストケースがありました。新機能が増えるたびにテストケース数も増えており、リリース前に手動で実施していたリグレッションテストが、1日では終わらなくなりつつありました。

まずは、リグレッションテストケースの見直しを行いました。テストケースの数は1400件程まで大幅に減らすことができましたが、テスト実行時間はほぼ変わりませんでした。 そこで、次の一手として、テスト実行の自動化を検討し始めました。

1-1.自動テストの目的

私たちが自動テストを運用する目的は主に以下の2点です:

  • 最低限のユーザー体験を継続的に担保すること
  • 安全にリリースできる状態を、持続可能なコストにキープすること

特に、E2Eテストに関しては、すべての機能を網羅的に自動化するのではなく、よく使われる主要シナリオから順にカバーする方針にしました。

1-2.E2Eテストとは何か?

E2E自動テストを推進するにあたって、社内での自動テストの実装状況を確認しています。 その中で、E2Eテストが指している内容が開発エンジニアとQAエンジニアで異なることに気づきました。

E2Eテストが指す2つの意味については、先日、社外勉強会でも発表しています(英語です)👇

speakerdeck.com

自動テストをどのような粒度(テストの目的・スコープ・サイズなど)で分類し、現在どこに注力すべきかについては、まさに今、絶賛ディスカッション中です。

今回はひとまず、自動テストの目的のひとつである「持続可能なコストでのテスト運用」を、「リグレッションテストの実行コストを下げる(例:X人日 → Y人日)」と定義し、その実現手段としてE2E自動テストツールの導入を進めました。


2.ツールの比較

ツールの選定にあたっては、2つのツールをトライアルで利用しました。

MagicPodでは、なんとiOS/Androidともに約15分ずつでセットアップが完了! サクッとテストを作成・実行できる環境が整いました。

また、事前にツールの要件をリストアップし、以下の観点でツールを評価しています。

  • モバイルネイティブアプリ対応
  • モバイル独自の機能への対応有無
  • 実装方法(ノーコード/ローコード/自身でコーディング)→テスト作成の難易度は自組織に合っているか
  • 他ツールとの連携(CIパイプラインからのテスト実行、テスト結果の通知)
  • テスト環境との接続方法、テスト実行方法(専用のテスト実行環境が必要か、社内の検証環境で実行できるか)
  • テスト結果の振り返りのしやすさ
  • サポートの手厚さ
  • プラン・料金

2-1.自動化対象の機能の抽出

どの機能から自動化するのかの選定は、「機能の重要度(リスク)」「手動コスト(手動でやるとコストがかかるもの)」「自動コスト (自動化するためにコストがかかるもの)」という3つの軸で判断しました。それぞれを高中低で評価し、機能の重要度が高くて、手動コストが高い、そして自動コストが高くなさそうなものをピックアップしました。

Voicyの基本機能として音声の収録と再生がありますが、自動化するためにコストが高いと判断し、自動化対象の優先度を下げています。

結果として、トライアルでは以下の機能のテストを作成しました。

  • ログイン/ログアウト ←一番よく使う機能
  • メール認証を伴うアカウントの新規登録 ←他アプリを利用し、実装が難しそうな機能
  • 決済を含む有料コンテンツの購入 ←外部サービスとの連携が必要な機能

いずれも、E2E自動テストツールで対応できるのか?テスト作成の難易度は?といった観点で評価しています。


3.MagicPod、実際に使ってみてどうだったか?

MagicPodを使ってまず驚いたのは、テスト作成の簡単さです。行った操作がテストとして記録されることはもちろんですが、テストを作りながら画面ごとに少しずつテストを実行することで、今作ったテストの内容で問題がないかをすぐに確認することができます。

以下、特によかった点を紹介します。

3-1.再利用性の高い変数管理

テスト間で使いまわしたいログイン情報などは、共有変数機能を利用することで、各テストにハードコーディングせずに済みます。

support.magic-pod.com

3-2.サポートが手厚い

サポートへの問い合わせは、テスト実行画面やテスト結果画面から直接行え、返信も迅速でした。困ったときの「すぐ聞ける安心感」が心強かったです。

3-3.難しそうだった「メール認証」も突破

support.magic-pod.com

Voicyでは、メールアドレスでアカウントを新規登録した場合、メールに届いたURLをクリックする必要があります。どのようにメールをセットアップし、どのようにテストを実装したら良いか分からず不安でしたが、ヘルプページの内容がとても分かりやすかったです!

PythonやPIPのインストールなどで少し手間取りましたが、同僚のサポートもあり、メール認証を含むテストも無事に作成できました。iOS/Android合わせてアカウントの新規登録のテストが約4時間で完成しました。


4.現在の悩み

テストの粒度をどうするか悩んでいます。

  • 機能単位でテストを切るか?
  • 一連のユーザー行動として設計するか?

例えば、ログイン、プレミアムリスナーの加入という機能の単位でテストを作っていくのか。新規ユーザーがアカウントを登録してから最初の放送を再生する、というシナリオでテストを作っていくのかです。

まずは小さなパーツとして各機能を自動化し、いずれ大きなシナリオを作れる状態にしていきたいと考えています。一方で1テストの実行時間が10分を超えないようには気をつけていきたいです。

そして、人の目/耳で確認すべき部分はどこか?といった線引きも、引き続き探っていく必要があると感じています。


5.今後の展望

MagicPod導入後、4月には2つのテストを自動化して定期実行に乗せることができました。まずは機能数を増やしていくことで、手動リグレッションテストの実行の負担・コストが減っていくか=「持続可能なコストにキープ」できているかを検証します。

そして、機能数は少なくても、OSバージョンと機種のバリエーションを増やしていくことで、自動テストの強みを活かしていきたいと考えています。

また、現状は手動でE2E自動テストを実行していますが、テストが安定してPassすることを確認でき次第、CI/CDパイプラインに組み込んでいきます。