Genymotion CloudとMacStadiumを利用したクラウド環境でのAppiumテストの並列実行

Aisyah Dzulqaidah氏による「Cloud Based Mobile Application Testing with Appium」では、より現場に近いモバイルテスト環境を紹介していました。
スピーカーが所属しているチームでは、iOS/Androidで提供しているアプリに対してAppium活用し100テストケース以上実装していたのですが、実行時間が長くなってしまうことが課題になっていました。
それに対する解決策として、Androidエミュレーター/iOSシミュレーターを活用し、並列にテストを実行できる環境を作ることによって実行時間の短縮に成功しました。
AndroidエミュレーターはGenymotion Cloudという、クラウド上で簡単にAndroidエミュレーターを展開できるサービスを利用していました。セッションでは、実際にAppiumとGenymotion Cloudを利用したテストの並列実行のデモが紹介されていました。
iOSシミュレーターはmacOS上で動かす必要があり、macOSはライセンス上Appleのハードウェアで動かす必要があります。そのため、通常クラウドでの実行が難しいのですが、MacStadiumというmacハードウェアをクラウド上でレンタルできるサービスを活用していました。マシン自体のコストだけを比較してしまうとMacStadiumの方が高くなってしまいがちですが、長期的なマシン・OSのメンテナンスコストやスケールを考えると使う価値はあると感じました。
DockerでAppiumのテストを動かす

開発環境でDockerなどのコンテナ技術を利用することは、もはやデファクトスタンダードになりました。Appiumでテストを実行する場合にも、Node.jsやAndroid SDKなどインストールする必要があるものが多く、環境構築のハードルが高くなりがちでした。
Sargis Sargsyan氏によるセッション「Run your Appium tests using Docker Android」ではAppiumにおけるDockerの活用方法について紹介していました。
Appiumプロジェクトが提供するappium-docker-androidでは、Appiumと必要なインストール群をDockerイメージとして提供してあり、Android実機をUSB接続するだけでAppiumの実行環境を構築することができます。
Docker for macの場合には、DockerコンテナからUSBデバイスにアクセスできない制限があるのですが、docker-machineを利用しVM上にDocker環境をプロビジョニングすることで対応できる解説がありました。
また、上記のDockerイメージにAndroidエミュレーターを入れたものとして、Docker Android(budtmo/docker-android)も提供されています。こちらは、Androidエミュレーターを扱う性質上ハードウェアの制限がありますが、より手軽にAppiumの開発環境を手に入れることができます。
また、Appiumのテストに必要なものがすべて入っているため、クラウド上で並列実行させることも可能です。以前、私が試した記事があるのでよろしければご覧ください。
Docker化によって、より開発環境・テスト環境の構築が手軽になってきています。
おわりに
AppiumConfにおいて、安定・スケールできるモバイルテスト環境をどう作るのか、さまざまな知見を得ることができました。
そして、上記のセッションでは共通して「万能なモバイルテスト環境はない」という主張がされており、私も共感しました。
モバイルテスト環境1つとらえても、エミュレーター・実機デバイス・通信環境などによって特徴が異なり、その環境で実行すべきテストも異なるからです。
Mobile Test Pyramid(「The Mobile Testing Pyramid」(Elemental Selenium)より引用)
「Run your Appium tests using Docker Android」のセッションではMobile Test Pyramidが紹介されていました。
Appiumのような同じE2E UIテストであったとしても、そのテストはどの環境で実行するのが良いか考え、分けていくことが重要だと主張していました。具体的にはシステムテストや機能テストのみで良い場合には、ブラウザやエミュレーターを使い、パフォーマンステストや実機特有の結合テストを実施したい場合のみ実機テバイスを活用します。
このMobile Test Pyramidと、上記のセッションのノウハウを組み合わせることによって、安定・スケールできるモバイルテストを実現できるのではないかと感じました。
