AWS Device FarmとCircleCIでAndroidのUIテストを自動化しよう
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Application Prototyping Solutions ArchitectFumihiko ShiroyamaDecember 16, 2019AWS Device FarmとCircleCIでAndroidのUIテストを⾃動化しようAndroid/iOS Test Night 2019
View Slide
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.⾃⼰紹介名前:⽩⼭ ⽂彦(しろやま ふみひこ)所属:アマゾン ウェブ サービス ジャパン株式会社アプリケーションプロトタイピングソリューションアーキテクト経歴:インフラエンジニア、バックエンド開発者モバイルアプリ開発者、クラウドアーキテクト趣味:⼦育て!、懸垂、⾃動テスト#
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.⾃動テスト⼤好きです!• Androidテスト全書という本を出しました• ⾃動テストの種類やそれぞれがカバーする範囲、モック(テストダブル)の考え⽅、UIテスト、CI/CDとの統合など、Androidにおけるテストについてひと通りカバーされた本です
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.アジェンダ本セッションのゴール• AWS Device Farmでノーテストでバグを⾒つける• AWS Device Farmで任意のバージョンの端末にリモートアクセス• AWS Device FarmでUIテストを⾃動実⾏• CircleCIからAWS Device Farmを利⽤する• CI/CDとSlackを連携する
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.対象となるアプリ
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.ゴリラCHANGE
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.デモ
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.特定のバージョンのバグを⾒つけ出す
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.リリースしたが… なんか私のGalaxy S6(Android 6)でクラッシュするんですが…弱ったな…こちらで確認できないぞ
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.バグの事実と原因を確かめたい• ユーザからAndroid 6系で動かないという報告があった• 実はAndroid 6以下でクラッシュする深刻なバグがある• 報告を確かめたいが古い端末は⼿元にない• AWS Device Farmを使ってみよう(
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.AWS Device Farm
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.近年のモバイル開発が抱える課題デバイスとOSの多様化複数のテストフレームワーク対応の困難デバイスメンテの⼿間テストレポートの可視化に対する要望
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.AWS Device Farm⾃動テスト リモートアクセス⾃動テストを好きな時に好きな数だけクラウド上で並列実⾏クラウド上の好きな端末の任意のバージョンですぐにリモートで動作確認
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.様々なテストパターンに対応アプリUI AutomationUI AutomatorXCTest各種テストフレームワーク AWS Device Farm 詳細なレポート
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.デバイスタイプ• パブリックデバイス• 0.17USD∕デバイス分の従量課⾦(無料利⽤期間1000デバイス分あり)• 250USD∕⽉の定額プランで無制限利⽤• 端末はテスト毎にデータ消去して再起動• プライベートデバイス• 200USD∕⽉から利⽤できる専有デバイス※1※2• デバイスは専有で決して他者と共有されず、契約終了後に廃棄※1 端末の取得価格によって変動※2 最低6ヶ⽉の利⽤など諸条件あり
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.早速使ってみよう
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Built-in: Fuzzテスト• いわゆるモンキーテスト• テストコードがなくてもUIをランダムに操作して落ちないか確認• 複数のデバイスやOSを並列実⾏できる
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.apkをビルド./gradlew :app:assembleDebug
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.AWS Device Farmプロジェクトの作成
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Automated Testsapkのアップロード⾃動テストを選択
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Automated Testsテストするデバイス群FuzzテストDevice poolの選択
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Fuzzテストテスト結果やはり古いバージョンでエラーが起こっているようだ
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Fuzzテストテスト結果
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.エラーの録画を確認する
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.正常系
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.異常系
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Screenshots正常系異常系
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Logs
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.リモートアクセス
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.リモートアクセス⽬当ての端末選択リモートアクセス
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.リモートアクセスブラウザから操作
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.リモートアクセスアップロードして実際に試すことができる
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.その他のテスト
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.その他のテストをAWS Device Farmで実⾏する• AWS Device FarmはFuzzテスト以外にも多数のテストをサポートしている• Instrumentationを選ぶことでUIテスト(Espresso)が実⾏できる• 他にもAppiumやUI Automatorなど多数のフレームワークをサポートしている
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Instrumentation (Espresso)
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Instrumentation (Espresso)• https://docs.aws.amazon.com/ja_jp/devicefarm/latest/developerguide/test-types-android-instrumentation.html1. ⼿順を参考にアプリ本体のapkをビルドする(assembleDebug)2. ⼿順を参考にUIテストのapkをビルドする(assembleDebugAndroidTest)3. AWS Device Farmにアップロードして実⾏
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Instrumentationテストテストapkをアップロード
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Instrumentationテスト⽤途に応じて独⾃のDevice Poolも定義できるDeviceの台数や組み合わせも任意
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Instrumentationテスト追加のオプションやタイムアウトを設定して実⾏
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Instrumentationテスト
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.CI/CDとの統合
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.CI/CDとの統合• AWS Device Farmは便利だが⼿動でアップロードは⼤変• CI/CDツールと連携することで⽇々のテストを⾃動化できる• ここではCircleCIを使ってDevice Farmのテストを⾃動化する• https://circleci.com/
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.CircleCIとの連携macOSでビルドするには有料プランが必要(無料トライアルあり)
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.CircleCIの設定• プロジェクト直下に.circleci/config.ymlという設定ファイルを設置• yamlファイルを編集しビルドとテストの実⾏を設定(後述)• Gitレポジトリへのプッシュを契機にビルドとテストが開始される• 基本はGradleのコマンドを記述するだけ
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.aws-device-farm-gradle-plugin• https://github.com/awslabs/aws-device-farm-gradle-plugin• Gradle plugin for AWS Device Farm• apkのビルド、アップロード、テストの実⾏などを⼿助けするプラグイン• DSLで細かい設定が可能
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Project build.gradle• classpath 'com.amazonaws:aws-devicefarm-gradle-plugin:1.3’
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.App build.gradle• apply plugin: 'devicefarm’• devicefarm{ 各種設定 }• ./gradlew devicefarmUploadprojectNameはDevice Farmの設定に合わせる
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.App build.gradle• apply plugin: 'devicefarm’• devicefarm{ 各種設定 }• ./gradlew devicefarmUploadIAMユーザと権限は最⼩に!
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.CircleCIへの組み込み• 基本はGradleコマンドを列挙するだけ• ./gradlew :app:assembleDebug• ./gradlew :app:assembleDebugAndroidTest• ./gradlew :app:devicefarmUpload
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.CircleCIの環境変数設定
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.• https://slack.com/services/new/incoming-webhookSlackに通知
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Slackに通知
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.満を持してプッシュ!
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.CircleCIコンソール
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Device Farmコンソール
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.CircleCI Workflow• すべてのプッシュでDevice Farm連携したくないケース• Workflow機能を使ってmaster/releaseブランチプッシュ時だけDevice FarmでUIテストを実⾏するといった制御が可能• https://circleci.com/docs/ja/2.0/workflows/
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.処理の流れおさらい1. Gitレポジトリへのプッシュを契機にCircleCIでビルドが始まる2. 通常のGradleコマンドでapkをビルド3. ワークフローでmasterブランチだけDevice Farmが⾛る4. aws-device-farm-gradle-pluginプラグインがDevice Farmにアップロード5. 結果をCircleCIに通知する
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.CircleCIコンソールmasterだけUIテスト
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Yay!!!
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.ご清聴ありがとございました,
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.質疑応答
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Appendix
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.スライドURLhttp://bit.ly/34iYRc4
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.AWS Device Farm テストデバイス⼀覧• Q. AWS Device Farmではどのようなデバイスが利⽤できますか• A. モバイルアプリケーションのテストに使⽤できる iOS、Android、および Fire OS の実機は増え続けています。デバイス群は、市場のデータとお客様からのフィードバックをもとに、今後も引き続き更新していく予定です。⼀覧は次のリストをご覧ください。• http://awsdevicefarm.info/