Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

DroidKaigi_devicefarm

4,079 views

Published on

DroidKaigi 2018
「Androidで利用できるデバイスファームのメリット・デメリットの紹介」

Published in: Technology
  • Be the first to comment

DroidKaigi_devicefarm

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

×