🍣

Android / iOSアプリのE2Eテスト自動化の運用保守で日々格闘しているお話

2024/05/08に公開

こんにちは!株式会社ココナラのプロダクト開発部QA開発チーム所属のほそいです。
ココナラではAppiumを使用したAndroid / iOSアプリのE2Eテスト自動化を行っております。
詳しい内容は以下の記事をご覧いただければと思います。

https://zenn.dev/coconala/articles/a3a5e33cd1d981
https://zenn.dev/coconala/articles/a3a5e33cd1d982
https://zenn.dev/coconala/articles/a3a5e33cd1d983

今回は実際にE2Eテストの運用を行う上で、日々格闘していることをご紹介していきます。

運用・保守の内容

日常的に行っている具体的な運用・保守の内容としては以下となります。

  1. 夜間実行の結果の確認と失敗したケースの原因の調査
  2. Android / iOSアプリのリリースに伴うE2Eテストへの影響調査及び修正

上記とは別に、E2Eテストの並列実行対応や、Appiumのバージョンアップデート対応なども平行して行っておりますが、そちらはまた別の記事でお話できればと思います。

夜間実行の結果の確認と失敗したケースの原因の調査

前述の記事で紹介している通り、E2Eテストはリファクタリングにより内部構造が変わると動かなくなってしまうなど、非常に壊れやすいです。壊れやすいだけでなく、ちょっとした通信のラグやテスト環境の状況によって、アプリもE2Eテストのコードも変更していないのにケースが失敗するといったことが度々起きます。

そのため、毎晩E2Eテストを自動実行、毎朝業務開始時に結果を確認、失敗したケースがあれば原因を分析しています。
スケジュール実行結果

スケジュール実行のFailの内容を調査し、原因を特定。GitHubのチケットを切ります。
失敗原因の調査

GitHubのチケットは失敗頻度や、影響の大きさに応じて優先度をつけ、毎週1~2チケット分の修正を行っています。
失敗原因が分からず、調査が難航したケースも多々あり、ここでは一例を紹介します。

調査が難航したケース

スクロールの操作が安定しない

動くには動くが、たまにスクロールしないことがある。

  • 原因:画面内にスクロールできる要素が複数あった。

  • 修正:スクロールバーの要素を単一になるように指定する。

スクロールバーの要素

WebView画面が操作できない。

今まではWebView画面が操作できていたのにできなくなった。

  • 原因:画面内にWebViewが複数画面重なっていた。

  • 修正:switchWindowの際に操作した画面のURLを指定する。

WEBVIEW画面

Android / iOSアプリのリリース内容の取り込み

ココナラのアプリはだいたい2週間に1回程度のペースでリリースが行われています。ココナラのアプリのリリース時にはE2Eテストを実行し、全件Passしてからアプリストア申請を行うといった運用ルールとなっています。

そのため、ストア申請前にリリースするアプリの改修内容がE2Eテストに影響するかどうかを事前に確認し、修正が必要であればE2Eテストに取り込む必要があります。

修正範囲は要素の文言修正で済むものや、画面単位で修正が必要なものもあり、リリースの大きさに応じて修正コストは異なります。中でもE2Eテストに大きく影響した事例の1つを紹介します。

iOSアプリ開発のXcodeのバージョンをアップデートする

アプリのE2Eテストでは、任意のアプリのブランチで実行ができるように、E2Eテスト内でアプリのビルドを行っています。そのため、アプリのビルド方法が変更されることになった際にE2Eテスト側も同様に対応しなければなりません。

実際に対応したこと

Xcodeのアップデートすればいいだけかー。それなら直ぐに対応できるなー。と思っていた時期が私にもありました。

まず、テスト環境のAWS EC2 macインスタンスに接続して、Xcodeのバージョンをアップデートして、とりあえずアプリがビルドできるか試してみよう!

結果:Xcodeがアップデートできない。。なぜ?
原因:AWS EC2 macインスタンスのOSバージョンが古かった。

これまで使用していたAWS EC2 macインスタンスのOSバージョンがmacOS Monterey (バージョン 12)であり、アップデートしたいXcodeのバージョンが動作対象になっていませんでした。

AWS EC2 macインスタンスのOSのアップデートをしなければ。手順を見た感じ、インスタンスのグラフィカルユーザーインターフェイス (GUI) に接続する必要がありそう。

結局、Xcodeのアップデートをするために、macインスタンスをGUIに接続する設定を行い、OSのアップデートを行うことになりました。見積りではXcodeのアップデート対応の修正だけならばすぐに終わると思っていましたが、1日がかりの修正になってしまいました。

さいごに

本記事では、E2Eテストの運用・保守として日々どのようなことを行っているかの一例を紹介させていただきました。
E2Eテストの信頼性を保つためにも、Flakyなテストの調査・改善は絶対に欠かせません。また、開発のリリーススピードを落とさないためにもリリース内容のE2Eテストへの取り込みも迅速に行わなければなりません。同じようにE2Eテストの運用・保守を行ったことがある方がこの記事を読んで、「大変だよね。わかってあげられるよ」と思っていただければ幸いです。

今後は冒頭でも記載したように、E2Eテストの並列実行対応や、Appiumのバージョンアップデート対応などのテーマでお話できればと思います。

また弊社ではQA問わずエンジニア募集中です!少しでも興味を持たれた方がいましたら、エンジニア採用ページをご覧ください。
https://coconala.co.jp/recruit/engineer/

Discussion