Contenu connexe
Similaire à DroidKaigi_devicefarm (20)
DroidKaigi_devicefarm
- 1. Copyright © DeNA Co.,Ltd. All Rights Reserved.
DroidKaigi 2018
DAY.02 (Feb 9th, 2018)
duck
SWETグループ
DeNA Co., Ltd
Androidで利用できる
デ バ イ ス フ ァ ー ム の
メリット・デメリット
の紹介
- 2. Copyright © DeNA Co.,Ltd. All Rights Reserved.
自己紹介
前田隼輔
• @duck8823
• 所属
• DeNA SWETグループ テスト基盤チーム
- 3. Copyright © DeNA Co.,Ltd. All Rights Reserved.
Android端末の種類
Google "Android - Android スマートフォン"
URL http://www.android.com/intl/ja_jp/phones/
- 4. Copyright © DeNA Co.,Ltd. All Rights Reserved.
世界はたのしい。開発者は?
実機検証の必要性
• エミュレーターと実機は異なる
増え続ける端末の種類
• OS(メーカーによるカスタマイズ)
• 解像度
• 実機の管理場所・方法
国内未発売の端末
端末の管理が面倒
- 6. Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
- 7. Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
- 8. Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームとは
• 端末を(物理的に)集中管理
• WebブラウザやAPI、クライアントソフト
を介して特定の端末を操作
- 9. Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームの利用
• 開発マシンに物理的に接続する必要がない
• 複数人が利用する場合も貸出管理の必要なし
• CI/CDとの連携
- 10. Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームの種類(提供形態)
クラウド(共有)
• 他ユーザーと同じ端末を利用
クラウド(専有)
• 端末は専有
オンプレミス
• サーバーにインストール
- 11. Copyright © DeNA Co.,Ltd. All Rights Reserved.
メリット
• 端末の管理コスト減
• 日本未発売の端末利用
デメリット
• テスト失敗時の調査し
づらさ
• 端末設定の制限
• 他ユーザーとの端末の
競合
クラウド(共有)
- 12. Copyright © DeNA Co.,Ltd. All Rights Reserved.
メリット
• 端末の管理コスト減
• 日本未発売の端末利用
• 端末は専有
• セキュリティ
• テスト前・後処理を
除外できる場合
デメリット
• テスト失敗時の調査し
づらさ
• 端末設定の制限
• 高コスト
クラウド(専有)
- 13. Copyright © DeNA Co.,Ltd. All Rights Reserved.
メリット
• 端末の細かい設定
• セキュリティ
• テスト前・後処理を
除外できる場合
• 通信速度
(内部ネットワーク)
デメリット
• 導入・運用コスト
(サーバーの管理、
端末の劣化 etc.)
• 日本にインストールした
場合は海外端末
を利用できない
オンプレミス
- 14. Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームでできること
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
CI/CDとの連携
- 15. Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームでできること
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
CI/CDとの連携
- 16. Copyright © DeNA Co.,Ltd. All Rights Reserved.
端末の操作
• ブラウザやクライアント上から端末を操作
• ネットワークの影響を受けやすい
• デザインの確認など
- 17. Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームでできること
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
CI/CDとの連携
- 18. Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト
• テスティングフレームワークを利用したテスト
• リグレッションテスト
• サポートするフレームワークは異なる
• Espresso and/or Appium(JUnit)はほぼサポート
- 19. Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Espresso
• Google製のUIテストツール
• 自動同期機能が特徴の一つ
• 昨日のセッション
(Espressoテストコードの同期処理を究める)も👀
https://speakerdeck.com/sumio/synchronization-capabilities-of-espresso
• アプリのapk、テスト用のapk をアップロード
- 20. Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Appium
• クライアント/サーバーモデル
• Appiumクライアントは各種フレームワークに対応
• JUnit(Java) / RSpec(Ruby) / Python...
Appiumサーバー
Appiumクライアント
in
テストスクリプト
REST ドライバー
- 21. Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Appium
• テストスクリプトの実行場所
• サーバーで実行
• ローカルで実行
デバイスファーム
- 22. Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Appium
• テストスクリプトの実行場所
• サーバーで実行
• フレームワークが限定される
• アップロードする準備が必要
(テストスクリプトをzip等で固める手順)
• ローカルで実行
• フレームワークを問わない
• テストコードを変更する必要
(AppiumサーバーのURL + 認証情報)
- 23. Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームでできること
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
CI/CDとの連携
- 24. Copyright © DeNA Co.,Ltd. All Rights Reserved.
モンキーテスト
• 利用者がテストを用意しない
• アプリをランダムに操作
→ クラッシュするとテスト失敗
• 認証情報などを指定できるものもある
- 25. Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームでできること
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
CI/CDとの連携
- 26. Copyright © DeNA Co.,Ltd. All Rights Reserved.
ダイレクトアクセス
• ネットワーク経由でADBを実行
(USBで接続してるのと同様に利用できる)
• 任意のテスティングフレームワークを実行可能
- 27. Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームでできること
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
CI/CDとの連携
- 28. Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI/CDとの連携
• コマンドラインで実行できればCI/CDで実行可能
• ジョブ結果
• コマンドがフォアグラウンドで実行される必要
• サードパーティ製のプラグイン
- 29. Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームでできること
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
CI/CDとの連携
サービス(ソフトウェア)によって異なる
- 30. Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
- 31. Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
3大クラウドインフラ
&
OSS
- 32. Copyright © DeNA Co.,Ltd. All Rights Reserved.
実際に動かして調査
conference-app-2018
https://github.com/DroidKaigi/conference-app-2018
Espresso のテストはそのまま利用
Appium (JUnit) のテストを追加
DroidKaigi 2018 official Android app
Copyright 2018 DroidKaigi
Licensed under the Apache License, Version 2.0.
http://www.apache.org/licenses/LICENSE-2.0
DroidKaigi 2018
Code of Conduct
http://www.association.droidkaigi.jp/en/code-of-
conduct.html
Licensed under a Creative Commons Attribution
3.0 Unported License.
https://creativecommons.org/licenses/by/3.0/deed.en_US
- 33. Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
- 34. Copyright © DeNA Co.,Ltd. All Rights Reserved.
AWS Device Farm
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス(プライベートデバイス)
AWS 群の一つ
💰最初の 1000 分まで無料・従量課金
- 35. Copyright © DeNA Co.,Ltd. All Rights Reserved.
端末の操作
• セッション開始後、
インストールが可能
• PCキーボード利用可能
• ビデオの録画
• ログ
• Logcat
• TCP dump
AWS Device Farm
- 36. Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Espresso
• アプリ.apk と テスト.apk をアップロード
• 細かいデバイスの設定が可能
• 別のファイル、アプリ
• ロケーション
• 言語
• ネットワークプロファイル( 速度etc. )
AWS Device Farm
- 37. Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Espresso
• ビデオの録画
• パフォーマンスの計測
• CPU
• メモリー
• スレッド数
• ログ
• テストログ
• Logcat
• TCP dump
AWS Device Farm
- 38. Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Appium
• アプリ.apk と テスト.zip をアップロード
• JUnit(Java)の場合、依存関係などもまとめる
• 細かいデバイスの設定が可能
• 別のファイル、アプリ
• ロケーション
• 言語
• ネットワークプロファイル( 速度etc. )
AWS Device Farm
- 39. Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Appium
• ビデオの録画
• パフォーマンスの計測
• CPU
• メモリー
• スレッド数
• ログ
• Appium Java Output
• Appium Java XML
• Appium Server
• Logcat
• TCP dump
AWS Device Farm
- 40. Copyright © DeNA Co.,Ltd. All Rights Reserved.
モンキーテスト AWS Device Farm
• Built-in: Fuzz / Built-in: Explorer
• アプリ.apk をアップロード
• 細かいデバイスの設定が可能
• 別のファイル、アプリ
• ロケーション
• 言語
• ネットワークプロファイル( 速度etc. )
- 41. Copyright © DeNA Co.,Ltd. All Rights Reserved.
モンキーテスト
• Built-in: Fuzz
• ログインなし
• Built-in: Explorer
• ログインあり
• ビデオの録画
• ログ
• イベントログ
• Logcat
• TCP dump
AWS Device Farm
Fuzz
Explorer
- 42. Copyright © DeNA Co.,Ltd. All Rights Reserved.
ダイレクトアクセス AWS Device Farm
• プラベートデバイスを契約している必要あり
• ADBを利用してアクセス可能
https://docs.aws.amazon.com/ja_jp/devicefarm/latest/
developerguide/direct-device-access.html
- 43. Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI/CDとの連携 AWS Device Farm
aws devicefarm create-upload --project-arn "${PROJECT_ARN}"
--name app-debug.apk
--type ANDROID_APP
curl -T app/build/outputs/apk/debug/app-debug.apk ${URL_FOR_APP_UPLOAD}
aws devicefarm create-upload --project-arn "${PROJECT_ARN}"
--name appium-java-from-cli.zip
--type APPIUM_JAVA_JUNIT_TEST_PACKAGE
curl -T appium/target/zip-with-dependencies.zip "${URL_FOR_APPIUM_TEST_UPLOAD}”
aws devicefarm schedule-run
--project-arn "${PROJECT_ARN}"
--device-pool-arn "${DEVICE_POOL_ARN}"
--test "type=APPIUM_JAVA_JUNIT,testPackageArn=${APPIUM_TEST_ARN}”
--app-arn "${APP_ARN}"
- 44. Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI/CDとの連携 AWS Device Farm
aws devicefarm create-upload --project-arn "${PROJECT_ARN}"
--name app-debug.apk
--type ANDROID_APP
curl -T app/build/outputs/apk/debug/app-debug.apk ${URL_FOR_APP_UPLOAD}
aws devicefarm create-upload --project-arn "${PROJECT_ARN}"
--name appium-java-from-cli.zip
--type APPIUM_JAVA_JUNIT_TEST_PACKAGE
curl -T appium/target/zip-with-dependencies.zip "${URL_FOR_APPIUM_TEST_UPLOAD}”
aws devicefarm schedule-run
--project-arn "${PROJECT_ARN}"
--device-pool-arn "${DEVICE_POOL_ARN}"
--test "type=APPIUM_JAVA_JUNIT,testPackageArn=${APPIUM_TEST_ARN}”
--app-arn "${APP_ARN}"
1. アップロードする
ためのURLを発行
2. PUT
- 45. Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI/CDとの連携 AWS Device Farm
aws devicefarm create-upload --project-arn "${PROJECT_ARN}"
--name app-debug.apk
--type ANDROID_APP
curl -T app/build/outputs/apk/debug/app-debug.apk ${URL_FOR_APP_UPLOAD}
aws devicefarm create-upload --project-arn "${PROJECT_ARN}"
--name appium-java-from-cli.zip
--type APPIUM_JAVA_JUNIT_TEST_PACKAGE
curl -T appium/target/zip-with-dependencies.zip "${URL_FOR_APPIUM_TEST_UPLOAD}”
aws devicefarm schedule-run
--project-arn "${PROJECT_ARN}"
--device-pool-arn "${DEVICE_POOL_ARN}"
--test "type=APPIUM_JAVA_JUNIT,testPackageArn=${APPIUM_TEST_ARN}”
--app-arn "${APP_ARN}"
自動テストの場合は
テストスクリプトも
アップロード
- 46. Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI/CDとの連携 AWS Device Farm
aws devicefarm create-upload --project-arn "${PROJECT_ARN}"
--name app-debug.apk
--type ANDROID_APP
curl -T app/build/outputs/apk/debug/app-debug.apk ${URL_FOR_APP_UPLOAD}
aws devicefarm create-upload --project-arn "${PROJECT_ARN}"
--name appium-java-from-cli.zip
--type APPIUM_JAVA_JUNIT_TEST_PACKAGE
curl -T appium/target/zip-with-dependencies.zip "${URL_FOR_APPIUM_TEST_UPLOAD}”
aws devicefarm schedule-run
--project-arn "${PROJECT_ARN}"
--device-pool-arn "${DEVICE_POOL_ARN}"
--test "type=APPIUM_JAVA_JUNIT,testPackageArn=${APPIUM_TEST_ARN}”
--app-arn "${APP_ARN}"
ジョブをスケジュール
(結果を待たない)
- 47. Copyright © DeNA Co.,Ltd. All Rights Reserved.
• 公式のGradleプラグイン
https://github.com/awslabs/aws-device-farm-gradle-plugin
→ テストのスケジュールまで(結果を待たない)
• 公式のJenkinsプラグイン
https://docs.aws.amazon.com/ja_jp/devicefarm/latest/developergu
ide/continuous-integration-jenkins-plugin.html
• Fastlane プラグイン
https://github.com/hjanuschka/fastlane-plugin-aws_device_farm
• テスト種類、デバイスプール、ファイルのパスの設定
• 結果を待ってくれる
CI/CDとの連携 AWS Device Farm
- 48. Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
- 49. Copyright © DeNA Co.,Ltd. All Rights Reserved.
Firebase Test Lab
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
Google提供
💰無料枠あり(5 real device / day)
Android Studioとの連携
- 50. Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Espresso
• アプリ.apk と テスト.apk をアップロード
• デバイスの設定
• Android Test Orchestrator を利用可能
• 言語
Firebase Test Lab
- 51. Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Espresso
• ビデオの録画
• 前後に端末情報
• パフォーマンスの計測
• CPU
• メモリー
• ネットワーク
• ログ
• テストログ
• テスト結果(xml形式)
• Logcat
Firebase Test Lab
- 52. Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Espresso
• ビデオの録画
• 前後に端末情報
• パフォーマンスの計測
• CPU
• メモリー
• ネットワーク
• ログ
• テストログ
• テスト結果(xml形式)
• Logcat
動 画 と グ ラ フ の
シークがリンク
Firebase Test Lab
- 53. Copyright © DeNA Co.,Ltd. All Rights Reserved.
モンキーテスト
• Robo Test
• アプリ.apk をアップロード
+特定の挙動をさせるスクリプトを追加可能
• リソース:値 のペアを設定可能
• デバイスの設定
• 言語
Firebase Test Lab
- 54. Copyright © DeNA Co.,Ltd. All Rights Reserved.
モンキーテスト
• ビデオの録画
• 前後に端末情報
• パフォーマンスの計測
• CPU
• メモリー
• ネットワーク
• ログ
• テストログ
• テスト結果(xml形式
• Logcat
Firebase Test Lab
- 55. Copyright © DeNA Co.,Ltd. All Rights Reserved.
モンキーテスト
• アクティビティマップ
(画面の遷移)
Firebase Test Lab
- 56. Copyright © DeNA Co.,Ltd. All Rights Reserved.
Android Studio連携
• Google Accountに
ログイン
• プロジェクト等の設定
Firebase Test Lab
- 57. Copyright © DeNA Co.,Ltd. All Rights Reserved.
Android Studio連携
• IDEから端末の選択と
テスト実行が可能
Firebase Test Lab
- 58. Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI/CDと連携
// https://firebase.google.com/docs/test-lab/command-line?hl=ja
gcloud firebase test android run
--type instrumentation
--app ./path/to/app-debug.apk
--test ./path/to/app-debug-androidTest.apk
--device model=Nexus5,version=23
--device model=sailfish,version=26
Firebase Test Lab
ワ ン コ マ ン ド で
実行可能
- 59. Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
- 60. Copyright © DeNA Co.,Ltd. All Rights Reserved.
Visual Studio App Center
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
Microsoft
💰1ヶ月間の試用期間
ビルドや配信、分析などの一機能として提供
- 61. Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Espresso
• アプリ.apk と テスト.apk をアップロード
(コマンドラインツール or API)
• デバイスの設定
• 言語
VS App Center
- 62. Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Espresso VS App Center
• パフォーマンスの計測
• CPU
• メモリー
• ログ
• テストログ
• Logcat
- 63. Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Appium
• アプリ.apk と テスト.zip をアップロード
(コマンドラインツール or API)
• JUnit(Java)の場合、依存関係などもまとめる
• デバイスの設定
• 言語
VS App Center
- 64. Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Appium
• パフォーマンスの計測
• CPU
• メモリー
• ログ
• テストログ
• Appium ログ
• Logcat
VS App Center
- 65. Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI/CDとの連携
// https://docs.microsoft.com/en-us/appcenter/test-cloud/starting-a-test-run
appcenter test run espresso --app "$USER_NAME/$APP_NAME"
--devices "$USER_NAME/$DEVICE_SET"
--app-path /path/to/app.apk
--build-dir /path/to/androidTestDir
VS App Center
ワ ン コ マ ン ド で
実行可能
- 66. Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI/CD
• App Centerでビルド可能
• ビルド後に実機での起動テストが可能
VS App Center
- 67. Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
- 68. Copyright © DeNA Co.,Ltd. All Rights Reserved.
OpenSTF
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
OSS
オンプレミス
File Explorer でファイルのやりとりが楽
- 69. Copyright © DeNA Co.,Ltd. All Rights Reserved.
端末の操作
• ドラッグ&ドロップで
インストール可能
• PCキーボード利用可能
• ビデオの録画
• ダイレクトアクセス
で取得可能
• ログ
• ブラウザで取得可能
• ダイレクトアクセス
で保存可能
OpenSTF
- 70. Copyright © DeNA Co.,Ltd. All Rights Reserved.
ダイレクトアクセス
• Remote debug
• 表示されているコマンド
をターミナルで実行
• USBに接続しているのと
同様に利用可能
• 自動テスト
• Espresso
• Appium
OpenSTF
- 71. Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI/CDとの連携
// before test
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XGET http://$OPENSTF_HOST/api/v1/devices
| jq '.devices | map(select(.ready == true and .using == false)) | .[].serial '
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XPOST -H 'Content-Type: application/json' -d '{"serial":"$SERIAL"}'
http://$OPENSTF_HOST/api/v1/user/devices
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XPOST http://$OPENSTF_HOST/api/v1/user/devices/$SERIAL/remoteConnect
adb connect $REMOTECONNECT_URL
adb -s '$REMOTECONNECT_URL' logcat -f /path/to/logcat.txt &
adb -s '$REMOTECONNECT_URL' shell screenrecord /path/to/video.mp4 &
// test
./gradlew cAT
// post test
kill $!
adb -s '$REMOTECONNECT_URL' pull /path/to/logcat.txt ./logcat.txt
adb -s '$REMOTECONNECT_URL' pull /path/to/video.mp4 ./video.mp4
adb disconnect $REMOTECONNECT_URL
OpenSTF
- 72. Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI/CDとの連携
// before test
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XGET http://$OPENSTF_HOST/api/v1/devices
| jq '.devices | map(select(.ready == true and .using == false)) | .[].serial '
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XPOST -H 'Content-Type: application/json' -d '{"serial":"$SERIAL"}'
http://$OPENSTF_HOST/api/v1/user/devices
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XPOST http://$OPENSTF_HOST/api/v1/user/devices/$SERIAL/remoteConnect
adb connect $REMOTECONNECT_URL
adb -s '$REMOTECONNECT_URL' logcat -f /path/to/logcat.txt &
adb -s '$REMOTECONNECT_URL' shell screenrecord /path/to/video.mp4 &
// test
./gradlew cAT
// after test
kill $!
adb -s '$REMOTECONNECT_URL' pull /path/to/logcat.txt ./logcat.txt
adb -s '$REMOTECONNECT_URL' pull /path/to/video.mp4 ./video.mp4
adb disconnect $REMOTECONNECT_URL
OpenSTF
利 用 可 能 な 端 末 の
Remote Debug用URL
を取得
- 73. Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI/CDとの連携
// before test
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XGET http://$OPENSTF_HOST/api/v1/devices
| jq '.devices | map(select(.ready == true and .using == false)) | .[].serial '
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XPOST -H 'Content-Type: application/json' -d '{"serial":"$SERIAL"}'
http://$OPENSTF_HOST/api/v1/user/devices
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XPOST http://$OPENSTF_HOST/api/v1/user/devices/$SERIAL/remoteConnect
adb connect $REMOTECONNECT_URL
adb -s '$REMOTECONNECT_URL' logcat -f /path/to/logcat.txt &
adb -s '$REMOTECONNECT_URL' shell screenrecord /path/to/video.mp4 &
// test
./gradlew cAT
// post test
kill $!
adb -s '$REMOTECONNECT_URL' pull /path/to/logcat.txt ./logcat.txt
adb -s '$REMOTECONNECT_URL' pull /path/to/video.mp4 ./video.mp4
adb disconnect $REMOTECONNECT_URL
OpenSTF
端末に接続
- 74. Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI/CDとの連携
// before test
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XGET http://$OPENSTF_HOST/api/v1/devices
| jq '.devices | map(select(.ready == true and .using == false)) | .[].serial '
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XPOST -H 'Content-Type: application/json' -d '{"serial":"$SERIAL"}'
http://$OPENSTF_HOST/api/v1/user/devices
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XPOST http://$OPENSTF_HOST/api/v1/user/devices/$SERIAL/remoteConnect
adb connect $REMOTECONNECT_URL
adb -s '$REMOTECONNECT_URL' logcat -f /path/to/logcat.txt &
adb -s '$REMOTECONNECT_URL' shell screenrecord /path/to/video.mp4 &
// test
./gradlew cAT
// post test
kill $!
adb -s '$REMOTECONNECT_URL' pull /path/to/logcat.txt ./logcat.txt
adb -s '$REMOTECONNECT_URL' pull /path/to/video.mp4 ./video.mp4
adb disconnect $REMOTECONNECT_URL
OpenSTF
ログと動画を端末に
記録開始
- 75. Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI/CDとの連携
// before test
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XGET http://$OPENSTF_HOST/api/v1/devices
| jq '.devices | map(select(.ready == true and .using == false)) | .[].serial '
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XPOST -H 'Content-Type: application/json' -d '{"serial":"$SERIAL"}'
http://$OPENSTF_HOST/api/v1/user/devices
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XPOST http://$OPENSTF_HOST/api/v1/user/devices/$SERIAL/remoteConnect
adb connect $REMOTECONNECT_URL
adb -s '$REMOTECONNECT_URL' logcat -f /path/to/logcat.txt &
adb -s '$REMOTECONNECT_URL' shell screenrecord /path/to/video.mp4 &
// test
./gradlew cAT
// post test
kill $!
adb -s '$REMOTECONNECT_URL' pull /path/to/logcat.txt ./logcat.txt
adb -s '$REMOTECONNECT_URL' pull /path/to/video.mp4 ./video.mp4
adb disconnect $REMOTECONNECT_URL
OpenSTF
テスト実行
- 76. Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI/CDとの連携
// before test
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XGET http://$OPENSTF_HOST/api/v1/devices
| jq '.devices | map(select(.ready == true and .using == false)) | .[].serial '
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XPOST -H 'Content-Type: application/json' -d '{"serial":"$SERIAL"}'
http://$OPENSTF_HOST/api/v1/user/devices
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XPOST http://$OPENSTF_HOST/api/v1/user/devices/$SERIAL/remoteConnect
adb connect $REMOTECONNECT_URL
adb -s '$REMOTECONNECT_URL' logcat -f /path/to/logcat.txt &
adb -s '$REMOTECONNECT_URL' shell screenrecord /path/to/video.mp4 &
// test
./gradlew cAT
// post test
kill $!
adb -s '$REMOTECONNECT_URL' pull /path/to/logcat.txt ./logcat.txt
adb -s '$REMOTECONNECT_URL' pull /path/to/video.mp4 ./video.mp4
adb disconnect $REMOTECONNECT_URL
OpenSTF
録画を終了させる
(最後のbgジョブをkill)
- 77. Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI/CDとの連携
// before test
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XGET http://$OPENSTF_HOST/api/v1/devices
| jq '.devices | map(select(.ready == true and .using == false)) | .[].serial '
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XPOST -H 'Content-Type: application/json' -d '{"serial":"$SERIAL"}'
http://$OPENSTF_HOST/api/v1/user/devices
curl -H "Authorization: Bearer $ACCESS_TOKEN"
-XPOST http://$OPENSTF_HOST/api/v1/user/devices/$SERIAL/remoteConnect
adb connect $REMOTECONNECT_URL
adb -s '$REMOTECONNECT_URL' logcat -f /path/to/logcat.txt &
adb -s '$REMOTECONNECT_URL' shell screenrecord /path/to/video.mp4 &
// test
./gradlew cAT
// post test
kill $!
adb -s '$REMOTECONNECT_URL' pull /path/to/logcat.txt ./logcat.txt
adb -s '$REMOTECONNECT_URL' pull /path/to/video.mp4 ./video.mp4
adb disconnect $REMOTECONNECT_URL
OpenSTF
端末からファイルを
コピーして切断
- 78. Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI/CDとの連携 OpenSTF
• サードパーティ製Jenkinsプラグイン
Open STF Plugin
• GitHub
https://github.com/jenkinsci/open-stf-plugin
• SlideShare
https://www.slideshare.net/justice_sm/open-stf-
plugin-64154300
- 79. Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
- 80. Copyright © DeNA Co.,Ltd. All Rights Reserved.
その他
Appium(ローカルで実行)が可能なもの
• BrowserStack App Automate
https://www.browserstack.com/app-automate
• BitBar Testdroid
https://bitbar.com/testing/
• Sause Labs TestObject
https://testobject.com/
国内のデバイスファーム
• Sonix Scirocco Cloud
http://www.scirocco-cloud.com/
• NTT レゾナント Remote TestKit
https://appkitbox.com/testkit/
- 81. Copyright © DeNA Co.,Ltd. All Rights Reserved.
各サービス、ソフトウェアの特徴
AWS
Device Farm
Firebase
Test Lab
Visual Studio
App Center
OpenSTF
端末の操作 ○ ○
Espresso ○ ○ ○※1 ※2
Appium ○ ○※1 ※2
モンキーテスト ○ ◎
ダイレクトアクセス ○💰 ◎
CI/CDとの連携 △ ◎ ◎ ○
その他特徴 細かい設定 IDE統合 CI/CD オンプレミス
※1 ソースコードの変更が必要
※2 ダイレクトアクセスで実行可能
- 82. Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
- 83. Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファーム選定のポイント
クラウド or オンプレミス
• 導入・運用コスト
• 通信速度
国内クラウド or 海外クラウド
• 端末の種類
- 84. Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファーム選定のポイント
利用したい端末があるかどうか
• AWS Device Farm
https://aws.amazon.com/jp/device-farm/device-
list/
• Firebase Test Lab
https://firebase.google.com/docs/test-
lab/available-testing-devices?hl=ja
• Visual Studio App Center
https://testcloud.xamarin.com/devices (参考情報)
- 85. Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファーム選定のポイント
テストがある場合
• テスティングフレームワークの対応状況
• ソースコードの改変が必要か
(必要な場合ローカルで動くか)
- 86. Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファーム選定のポイント
CI/CD で利用する場合
• CLI・ツールが用意されているか
(フォアグラウンドで終了するか)
• サードパーティ製のツール