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.

Device Farm を使ったスマホアプリの自動テスト

742 views

Published on

JAWS Festa−中四国2017−
2017.11.4@愛媛大学

Published in: Mobile
  • Be the first to comment

Device Farm を使ったスマホアプリの自動テスト

  1. 1. Device Farm を使った スマホアプリの自動テスト JAWS Festa−中四国2017− 2017.11.4@愛媛大学 辰濱健一
  2. 2. 自己紹介 • 辰濱健一(たつはまけんいち) • 徳島県生まれ、神山町在住 • GDG Shikoku スタッフ • Sansan 株式会社、名刺アプリ Eight のアプリ開発 • Twitter:@tatsuhama50 • Facebook:kenichi.tatsuhama 2
  3. 3. GDG Shikoku 4 • 四国地方をカバーする Google Developer Group • Googleのテクノロジー全般について、四国で勉強会を開催して います。 • Android、Kotlin、Google App Engine、TensolFlow、Firebase など • Web:https://sites.google.com/site/gdgshikoku/ • Conpass: https://gdgshikoku.connpass.com/
  4. 4. DevFest Shikoku 2017 • 11/18(日)に徳島大学で開催! • Android, Kotlin, TensolFlow Go言語, Firebase など… 5 ご参加お待ちしております! https://gdgshikoku.connpass.com/event/68244/
  5. 5. 徳島県神山町 6
  6. 6. 徳島県神山町 7 約200km 車で3時間 四国は広いんです!
  7. 7. 徳島県神山町 • 人口:約 5,500 人 • 名産:すだち • 全面積の 83% が山地 • 過疎化が進む町 (消滅可能性都市にランクイン) • サテライトオフィス(13社)の進出、移住者が増 • 古民家再生・地産地消・教育改革など、先進的な取り組みが行 われて注目されている 8
  8. 8. Sansan株式会社 神山ラボ 9
  9. 9. Sansan株式会社 10 詳しくは、14:05 〜のサポータセッションで!!
  10. 10. Device Farm とは?
  11. 11. Device Farm とは • AWS クラウドで実機のデバイスを使用してアプリをテスト • Android / iOS / Webアプリに対応 • 実際の環境をシミュレート • 開発ワークフローとの統合 • UI テストフレームワークをサポート • 料金 12
  12. 12. Device Farm とは • AWS クラウドで実機のデバイスを使用してアプリをテスト • Android / iOS / Webアプリに対応 • 実際の環境をシミュレート • 開発ワークフローとの統合 • UI テストフレームワークをサポート • 料金 13 エミュレータよも 信頼できる パフォーマンス
  13. 13. Device Farm とは • AWS クラウドで実機のデバイスを使用してアプリをテスト • Android / iOS / Webアプリに対応 • 実際の環境をシミュレート • 開発ワークフローとの統合 • UI テストフレームワークをサポート • 料金 14 マルチプラット フォーム
  14. 14. Device Farm とは • AWS クラウドで実機のデバイスを使用してアプリをテスト • Android / iOS / Webアプリに対応 • 実際の環境をシミュレート • 開発ワークフローとの統合 • UI テストフレームワークをサポート • 料金 15 • 位置情報の指定 • 端末言語 • 前提アプリの インストール
  15. 15. Device Farm とは • AWS クラウドで実機のデバイスを使用してアプリをテスト • Android / iOS / Webアプリに対応 • 実際の環境をシミュレート • 開発ワークフローとの統合 • UI テストフレームワークをサポート • 料金 16 ・API ・Gradle Plugin ・Jenkins Plugin →自動化できる!
  16. 16. Device Farm とは • AWS クラウドで実機のデバイスを使用してアプリをテスト • Android / iOS / Webアプリに対応 • 実際の環境をシミュレート • 開発ワークフローとの統合 • UI テストフレームワークをサポート • 料金 17 Appium, Espresso などで UI 操作を記述& 実行できる
  17. 17. Device Farm とは • AWS クラウドで実機のデバイスを使用してアプリをテスト • Android / iOS / Webアプリに対応 • 実際の環境をシミュレート • 開発ワークフローとの統合 • UI テストフレームワークをサポート • 料金 18 • 0.17$ / デバイス分 • 250$ / 月 • 無償枠(1000 デバイス分)
  18. 18. テストコードがない人向け
  19. 19. テストコードがない人向け • モンキーテスト • Remote access (2016/4〜) • 【New!!】Direct Device Access (2017/10/16〜) 20
  20. 20. モンキーテスト • Device Farm 側でランダムに触ってくれる • アプリのバイナリさえあれば、今すぐ始められる 21
  21. 21. モンキーテスト 22 Automated tests を選んで Create a new run
  22. 22. モンキーテスト 23 アプリケーションの種類を選んで アップロード
  23. 23. モンキーテスト 24 アプリの情報が表示される
  24. 24. モンキーテスト 25 何イベント(数)実行するか
  25. 25. モンキーテスト 26 実行する端末を選択
  26. 26. モンキーテスト 27 端末の設定
  27. 27. モンキーテスト 28 タイムアウトの設定
  28. 28. モンキーテスト 29 実際のプロダクトでやってみた。
  29. 29. ターゲットアプリ 30
  30. 30. モンキーテスト 31 結果…!?
  31. 31. モンキーテスト 32
  32. 32. モンキーテスト 33 わずかな時間で複数端末での クラッシュが発覚。。。orz
  33. 33. モンキーテスト • スクリーンショットや動画、ログが残ってる 34※横固定のタブレット
  34. 34. モンキーテスト • 動画 35
  35. 35. モンキーテスト 36 動画により、どういう遷移や状態で クラッシュしたかが確認できる! → 問題の確認が容易に!
  36. 36. Remote access 37 • ブラウザ上に表示される端末をマウス・キーボードで操作 • アプリバイナリのアップロード&実行が可能 • 端末内ブラウザで Web サイトの表示 (=レンダリングチェック)も可能
  37. 37. Remote access 38 Remote access を選んで +Start a new session
  38. 38. Remote access 39 端末を検索して選んで…
  39. 39. Remote access 40 Confirm and start session
  40. 40. Remote access 41しばし待つ(だいたい数分以内)
  41. 41. Remote access 42 マウスで直接 操作可能! アプリバイナリの アップロードは ここから
  42. 42. Remote access 43 ブラウザも 起動できる
  43. 43. Remote access 44 手元にない端末を ちょっと試してみたい時には便利!
  44. 44. Remote access 45 でも、何度も手作業で 同じ操作をして、 動作確認するのはつらい・・・
  45. 45. Direct Device Access • USB を介してローカルマシンに直接接続されているかのよう に、デバイスを使用できる。 • IDE からのデバッグも可能 • 200$/月の private device の契約が必要 46
  46. 46. Direct Device Access • https://aws.amazon.com/jp/blogs/mobile/announcing- direct-device-access-in-aws-device-farm/ 47 16 OCT 2017!!
  47. 47. Direct Device Access 48 DeviceFarm上の 端末の画面 https://aws.amazon.com/jp/blogs/mobile/announcing-direct-device-access-in-aws-device-farm/ DeviceFarm上の 端末でデバッグ
  48. 48. テストコードを用意する
  49. 49. テストコードを用意して実行 • UI 操作をスクリプトで記述する • 何度でも同じ操作ができる • 機種や OS バージョンの横展開が容易になる • テストコードを Device Farm のコンソールから実行させる • ※以降 Android アプリを例に紹介します。 50
  50. 50. テスティングフレームワーク • 特徴はいろいろ • OS:iOS 専用、Android 専用、ハイブリッド • アプリ内部(DB やキャッシュ)の参照可否 • リリースバイナリでの実行可否 • アプリ外の端末操作の可否 (別アプリの操作や OS が出すパーミッションダイアログの操作) • 用途によって選ぼう • 細かなところまで(ホワイトボックス)でテストする? • リリースバイナリでテストしたい? • 記述可能な言語 51
  51. 51. テスティングフレームワークの例 • Android • Espresso … アプリ内参照可、他アプリの操作不可、レコーダーあり • UIAutomater … 他アプリの操作が可能、Android 4.2 以上 (Espresso や UIAutomater は併用可能) • iOS • KIF • Calabash • ハイブリッド • Appium … 色んな言語で記述可能、リリースバイナリのテストが可能 52
  52. 52. Espresso • Android アプリのテストを書くならオススメ • Google が公開 • Android Studio から操作の記録と検証コードの追加ができる • WebView の操作・検証も可能 • Intent のテストも可能(Espresso-Intents) • 特定の状態(例:通信が終わるまで)まで待つ仕組み(IdlingResource) 53
  53. 53. Espresso Recorder 54Android Studio の Run > Record Espresso Test
  54. 54. Espresso Recorder 55 1. 端末を操作する 2.アクションが 記録される 3. 検証を追加 1 〜 3 を繰り返す
  55. 55. Espresso Recorder 56 検証を追加 1. View を選択 2. 検証内容を編集 emailEdit の文字列が aaa かどうか?
  56. 56. Espresso Recorder 57 Espresso の テストコード が生成される ※かなり冗長でカオス ※可読性的に要メンテ ※記述の参考にはなる このコードで 何度でも 同じ操作が 可能になる!
  57. 57. Espresso の基本 58 • onView(...):操作対象の View を探す • perform(...):View に対する操作 • check(...):View の検証
  58. 58. Espresso で非同期待ち合わせ 59 // サーバアクセス・Progress 表示 ↑click 後、即実行される。。。 まだ結果が帰ってきていないので失敗する。 通信が終わってからチェックしたい。 Q:「通信が終わってから」とは?? ・何秒か待つ? 何秒? ・check…の前に wait(条件) を挟む?
  59. 59. Espresso IdlingResource • 指定した条件を満たすまで、テストコードの実行を中断 • 例)サーバ通信中は、Progress 表示があるとする → Progress が非表示になったら再開したい 60
  60. 60. Espresso IdlingResource 61 progress が 非表示(isGone) なら再開(idleNow)
  61. 61. Espresso IdlingResource 62 IdlingResource の登録 IdlingResource の解除
  62. 62. Espresso IdlingResource • 63 ← Progress が消えるまで待つ! // サーバアクセス・Progress 表示 • IdlingResource を設定したテストコードの実行
  63. 63. Espresso IdlingResource 64 IdlingResource を使うと テスト実行の 非同期待ち合わせが容易に!
  64. 64. DeviceFarm での実行 • 事前準備 • アプリケーションバイナリの作成 • テストバイナリの作成 • コンソールからテストを実行 • コンソールで結果を確認 65
  65. 65. アプリケーションバイナリ作成 66 • 本体のビルド • ./gradlew assembleDebug • app-debug.apk が生成される • テストバイナリのビルド • ./gradlew assembleDebugAndroidTest • app-debug-androidTest.apk が生成される
  66. 66. DeviceFarm でテスト実行 67 アプリケーションの種類を選んで
  67. 67. DeviceFarm でテスト実行 68 アプリ本体のバイナリを アップロード
  68. 68. DeviceFarm でテスト実行 69 アプリの情報を確認
  69. 69. DeviceFarm でテスト実行 70 ←Instrumentation テストを選んで、 テストバイナリをアップロード
  70. 70. DeviceFarm でテスト実行 71 テストアプリの情報や フィルタの設定
  71. 71. DeviceFarm でテスト実行 72 実行する端末の種類を選んで
  72. 72. DeviceFarm でテスト実行 73 テスト端末の設定をして
  73. 73. DeviceFarm でテスト実行 74 実行!
  74. 74. DeviceFarm でテスト実行 75 実行中…
  75. 75. DeviceFarm でテスト実行 76 各端末の実行状態
  76. 76. DeviceFarm でテスト実行 77 実行結果
  77. 77. DeviceFarm でテスト実行 78 端末ごとの実行結果
  78. 78. DeviceFarm でテスト実行 79 端末での実行結果
  79. 79. DeviceFarm でテスト実行 80 テスト実行中の パフォーマンスモニタ
  80. 80. DeviceFarm でテスト実行 81 テストコードにより 端末や OS の横展開が 容易になった!
  81. 81. DeviceFarm でテスト実行 82 でも…
  82. 82. DeviceFarm でテスト実行 83 もうちょっと 楽したいですよね?
  83. 83. 開発ワークフローとの統合
  84. 84. 開発ワークフローとの統合 • Gradle Plugin を使う • Jenkins Plugin を使う 85
  85. 85. Gradle Plugin の導入・設定 • Android Studio の build.gradle に数行追加 • IAMユーザを作成して、accessKey / secretKey を取得 (IAM : Identity and Access Management) • accessKey / secretKey を build.gradle へ設定 86
  86. 86. Gradle Plugin の導入・設定 87 ←追加 ←追加↓ ・DeviceFarmプロジェクト名 ・DevicePool(端末群) ・認証トークン など…
  87. 87. Gradle Plugin からの実行 88 ←実行! ↑結果はここを自分で見にいく… ※あくまでも Device Farm のテストジョブのキックのみです。
  88. 88. Gradle Plugin 89 結果はコンソールで確認…
  89. 89. Gradle Plugin • メリット • テスト実行のために、コンソールの操作が不要 • 実行時の設定をファイルで記述できる • コマンドラインからの実行ができる • もうちょっと… • IAM の認証情報を git で管理する?? • 結果が出た時にコンソールを見にいかないと行けない 90
  90. 90. Jenkins Plugin 91 そこで Jenkins 連携!
  91. 91. Jenkins Plugin の導入・設定 • Jenkins に AWS Device Farm Plugin を導入 • Jenkins のシステム設定 • Jenkins にジョブを作成&設定 92
  92. 92. Jenkins Plugin の導入・設定 • Jenkins に AWS Device Farm Plugin を導入 93 検索すると出てきます
  93. 93. Jenkins Plugin の導入・設定 • Jenkins のシステム設定 • accessKey / secretKey を追加 94
  94. 94. Jenkins Plugin の導入・設定 • 本体 apk、テスト apk の作成の設定 95
  95. 95. Jenkins Plugin の導入・設定 • ビルド後の処理の処理に 「Run Tests on AWS Device Farm」を追加して、設定する 96
  96. 96. Jenkins での実行 97 他にも、 ・push があったら実行 ・定刻実行など… ←
  97. 97. Jenkins で結果確認 98
  98. 98. Jenkins 連携すると • 実行結果の推移がグラフィカルに確認できる • テスト終了時に Slack 通知なども可能 99
  99. 99. 実運用するなら… 100 テストをちゃんと記述して、 Jenkins で継続的に テストを実行しよう!
  100. 100. まとめ • Device Farm はクラウド上の実機を時間借りできるサービス • テストコードがなくても触れる • テストコードを用意して、Jenkins 等の CI 連携すると効果的 101
  101. 101. 今後の期待 • 端末のラインナップの充実 • メーカーに偏りがある (先進国のチープな端末でのクラッシュの確認がしたい) • 最新の OS バージョンがない (最新の OS で確認したいニーズは大きいのでは?) • スクリーンショットがレポートに表示されない問題の改修 • https://forums.aws.amazon.com/thread.jspa?messageID=7527 86 • これが改修されると、色んな端末のレイアウトチェックが容易に! 102
  102. 102. DevFest Shikoku 2017 • 11/18(日)に徳島大学で開催! • Android, Kotlin, TensolFlow Go言語, Firebase など… 104 ご参加お待ちしております! https://gdgshikoku.connpass.com/event/68244/

×