SlideShare une entreprise Scribd logo
1  sur  87
Copyright © DeNA Co.,Ltd. All Rights Reserved.
DroidKaigi 2018
DAY.02 (Feb 9th, 2018)
duck
SWETグループ
DeNA Co., Ltd
Androidで利用できる
デ バ イ ス フ ァ ー ム の
メリット・デメリット
の紹介
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自己紹介
前田隼輔
• @duck8823
• 所属
• DeNA SWETグループ テスト基盤チーム
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Android端末の種類
Google "Android - Android スマートフォン"
URL http://www.android.com/intl/ja_jp/phones/
Copyright © DeNA Co.,Ltd. All Rights Reserved.
世界はたのしい。開発者は?
実機検証の必要性
• エミュレーターと実機は異なる
増え続ける端末の種類
• OS(メーカーによるカスタマイズ)
• 解像度
• 実機の管理場所・方法
国内未発売の端末
端末の管理が面倒
Copyright © DeNA Co.,Ltd. All Rights Reserved.
そこで
デバイスファーム
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームとは
• 端末を(物理的に)集中管理
• WebブラウザやAPI、クライアントソフト
を介して特定の端末を操作
Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームの利用
• 開発マシンに物理的に接続する必要がない
• 複数人が利用する場合も貸出管理の必要なし
• CI/CDとの連携
Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームの種類(提供形態)
クラウド(共有)
• 他ユーザーと同じ端末を利用
クラウド(専有)
• 端末は専有
オンプレミス
• サーバーにインストール
Copyright © DeNA Co.,Ltd. All Rights Reserved.
メリット
• 端末の管理コスト減
• 日本未発売の端末利用
デメリット
• テスト失敗時の調査し
づらさ
• 端末設定の制限
• 他ユーザーとの端末の
競合
クラウド(共有)
Copyright © DeNA Co.,Ltd. All Rights Reserved.
メリット
• 端末の管理コスト減
• 日本未発売の端末利用
• 端末は専有
• セキュリティ
• テスト前・後処理を
除外できる場合
デメリット
• テスト失敗時の調査し
づらさ
• 端末設定の制限
• 高コスト
クラウド(専有)
Copyright © DeNA Co.,Ltd. All Rights Reserved.
メリット
• 端末の細かい設定
• セキュリティ
• テスト前・後処理を
除外できる場合
• 通信速度
(内部ネットワーク)
デメリット
• 導入・運用コスト
(サーバーの管理、
端末の劣化 etc.)
• 日本にインストールした
場合は海外端末
を利用できない
オンプレミス
Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームでできること
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
CI/CDとの連携
Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームでできること
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
CI/CDとの連携
Copyright © DeNA Co.,Ltd. All Rights Reserved.
端末の操作
• ブラウザやクライアント上から端末を操作
• ネットワークの影響を受けやすい
• デザインの確認など
Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームでできること
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
CI/CDとの連携
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト
• テスティングフレームワークを利用したテスト
• リグレッションテスト
• サポートするフレームワークは異なる
• Espresso and/or Appium(JUnit)はほぼサポート
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Espresso
• Google製のUIテストツール
• 自動同期機能が特徴の一つ
• 昨日のセッション
(Espressoテストコードの同期処理を究める)も👀
https://speakerdeck.com/sumio/synchronization-capabilities-of-espresso
• アプリのapk、テスト用のapk をアップロード
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Appium
• クライアント/サーバーモデル
• Appiumクライアントは各種フレームワークに対応
• JUnit(Java) / RSpec(Ruby) / Python...
Appiumサーバー
Appiumクライアント
in
テストスクリプト
REST ドライバー
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Appium
• テストスクリプトの実行場所
• サーバーで実行
• ローカルで実行
デバイスファーム
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Appium
• テストスクリプトの実行場所
• サーバーで実行
• フレームワークが限定される
• アップロードする準備が必要
(テストスクリプトをzip等で固める手順)
• ローカルで実行
• フレームワークを問わない
• テストコードを変更する必要
(AppiumサーバーのURL + 認証情報)
Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームでできること
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
CI/CDとの連携
Copyright © DeNA Co.,Ltd. All Rights Reserved.
モンキーテスト
• 利用者がテストを用意しない
• アプリをランダムに操作
→ クラッシュするとテスト失敗
• 認証情報などを指定できるものもある
Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームでできること
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
CI/CDとの連携
Copyright © DeNA Co.,Ltd. All Rights Reserved.
ダイレクトアクセス
• ネットワーク経由でADBを実行
(USBで接続してるのと同様に利用できる)
• 任意のテスティングフレームワークを実行可能
Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームでできること
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
CI/CDとの連携
Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI/CDとの連携
• コマンドラインで実行できればCI/CDで実行可能
• ジョブ結果
• コマンドがフォアグラウンドで実行される必要
• サードパーティ製のプラグイン
Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファームでできること
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
CI/CDとの連携
サービス(ソフトウェア)によって異なる
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
3大クラウドインフラ
&
OSS
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
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
Copyright © DeNA Co.,Ltd. All Rights Reserved.
AWS Device Farm
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス(プライベートデバイス)
AWS 群の一つ
💰最初の 1000 分まで無料・従量課金
Copyright © DeNA Co.,Ltd. All Rights Reserved.
端末の操作
• セッション開始後、
インストールが可能
• PCキーボード利用可能
• ビデオの録画
• ログ
• Logcat
• TCP dump
AWS Device Farm
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Espresso
• アプリ.apk と テスト.apk をアップロード
• 細かいデバイスの設定が可能
• 別のファイル、アプリ
• ロケーション
• 言語
• ネットワークプロファイル( 速度etc. )
AWS Device Farm
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Espresso
• ビデオの録画
• パフォーマンスの計測
• CPU
• メモリー
• スレッド数
• ログ
• テストログ
• Logcat
• TCP dump
AWS Device Farm
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Appium
• アプリ.apk と テスト.zip をアップロード
• JUnit(Java)の場合、依存関係などもまとめる
• 細かいデバイスの設定が可能
• 別のファイル、アプリ
• ロケーション
• 言語
• ネットワークプロファイル( 速度etc. )
AWS Device Farm
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Appium
• ビデオの録画
• パフォーマンスの計測
• CPU
• メモリー
• スレッド数
• ログ
• Appium Java Output
• Appium Java XML
• Appium Server
• Logcat
• TCP dump
AWS Device Farm
Copyright © DeNA Co.,Ltd. All Rights Reserved.
モンキーテスト AWS Device Farm
• Built-in: Fuzz / Built-in: Explorer
• アプリ.apk をアップロード
• 細かいデバイスの設定が可能
• 別のファイル、アプリ
• ロケーション
• 言語
• ネットワークプロファイル( 速度etc. )
Copyright © DeNA Co.,Ltd. All Rights Reserved.
モンキーテスト
• Built-in: Fuzz
• ログインなし
• Built-in: Explorer
• ログインあり
• ビデオの録画
• ログ
• イベントログ
• Logcat
• TCP dump
AWS Device Farm
Fuzz
Explorer
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
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}"
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
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}"
自動テストの場合は
テストスクリプトも
アップロード
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}"
ジョブをスケジュール
(結果を待たない)
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
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Firebase Test Lab
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
Google提供
💰無料枠あり(5 real device / day)
Android Studioとの連携
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Espresso
• アプリ.apk と テスト.apk をアップロード
• デバイスの設定
• Android Test Orchestrator を利用可能
• 言語
Firebase Test Lab
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Espresso
• ビデオの録画
• 前後に端末情報
• パフォーマンスの計測
• CPU
• メモリー
• ネットワーク
• ログ
• テストログ
• テスト結果(xml形式)
• Logcat
Firebase Test Lab
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Espresso
• ビデオの録画
• 前後に端末情報
• パフォーマンスの計測
• CPU
• メモリー
• ネットワーク
• ログ
• テストログ
• テスト結果(xml形式)
• Logcat
動 画 と グ ラ フ の
シークがリンク
Firebase Test Lab
Copyright © DeNA Co.,Ltd. All Rights Reserved.
モンキーテスト
• Robo Test
• アプリ.apk をアップロード
+特定の挙動をさせるスクリプトを追加可能
• リソース:値 のペアを設定可能
• デバイスの設定
• 言語
Firebase Test Lab
Copyright © DeNA Co.,Ltd. All Rights Reserved.
モンキーテスト
• ビデオの録画
• 前後に端末情報
• パフォーマンスの計測
• CPU
• メモリー
• ネットワーク
• ログ
• テストログ
• テスト結果(xml形式
• Logcat
Firebase Test Lab
Copyright © DeNA Co.,Ltd. All Rights Reserved.
モンキーテスト
• アクティビティマップ
(画面の遷移)
Firebase Test Lab
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Android Studio連携
• Google Accountに
ログイン
• プロジェクト等の設定
Firebase Test Lab
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Android Studio連携
• IDEから端末の選択と
テスト実行が可能
Firebase Test Lab
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
ワ ン コ マ ン ド で
実行可能
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Visual Studio App Center
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
Microsoft
💰1ヶ月間の試用期間
ビルドや配信、分析などの一機能として提供
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Espresso
• アプリ.apk と テスト.apk をアップロード
(コマンドラインツール or API)
• デバイスの設定
• 言語
VS App Center
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Espresso VS App Center
• パフォーマンスの計測
• CPU
• メモリー
• ログ
• テストログ
• Logcat
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Appium
• アプリ.apk と テスト.zip をアップロード
(コマンドラインツール or API)
• JUnit(Java)の場合、依存関係などもまとめる
• デバイスの設定
• 言語
VS App Center
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テスト:Appium
• パフォーマンスの計測
• CPU
• メモリー
• ログ
• テストログ
• Appium ログ
• Logcat
VS App Center
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
ワ ン コ マ ン ド で
実行可能
Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI/CD
• App Centerでビルド可能
• ビルド後に実機での起動テストが可能
VS App Center
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
Copyright © DeNA Co.,Ltd. All Rights Reserved.
OpenSTF
端末の操作
自動テスト
• Espresso / Appium
モンキーテスト
ダイレクトアクセス
OSS
オンプレミス
File Explorer でファイルのやりとりが楽
Copyright © DeNA Co.,Ltd. All Rights Reserved.
端末の操作
• ドラッグ&ドロップで
インストール可能
• PCキーボード利用可能
• ビデオの録画
• ダイレクトアクセス
で取得可能
• ログ
• ブラウザで取得可能
• ダイレクトアクセス
で保存可能
OpenSTF
Copyright © DeNA Co.,Ltd. All Rights Reserved.
ダイレクトアクセス
• Remote debug
• 表示されているコマンド
をターミナルで実行
• USBに接続しているのと
同様に利用可能
• 自動テスト
• Espresso
• Appium
OpenSTF
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
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
を取得
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
端末に接続
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
ログと動画を端末に
記録開始
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
テスト実行
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)
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
端末からファイルを
コピーして切断
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
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
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/
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 ダイレクトアクセスで実行可能
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日お話すること
デバイスファームとは
各サービス、ソフトウェアの特徴
• AWS Device Farm
• Firebase Test Lab
• Visual Studio App Center
• OpenSTF
• その他
デバイスファーム選定のポイント
Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファーム選定のポイント
クラウド or オンプレミス
• 導入・運用コスト
• 通信速度
国内クラウド or 海外クラウド
• 端末の種類
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 (参考情報)
Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファーム選定のポイント
テストがある場合
• テスティングフレームワークの対応状況
• ソースコードの改変が必要か
(必要な場合ローカルで動くか)
Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファーム選定のポイント
CI/CD で利用する場合
• CLI・ツールが用意されているか
(フォアグラウンドで終了するか)
• サードパーティ製のツール
Copyright © DeNA Co.,Ltd. All Rights Reserved.
デバイスファーム選定のポイント
無料枠で試す

Contenu connexe

Tendances

Tendances (20)

Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らす
 
バージョンアップ対応を軽減するサービス:マスティフ
バージョンアップ対応を軽減するサービス:マスティフバージョンアップ対応を軽減するサービス:マスティフ
バージョンアップ対応を軽減するサービス:マスティフ
 
fastlane x iOSアプリのCI
fastlane x iOSアプリのCIfastlane x iOSアプリのCI
fastlane x iOSアプリのCI
 
DeNAにおけるSWETの役割
DeNAにおけるSWETの役割DeNAにおけるSWETの役割
DeNAにおけるSWETの役割
 
スマホアプリディレクターが考えていること
スマホアプリディレクターが考えていることスマホアプリディレクターが考えていること
スマホアプリディレクターが考えていること
 
UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法
 
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービスマスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
 
Xcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえるXcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえる
 
fastlane snapshotの並列実行についてまとめてみた
fastlane snapshotの並列実行についてまとめてみたfastlane snapshotの並列実行についてまとめてみた
fastlane snapshotの並列実行についてまとめてみた
 
2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情
 
Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化
 
Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境
 
コードレビューをより良くする Danger x Android
コードレビューをより良くする Danger x Androidコードレビューをより良くする Danger x Android
コードレビューをより良くする Danger x Android
 
Android e2e testing at mercari
Android e2e testing at mercariAndroid e2e testing at mercari
Android e2e testing at mercari
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
 
OpenSTFを ECSに乗せてみた話
OpenSTFを ECSに乗せてみた話OpenSTFを ECSに乗せてみた話
OpenSTFを ECSに乗せてみた話
 
STFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テストSTFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テスト
 
JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッションJaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッション
 
CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜
CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜
CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜
 
Androidのテストを効率的にするために考えたこと
Androidのテストを効率的にするために考えたことAndroidのテストを効率的にするために考えたこと
Androidのテストを効率的にするために考えたこと
 

Similaire à DroidKaigi_devicefarm

Sharoid Service Menu
Sharoid Service MenuSharoid Service Menu
Sharoid Service Menu
sharoid
 
2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage Platform2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage Platform
Masaki Nakagawa
 
devsami kansai 2012 #c2
devsami kansai 2012 #c2devsami kansai 2012 #c2
devsami kansai 2012 #c2
Yushi_Takagi
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンス
Kaoru NAKAMURA
 
ネイティブ機能を利用する Webアプリの実例 ~PhoneGap×Rails~
ネイティブ機能を利用するWebアプリの実例~PhoneGap×Rails~ネイティブ機能を利用するWebアプリの実例~PhoneGap×Rails~
ネイティブ機能を利用する Webアプリの実例 ~PhoneGap×Rails~
Daisuke Futatsumori
 

Similaire à DroidKaigi_devicefarm (20)

Android 開発, 運用時に使いたいライブラリやサービスの紹介
Android 開発, 運用時に使いたいライブラリやサービスの紹介Android 開発, 運用時に使いたいライブラリやサービスの紹介
Android 開発, 運用時に使いたいライブラリやサービスの紹介
 
リモート・スマホ・シェアリング
リモート・スマホ・シェアリングリモート・スマホ・シェアリング
リモート・スマホ・シェアリング
 
Sharoid Service Menu
Sharoid Service MenuSharoid Service Menu
Sharoid Service Menu
 
2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage Platform2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage Platform
 
devsami kansai 2012 #c2
devsami kansai 2012 #c2devsami kansai 2012 #c2
devsami kansai 2012 #c2
 
クラウド概要 by Engine Yard
クラウド概要 by Engine Yardクラウド概要 by Engine Yard
クラウド概要 by Engine Yard
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
Device Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テストDevice Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テスト
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンス
 
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
 
ネイティブ機能を利用する Webアプリの実例 ~PhoneGap×Rails~
ネイティブ機能を利用するWebアプリの実例~PhoneGap×Rails~ネイティブ機能を利用するWebアプリの実例~PhoneGap×Rails~
ネイティブ機能を利用する Webアプリの実例 ~PhoneGap×Rails~
 
Robotium を使った UI テスト
Robotium を使った UI テストRobotium を使った UI テスト
Robotium を使った UI テスト
 
リモート・スマホ・レンタル(第2回 Androidテスト祭り)
リモート・スマホ・レンタル(第2回 Androidテスト祭り)リモート・スマホ・レンタル(第2回 Androidテスト祭り)
リモート・スマホ・レンタル(第2回 Androidテスト祭り)
 
Node-redでプロトタイピング
Node-redでプロトタイピングNode-redでプロトタイピング
Node-redでプロトタイピング
 
デバイス WebAPI設計の進め方
デバイス WebAPI設計の進め方デバイス WebAPI設計の進め方
デバイス WebAPI設計の進め方
 
Automation with SoftLayer and Zabbix
Automation with SoftLayer and ZabbixAutomation with SoftLayer and Zabbix
Automation with SoftLayer and Zabbix
 
ネットワークエンジニアがWeb開発をやってみて思ったこと
ネットワークエンジニアがWeb開発をやってみて思ったことネットワークエンジニアがWeb開発をやってみて思ったこと
ネットワークエンジニアがWeb開発をやってみて思ったこと
 
Developer summit continuous deliveryとjenkins
Developer summit   continuous deliveryとjenkinsDeveloper summit   continuous deliveryとjenkins
Developer summit continuous deliveryとjenkins
 
WebIntentsにより拓かれる次のWeb
WebIntentsにより拓かれる次のWebWebIntentsにより拓かれる次のWeb
WebIntentsにより拓かれる次のWeb
 
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
 

Dernier

Dernier (12)

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

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(メーカーによるカスタマイズ) • 解像度 • 実機の管理場所・方法 国内未発売の端末 端末の管理が面倒
  • 5. Copyright © DeNA Co.,Ltd. All Rights Reserved. そこで デバイスファーム
  • 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・ツールが用意されているか (フォアグラウンドで終了するか) • サードパーティ製のツール
  • 87. Copyright © DeNA Co.,Ltd. All Rights Reserved. デバイスファーム選定のポイント 無料枠で試す