AWS Device FarmでWebRTC（SkyWay）のテストをしよう

# AWS Device Farm

[AWS Device Farm](https://aws.amazon.com/jp/device-farm/)はクラウドでモバイル端末をエミュレートできる仕組みです。

---

## できること

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

Hueweiが結構WebRTCで問題が起きているのでこの種類がないのが個人的にはネック・・・

---


## AutomatedTest
ios/android共にE2Eテストやモンキーテストを実行できます。
<img width="1252" alt="スクリーンショット 2019-11-06 10.06.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31237/d2b20c64-ecfb-68f3-a5b5-39c34ba9ee6b.png">
<img width="1257" alt="スクリーンショット 2019-11-06 10.06.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31237/c7bddeed-4a3a-d08a-3e85-6a38e72ad841.png">
<img width="1242" alt="スクリーンショット 2019-11-06 10.06.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31237/040bb79a-a8be-1092-abdf-46816e2bb8aa.png">

---


### テストケース

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

<img width="1256" alt="スクリーンショット 2019-11-06 10.07.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31237/2049318d-af79-faee-a3b0-f947b2237e18.png">

中でも準備がいらないものとして[FuzzTest](https://docs.aws.amazon.com/ja_jp/devicefarm/latest/developerguide/test-types-built-in-fuzz.html)があります。モンキーテストに相当するものなので、かなりシンプルですが使えるユースケースは多いと思います。

[Testing mobile apps with Cucumber and Appium through TestNG on AWS Device Farm](https://aws.amazon.com/jp/blogs/mobile/testing-mobile-apps-with-cucumber-and-appium-through-testng-on-aws-device-farm/)とかを見ると、上記の写真にもある通りAppium/Calabashでもテストケースが欠けるので細かい手順も実行できます。

---

## Remote Access

<img width="1280" alt="スクリーンショット 2019-11-06 10.13.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31237/888bdc41-0a51-d479-a13a-eeac00c0d05a.png">

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

---

### WebRTCは動くの？

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

![スクリーンショット 2019-11-05 23.52.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31237/e24d02d0-04c3-a1cc-b224-d3c91c6c2994.png)

---


## コスト

> 0.17USD/デバイス分

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

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

---

### プライベートデバイス

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

---

### エミュレーション

- GPS
- 他アプリのインストール
- Wifi/Bluetooth/GPS/NFC

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

---

### fastlaneと連携

awsのプラグインがあるので、CircleCIやJenkins経由での実行のプロセスに載せることもできる。

http://fushiroyama.hatenablog.com/entry/2019/09/09/010446

---

### まとめ

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

---

## 参考

https://www.slideshare.net/keisuke69/automated-testing-on-aws-device-farm