RareJob Tech Blog

レアジョブのエンジニア・デザイナーによる技術ブログです

AWS Device Farm でブラウザから実機でアプリを動かそう

AWS Device Farm

AWS Device Farmクラウドでモバイル端末をエミュレートできる仕組みです。 CodepipelineなどのCI/CDとも連携可能で、E2Eやエミュレート環境としてAWSから提供されています。

できること

  1. iOS/Android端末がクラウド上で動かせる
  2. 2019/11/05時点で利用可能なデバイス266種類
  3. 「AutomatedTest」と「RemoteAccess」が可能(後述
  4. テスト後に動画やログを自動で保存してくれているのでDLできる

最新のデバイス・OSサポート

現状ではあまり期待できないようです。色々な会社の抱えている課題の一つに 十全に検証機を用意できない というのがあると思います。特に最新のデバイスなどは価格やそもそもの入手困難さからサポートが後手になることが多いと思います。 またOSに関しても社内の検証端末のOSを上げるのはちょっと骨が折れる・・・

iOSだと特にまだ最新のXcodeでビルドできるように対応できてないのに最新のOSで問題がッ!とか起きることもあると思うのでそういうケースで使えてほしい・・・アップデート頻度等を見てもそこのスピード感はあまりないように思います。

AutomatedTest

f:id:jumbos5:20191122130444p:plain

ios/android共にE2Eテストやモンキーテストを実行できます。

テストケース

様々なテストケースの準備ができます。

f:id:jumbos5:20191122130604p:plain

中でも準備がいらないものとしてFuzzTestがあります。モンキーテストに相当するものなので、かなりシンプルですが使えるユースケースは多いと思います。

Testing mobile apps with Cucumber and Appium through TestNG on AWS Device Farmとかを見ると、上記の写真にもある通りAppium/Calabashでもテストケースが欠けるので細かい手順も実行できます。


Remote Access

f:id:jumbos5:20191122130553p:plain

こちらは本当にブラウザ上でapk/ipaのアップロードをして端末に入れてそれをポチポチ動かせるような仕組みですね。

WebRTCは動くの?

結論動く。 特に準備もいりません、うごくapk上げるだけ。 エミュレーターだとダミー映像が出るかと思いますが、DeviceFarmでは真っ黒の映像が出ます。 カメラはアクティブにはなっているようですが、設置環境によって映像が黒くなっているようです。キャリアやSMSは動かないので、ある程度基本的な動作を確認するに限定されるかと思います。

そのためカメラアプリなどでも一応動かすことはできるかもです。 ただ画面自体は黒くなるので、E2Eで成功結果として撮影物のデータ量や流れるストリームで見てしまうとコケるかもしれません。

f:id:jumbos5:20191122130628p:plain

コスト

0.17USD/デバイス

です。1分を1デバイスで = 1デバイス分なので、1つのリモートアクセスで5分使ったとすると85円くらいですかね?例えばAutmatedTestを複数デバイスで動かした場合はそのデバイス分のコストがかかります。

最初の1000分までは無料のため、ぜひ試してください。10分もあれば動きを確認できるかと思います。

プライベートデバイス

こういう概念があり、理由としてはCircleCIのようにインスタンスリザーブされ続けているわけじゃないので混んでいる時間には待ち時間が発生します。私が検証している時に長時間待つようなことはなかったのですが、将来的には利用を検討すべきかと思います。 コストは 200 USD/月 とまぁまぁ高いので、それなら端末買ったほうがよくない???とも思いますが、現在はCodePipelineと連携してCIのプロセスとも連携できるので、本格的なE2Eをデプロイメントパイプラインの中に内包したいのであればかなり有効かなと感じます。

IPなどが固定されるわけではないと思うので例えばネットワーク的にクローズとなSTG環境を持っていて、それのアプリをE2Eしたい場合はどうすれば?とか考えましたが

docs.aws.amazon.com

上記を読んでいる感じはできそうだと感じました。設定はめんどくさそうだが・・・

エミュレーション

などがエミュレートできる。GPSとか地味に地図系のアプリとかだと重要だと思うし、他アプリのインストールも複数アプリで連携するようなケースでは有用ですね。

まとめ

  • バイスごとに挙動の違うWebRTCのE2Eをデバイス*OSを並列・包括的に実行できる
  • skywayもちゃんと動くことを確認できた
  • 相手の映像は見れないのでp2psfuの接続のチェックなどのみ、カメラは真っ黒だが生きておりマイクはない
  • プラグインがあるので既存のデプロイメントプロセスに載せてE2Eが実施可能