Device Farm を使った
スマホアプリの自動テスト
JAWS DAYS 2016 - Move Up the Next Cloud -
2016/03/06@ベルサール新宿グランド
Sansan株式会社 辰濱健一
> Agenda
1
• 自己紹介
• Device Farm とは
• Device Farm を有効活用するために
• Device Farm での実行
• 効果
• 雑感
• まとめ
自己紹介
2
> 自己紹介
3
• 辰濱健一
• Sansan株式会社所属
• スマホアプリエンジニア
• リモートワーク@徳島県神山町
• Tokushima.app 主催(スマホアプリ開発勉強会)
• JAWS-UG 四国のイベントに、
なんやかんやでちょこちょこ参加
• 趣味は音楽と旅行
> 自己紹介
4
• 業務経歴
• 1社目@徳島市
• Java, C++, MFC
• UWSC を使った Windows アプリの UI 自動テストの導入
• 性能改善チームにて、自動性能計測ツールを作成
• 2社目@徳島市
• iOS(Objective-C), Android(Java), Windows(C#)の
スマホ&タブレット向けアプリ開発
• 機能担当制、iOS で作った機能は作った人が他 OS に移植
• 3社目@徳島県神山町
• スマホアプリの自動テスト
• リモートワーク
> 自己紹介
5
• 業務経歴
• 1社目@徳島市
• Java, C++, MFC
• UWSC を使った Windows アプリの UI 自動テストの導入
• 性能改善チームにて、自動性能計測ツールを作成
• 2社目@徳島市
• iOS(Objective-C), Android(Java), Windows(C#)の
スマホ&タブレット向けアプリ開発
• 機能担当制、iOS で作った機能は作った人が他 OS に移植
• 3社目@徳島県神山町
• スマホアプリの自動テスト
• リモートワーク
開発&
品質担保と自動テスト
> 自己紹介
6
• 業務経歴
• 1社目@徳島市
• Java, C++, MFC
• UWSC を使った Windows アプリの UI 自動テストの導入
• 性能改善チームにて、自動性能計測ツールを作成
• 2社目@徳島市
• iOS(Objective-C), Android(Java), Windows(C#)の
スマホ&タブレット向けアプリ開発
• 機能担当制、iOS で作った機能は作った人が他 OS に移植
• 3社目@徳島県神山町
• スマホアプリの自動テスト
• リモートワーク
開発&
品質担保と自動テスト
モバイル開発
> 自己紹介
7
• 業務経歴
• 1社目@徳島市
• Java, C++, MFC
• UWSC を使った Windows アプリの UI 自動テストの導入
• 性能改善チームにて、自動性能計測ツールを作成
• 2社目@徳島市
• iOS(Objective-C), Android(Java), Windows(C#)の
スマホ&タブレット向けアプリ開発
• 機能担当制、iOS で作った機能は作った人が他 OS に移植
• 3社目@徳島県神山町
• スマホアプリの自動テスト
• リモートワーク
開発&
品質担保と自動テスト
モバイル開発
モバイル開発での
品質担保と
自動テスト
> JAWS-UG のイベント参加実績
8
日時 タイトル 参加形態 案内時の感想
2013/11/25 AWS勉強会「クラウドについ
て入門から活用事例まで説明
します!」in 美波町
一般参加 AWS って何?
2014/10/4 四国クラウドお遍路2014 LT 地元神山開催だし、
サテライトオフィ
スネタでLT でも
するかー
2015/10/10 四国クラウドお遍路2015
-クラウドとIT技術者の働き方
と-
登壇 リモートワークの
話ならできる!
2016/3/12 JAWS DAYS 2016 登壇
> JAWS-UG のイベント参加実績
9
日時 タイトル 参加形態 案内時の感想
2013/11/25 AWS勉強会「クラウドについ
て入門から活用事例まで説明
します!」in 美波町
一般参加 AWS って何?
2014/10/4 四国クラウドお遍路2014 LT 地元神山開催だし、
サテライトオフィ
スネタでLT でも
するかー
2015/10/10 四国クラウドお遍路2015
-クラウドとIT技術者の働き方
と-
登壇 リモートワークの
話ならできる!
2016/3/12 JAWS DAYS 2016 登壇 えっ!?
> JAWS-UG のイベント参加実績
10
日時 タイトル 参加形態 案内時の感想
2013/11/25 AWS勉強会「クラウドについ
て入門から活用事例まで説明
します!」in 美波町
一般参加 AWS って何?
2014/10/4 四国クラウドお遍路2014 LT 地元神山開催だし、
サテライトオフィ
スネタでLT でも
するかー
2015/10/10 四国クラウドお遍路2015
-クラウドとIT技術者の働き方
と-
登壇 リモートワークの
話ならできる!
2016/3/12 JAWS DAYS 2016 登壇 えっ!?
・年1回しか参加してない
・AWS の話をしたことない
・しかも DAYS !?
・弊社、企業サポータ…
・アプリエンジニアなのですが…
> JAWS-UG のイベント参加実績
11
日時 タイトル 参加形態 案内時の感想
2013/11/25 AWS勉強会「クラウドについ
て入門から活用事例まで説明
します!」in 美波町
一般参加 AWS って何?
2014/10/4 四国クラウドお遍路2014 LT 地元神山開催だし、
サテライトオフィ
スネタでLT でも
するかー
2015/10/10 四国クラウドお遍路2015
-クラウドとIT技術者の働き方
と-
登壇 リモートワークの
話ならできる!
2016/3/12 JAWS DAYS 2016 登壇 えっ!?
でも、四国でのご縁(コミュニティ)
からのお声がけなので、
頑張ります!!
・年1回しか参加してない
・AWS の話をしたことない
・しかも DAYS !?
・弊社、企業サポータ…
・アプリエンジニアなのですが…
> Sansan神山ラボ
12
• 築70年の木造古民家(3棟)
• 略歴
• 2010年設置
• 〜2013/11:合宿所
• 2013/11〜:常駐メンバーのいる開発拠点に
• 家具家電、畑付き、風呂トイレセパレート
• 家賃:数万円 / 月
• インターネット接続:光回線
• 最寄り駅まで徒歩15分
• 改装OK物件
> Sansan神山ラボ
13
> Sansan神山ラボ
14
掘りごたつ席最近は
> 2014 年の LT 資料より…
15
> 2014 年の LT 資料より…
16
> 2014 年の LT 資料より…
17
> 2014 年の LT 資料より…
18
> Sansan 株式会社
19
20
21
← 昨日発表!!
22
23
24
25
26
27
Let’s Try!!
28
この人数で試して
大丈夫なの?
29
安心して下さい!
30
AWS 使ってますから!
> AWS 導入事例
31
> AWS 導入事例
32
Device Farm とは
33
> Device Farm とは
34
• AWS クラウドで実機のデバイスを使用してアプリを
テスト
• Android / iOS / Fire OS に対応
• 実際の環境をシミュレート
• 開発ワークフローとの統合
• UI テストフレームワークをサポート
• 料金
> Device Farm とは
35
• AWS クラウドで実機のデバイスを使用してアプリを
テスト
• Android / iOS / Fire OS に対応
• 実際の環境をシミュレート
• 開発ワークフローとの統合
• UI テストフレームワークをサポート
• 料金
エミュレータよりも
信頼できる
パフォーマンス
> Device Farm とは
36
• AWS クラウドで実機のデバイスを使用してアプリを
テスト
• Android / iOS / Fire OS に対応
• 実際の環境をシミュレート
• 開発ワークフローとの統合
• UI テストフレームワークをサポート
• 料金
マルチプラット
フォーム!
> Device Farm とは
37
• AWS クラウドで実機のデバイスを使用してアプリを
テスト
• Android / iOS / Fire OS に対応
• 実際の環境をシミュレート
• 開発ワークフローとの統合
• UI テストフレームワークをサポート
• 料金
位置情報の指定、端
末言語、前提アプリ
のインストールなど
> Device Farm とは
38
• AWS クラウドで実機のデバイスを使用してアプリを
テスト
• Android / iOS / Fire OS に対応
• 実際の環境をシミュレート
• 開発ワークフローとの統合
• UI テストフレームワークをサポート
• 料金
・API
・Gradle Plugin
・Jenkins Plugin
> Device Farm とは
39
• AWS クラウドで実機のデバイスを使用してアプリを
テスト
• Android / iOS / Fire OS に対応
• 実際の環境をシミュレート
• 開発ワークフローとの統合
• UI テストフレームワークをサポート
• 料金
Appium, Espresso
などで、指定したUI
操作が記述可能
> Device Farm とは
40
• AWS クラウドで実機のデバイスを使用してアプリを
テスト
• Android / iOS / Fire OS に対応
• 実際の環境をシミュレート
• 開発ワークフローとの統合
• UI テストフレームワークをサポート
• 料金
・0.17 $ / デバイス分
・250 $ / 月
・250 デバイス分 無料
Device Farm を有効活用するために
41
> Device Farm を有効活用するために
42
• 何らかのテスティングフレームワークを習得しよう!
• スクリーンショットを保存しよう!
> Device Farm を有効活用するために
43
• 何らかのテスティングフレームワークを習得しよう!
• スクリーンショットを保存しよう!
> テスティングフレームワーク
44
• UI 操作を記述するためのフレームワーク
• 特徴
• iOS 専用、Android 専用、ハイブリッド
• アプリ内部オブジェクトへのアクセスの可否
• リリースバイナリでの実行可否
• アプリ外の端末の操作(遷移後の別アプリの操作など)の可否
• 用途によって選ぼう
• 細かなところまでテストをしたい?
• リリースバイナリでテストをしたい?
(Android だとリリース時に難読化や最適化がかかる)
• 記述可能な言語
> テスティングフレームワーク
45
• 弊社で使っているテスティングフレームワーク
• Android
• Robotium, Espresso
• アプリ内オブジェクト利用可
→ 端末内 DB の状態やキャッシュの値も参照可能
• 別アプリ遷移後の操作はできない…
→ UIAutomater との併用を検討
• iOS
• KIF
• iOS & Android
• Appium(Ruby) でテストコードを共通化
• リリースバイナリ可
> テストコード
46
• 未入力でボタンタップ
↓
エラー表示の確認
※テストライブラリを抽象クラスで隠蔽しています
自動テストのデモ
47
サンプルアプリは
https://github.com/tatsuhama/DeviceFarmSampleAndroid
に置いています。
> Device Farm を有効活用するために
48
• 何らかのテスティングフレームワークを習得しよう!
• スクリーンショットを保存しよう!
> スクリーンショット
49
• どのテスティングフレームワークでも、だいたいサ
ポートされている
• 任意のタイミングでスクリーンショットを保存するこ
とで、実機での画面レイアウト確認にもなる
• エラー時にスクショを残すのはオススメ
Device Farm での実行
50
Device Farm での実行
51
※このセクションは、Android 開発を前提に説明します
> Device Farm での実行
52
• Web から実行
• Gradle Plugin から実行
• Jenkins から実行
> Device Farm での実行
53
• Web から実行
• Gradle Plugin から実行
• Jenkins から実行
> Device Farm での実行 - Web から
54
「Robotium で書いた Android アプリのテストを
AWS Device Farm で実行する」
http://qiita.com/tatsuhama/items/27d5e3ef1056e740b085
で詳しく書いているので、雰囲気だけ掴んでもらえば OK。
> Device Farm での実行 - Web から
55
> Device Farm での実行 - Web から
56
> Device Farm での実行 - Web から
57
> Device Farm での実行 - Web から
58
※前提として、アプリ本体、テスト apk はビルド済みとする
> Device Farm での実行 - Web から
59
> Device Farm での実行 - Web から
60
> Device Farm での実行 - Web から
61
> Device Farm での実行 - Web から
62
> Device Farm での実行 - Web から
63
> Device Farm での実行 - Web から
64
> Device Farm での実行 - Web から
65
> Device Farm での実行 - Web から
66
面倒…
> Device Farm での実行 - Web から
67
> Device Farm での実行 - Web から
68
> Device Farm での実行 - Web から
69
結果表示
> Device Farm での実行 - Web から
70
結果表示
> Device Farm での実行 - Web から
71
結果表示
> Device Farm での実行
72
• Web から実行
• Gradle Plugin から実行
• Jenkins から実行
> Gradle Plugin から実行
73
• Android の build.gradle へ何行か追記
• IAMユーザを作成して、accessKey / secretKey を取得
(IAM : Identity and Access Management)
• accessKey / secretKey を build.gradle へ設定
• ./gradlew devicefarmUpload を実行
•
•
> Gradle Plugin から実行
74
• Android の build.gradle へ何行か追記
• IAMユーザを作成して、accessKey / secretKey を取得
(IAM : Identity and Access Management)
• accessKey / secretKey を build.gradle へ設定
• ./gradlew devicefarmUpload を実行
• 事前準備さえすれば、コマンド1つなので便利
• 「 AWS Device Farm Gradle Plugin を導入した」
http://qiita.com/tatsuhama/items/ca7b8e4dbe2fb5c687c0
参照
> Gradle Plugin から実行
75
• あくまでも devicefarmUpload なので、呼び出しのみ
• 結果はコンソール上に示された URL を見に行く
> Gradle Plugin から実行
76
• URL を見ると、ちゃんと結果が表示されている
• 結果を見に行くのはめんどくさい…
> Gradle Plugin から実行
77
• 2016/02/28 時点で公式ガイドには、
classpath ‘com.amazonaws:aws-devicefarm-gradle-plugin:1.0’
を書くようアナウンスされている
http://docs.aws.amazon.com/devicefarm/latest/developerguide/a
ws-device-farm-gradle-plugin-setting-up.html
• ただし、1.0 では期待通り動かない…
https://github.com/awslabs/aws-device-farm-gradle-
plugin/issues/4
• 1.1 で改修されているので、少なくとも 1.1 を使いま
しょう!
• (中の人が今日聞いていることを期待してみる)
> Gradle Plugin から実行
78
(中略)
> Device Farm での実行
79
• Web から実行
• Gradle Plugin から実行
• Jenkins から実行
> Jenkins から実行
80
• Jenkins に AWS Device Farm Plugin を導入
• Jenkins のシステム設定
• accessKey / secretKey を追加
• Jenkins にジョブを作成&設定する
• 本体 apk、テスト apk の作成
• ビルド後の処理の処理に「Run Tests on AWS Device
Farm」を追加して、設定する
• ジョブを実行
• Jenkins 上から結果を確認
> Jenkins から実行
81
• Jenkins に AWS Device Farm Plugin を導入
> Jenkins から実行
82
• Jenkins のシステム設定
• accessKey / secretKey を追加
> Jenkins から実行
83
• Jenkins にジョブを作成&設定する
• 本体 apk、テスト apk の作成
•
> Jenkins から実行
84
• Jenkins にジョブを作成&設定する
• ビルド後の処理の処理に「Run Tests on AWS Device
Farm」を追加して、設定する
> Jenkins から実行
85
• Jenkins にジョブを作成&設定する
• ビルド後の処理の処理に「Run Tests on AWS Device
Farm」を追加して、設定する
> Jenkins から実行
86
• ジョブを実行
> Jenkins から実行
87
• Jenkins 上から結果を確認
> Jenkins から実行
88
• Jenkins 上から結果を確認
良い!!
> Jenkins から実行
89
• Jenkins 上から結果を確認
良い!!
Slack 連携などすれば、もっと良くなる!
効果
90
> 効果
91
• 手元に端末がなくても、その端末の実機でテストが行
える
• 各拠点に何台も端末を買わなくて良い
• テスト記述できるスキルがあれば、テスター不要?
• リモートワークの味方!
• 端末を購入しなくても、時間借りができる
今後への期待
92
> 今後への期待
93
• 作ったプロジェクトが削除できない…
• Appium の Ruby サポート
• 現在は Java のみ
• フォーラム上では、サポート予定と書かれていた
• ジョブ開始までに時間がかかる(場合がある)
• Android のスクリーンショットの保存 or 収集ができ
ない(iOS は OK)
• フォーラムで多々報告がある
• テストを書かなくてもエミュレータのように、端末を
操作したい…
まとめ
94
> まとめ
95
• Device Farm は端末の実機を時間借りできる
• モンキーテストも実行できるが、テストを記述した方
が効果的
• 実行は、Jenkins などで自動化しよう!
• 場所を選ばない働き方の味方
完
96

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

  • 1.
    Device Farm を使った スマホアプリの自動テスト JAWSDAYS 2016 - Move Up the Next Cloud - 2016/03/06@ベルサール新宿グランド Sansan株式会社 辰濱健一
  • 2.
    > Agenda 1 • 自己紹介 •Device Farm とは • Device Farm を有効活用するために • Device Farm での実行 • 効果 • 雑感 • まとめ
  • 3.
  • 4.
    > 自己紹介 3 • 辰濱健一 •Sansan株式会社所属 • スマホアプリエンジニア • リモートワーク@徳島県神山町 • Tokushima.app 主催(スマホアプリ開発勉強会) • JAWS-UG 四国のイベントに、 なんやかんやでちょこちょこ参加 • 趣味は音楽と旅行
  • 5.
    > 自己紹介 4 • 業務経歴 •1社目@徳島市 • Java, C++, MFC • UWSC を使った Windows アプリの UI 自動テストの導入 • 性能改善チームにて、自動性能計測ツールを作成 • 2社目@徳島市 • iOS(Objective-C), Android(Java), Windows(C#)の スマホ&タブレット向けアプリ開発 • 機能担当制、iOS で作った機能は作った人が他 OS に移植 • 3社目@徳島県神山町 • スマホアプリの自動テスト • リモートワーク
  • 6.
    > 自己紹介 5 • 業務経歴 •1社目@徳島市 • Java, C++, MFC • UWSC を使った Windows アプリの UI 自動テストの導入 • 性能改善チームにて、自動性能計測ツールを作成 • 2社目@徳島市 • iOS(Objective-C), Android(Java), Windows(C#)の スマホ&タブレット向けアプリ開発 • 機能担当制、iOS で作った機能は作った人が他 OS に移植 • 3社目@徳島県神山町 • スマホアプリの自動テスト • リモートワーク 開発& 品質担保と自動テスト
  • 7.
    > 自己紹介 6 • 業務経歴 •1社目@徳島市 • Java, C++, MFC • UWSC を使った Windows アプリの UI 自動テストの導入 • 性能改善チームにて、自動性能計測ツールを作成 • 2社目@徳島市 • iOS(Objective-C), Android(Java), Windows(C#)の スマホ&タブレット向けアプリ開発 • 機能担当制、iOS で作った機能は作った人が他 OS に移植 • 3社目@徳島県神山町 • スマホアプリの自動テスト • リモートワーク 開発& 品質担保と自動テスト モバイル開発
  • 8.
    > 自己紹介 7 • 業務経歴 •1社目@徳島市 • Java, C++, MFC • UWSC を使った Windows アプリの UI 自動テストの導入 • 性能改善チームにて、自動性能計測ツールを作成 • 2社目@徳島市 • iOS(Objective-C), Android(Java), Windows(C#)の スマホ&タブレット向けアプリ開発 • 機能担当制、iOS で作った機能は作った人が他 OS に移植 • 3社目@徳島県神山町 • スマホアプリの自動テスト • リモートワーク 開発& 品質担保と自動テスト モバイル開発 モバイル開発での 品質担保と 自動テスト
  • 9.
    > JAWS-UG のイベント参加実績 8 日時タイトル 参加形態 案内時の感想 2013/11/25 AWS勉強会「クラウドについ て入門から活用事例まで説明 します!」in 美波町 一般参加 AWS って何? 2014/10/4 四国クラウドお遍路2014 LT 地元神山開催だし、 サテライトオフィ スネタでLT でも するかー 2015/10/10 四国クラウドお遍路2015 -クラウドとIT技術者の働き方 と- 登壇 リモートワークの 話ならできる! 2016/3/12 JAWS DAYS 2016 登壇
  • 10.
    > JAWS-UG のイベント参加実績 9 日時タイトル 参加形態 案内時の感想 2013/11/25 AWS勉強会「クラウドについ て入門から活用事例まで説明 します!」in 美波町 一般参加 AWS って何? 2014/10/4 四国クラウドお遍路2014 LT 地元神山開催だし、 サテライトオフィ スネタでLT でも するかー 2015/10/10 四国クラウドお遍路2015 -クラウドとIT技術者の働き方 と- 登壇 リモートワークの 話ならできる! 2016/3/12 JAWS DAYS 2016 登壇 えっ!?
  • 11.
    > JAWS-UG のイベント参加実績 10 日時タイトル 参加形態 案内時の感想 2013/11/25 AWS勉強会「クラウドについ て入門から活用事例まで説明 します!」in 美波町 一般参加 AWS って何? 2014/10/4 四国クラウドお遍路2014 LT 地元神山開催だし、 サテライトオフィ スネタでLT でも するかー 2015/10/10 四国クラウドお遍路2015 -クラウドとIT技術者の働き方 と- 登壇 リモートワークの 話ならできる! 2016/3/12 JAWS DAYS 2016 登壇 えっ!? ・年1回しか参加してない ・AWS の話をしたことない ・しかも DAYS !? ・弊社、企業サポータ… ・アプリエンジニアなのですが…
  • 12.
    > JAWS-UG のイベント参加実績 11 日時タイトル 参加形態 案内時の感想 2013/11/25 AWS勉強会「クラウドについ て入門から活用事例まで説明 します!」in 美波町 一般参加 AWS って何? 2014/10/4 四国クラウドお遍路2014 LT 地元神山開催だし、 サテライトオフィ スネタでLT でも するかー 2015/10/10 四国クラウドお遍路2015 -クラウドとIT技術者の働き方 と- 登壇 リモートワークの 話ならできる! 2016/3/12 JAWS DAYS 2016 登壇 えっ!? でも、四国でのご縁(コミュニティ) からのお声がけなので、 頑張ります!! ・年1回しか参加してない ・AWS の話をしたことない ・しかも DAYS !? ・弊社、企業サポータ… ・アプリエンジニアなのですが…
  • 13.
    > Sansan神山ラボ 12 • 築70年の木造古民家(3棟) •略歴 • 2010年設置 • 〜2013/11:合宿所 • 2013/11〜:常駐メンバーのいる開発拠点に • 家具家電、畑付き、風呂トイレセパレート • 家賃:数万円 / 月 • インターネット接続:光回線 • 最寄り駅まで徒歩15分 • 改装OK物件
  • 14.
  • 15.
  • 16.
    > 2014 年のLT 資料より… 15
  • 17.
    > 2014 年のLT 資料より… 16
  • 18.
    > 2014 年のLT 資料より… 17
  • 19.
    > 2014 年のLT 資料より… 18
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
    > Device Farmとは 34 • AWS クラウドで実機のデバイスを使用してアプリを テスト • Android / iOS / Fire OS に対応 • 実際の環境をシミュレート • 開発ワークフローとの統合 • UI テストフレームワークをサポート • 料金
  • 36.
    > Device Farmとは 35 • AWS クラウドで実機のデバイスを使用してアプリを テスト • Android / iOS / Fire OS に対応 • 実際の環境をシミュレート • 開発ワークフローとの統合 • UI テストフレームワークをサポート • 料金 エミュレータよりも 信頼できる パフォーマンス
  • 37.
    > Device Farmとは 36 • AWS クラウドで実機のデバイスを使用してアプリを テスト • Android / iOS / Fire OS に対応 • 実際の環境をシミュレート • 開発ワークフローとの統合 • UI テストフレームワークをサポート • 料金 マルチプラット フォーム!
  • 38.
    > Device Farmとは 37 • AWS クラウドで実機のデバイスを使用してアプリを テスト • Android / iOS / Fire OS に対応 • 実際の環境をシミュレート • 開発ワークフローとの統合 • UI テストフレームワークをサポート • 料金 位置情報の指定、端 末言語、前提アプリ のインストールなど
  • 39.
    > Device Farmとは 38 • AWS クラウドで実機のデバイスを使用してアプリを テスト • Android / iOS / Fire OS に対応 • 実際の環境をシミュレート • 開発ワークフローとの統合 • UI テストフレームワークをサポート • 料金 ・API ・Gradle Plugin ・Jenkins Plugin
  • 40.
    > Device Farmとは 39 • AWS クラウドで実機のデバイスを使用してアプリを テスト • Android / iOS / Fire OS に対応 • 実際の環境をシミュレート • 開発ワークフローとの統合 • UI テストフレームワークをサポート • 料金 Appium, Espresso などで、指定したUI 操作が記述可能
  • 41.
    > Device Farmとは 40 • AWS クラウドで実機のデバイスを使用してアプリを テスト • Android / iOS / Fire OS に対応 • 実際の環境をシミュレート • 開発ワークフローとの統合 • UI テストフレームワークをサポート • 料金 ・0.17 $ / デバイス分 ・250 $ / 月 ・250 デバイス分 無料
  • 42.
  • 43.
    > Device Farmを有効活用するために 42 • 何らかのテスティングフレームワークを習得しよう! • スクリーンショットを保存しよう!
  • 44.
    > Device Farmを有効活用するために 43 • 何らかのテスティングフレームワークを習得しよう! • スクリーンショットを保存しよう!
  • 45.
    > テスティングフレームワーク 44 • UI操作を記述するためのフレームワーク • 特徴 • iOS 専用、Android 専用、ハイブリッド • アプリ内部オブジェクトへのアクセスの可否 • リリースバイナリでの実行可否 • アプリ外の端末の操作(遷移後の別アプリの操作など)の可否 • 用途によって選ぼう • 細かなところまでテストをしたい? • リリースバイナリでテストをしたい? (Android だとリリース時に難読化や最適化がかかる) • 記述可能な言語
  • 46.
    > テスティングフレームワーク 45 • 弊社で使っているテスティングフレームワーク •Android • Robotium, Espresso • アプリ内オブジェクト利用可 → 端末内 DB の状態やキャッシュの値も参照可能 • 別アプリ遷移後の操作はできない… → UIAutomater との併用を検討 • iOS • KIF • iOS & Android • Appium(Ruby) でテストコードを共通化 • リリースバイナリ可
  • 47.
  • 48.
  • 49.
    > Device Farmを有効活用するために 48 • 何らかのテスティングフレームワークを習得しよう! • スクリーンショットを保存しよう!
  • 50.
    > スクリーンショット 49 • どのテスティングフレームワークでも、だいたいサ ポートされている •任意のタイミングでスクリーンショットを保存するこ とで、実機での画面レイアウト確認にもなる • エラー時にスクショを残すのはオススメ
  • 51.
  • 52.
  • 53.
    > Device Farmでの実行 52 • Web から実行 • Gradle Plugin から実行 • Jenkins から実行
  • 54.
    > Device Farmでの実行 53 • Web から実行 • Gradle Plugin から実行 • Jenkins から実行
  • 55.
    > Device Farmでの実行 - Web から 54 「Robotium で書いた Android アプリのテストを AWS Device Farm で実行する」 http://qiita.com/tatsuhama/items/27d5e3ef1056e740b085 で詳しく書いているので、雰囲気だけ掴んでもらえば OK。
  • 56.
    > Device Farmでの実行 - Web から 55
  • 57.
    > Device Farmでの実行 - Web から 56
  • 58.
    > Device Farmでの実行 - Web から 57
  • 59.
    > Device Farmでの実行 - Web から 58 ※前提として、アプリ本体、テスト apk はビルド済みとする
  • 60.
    > Device Farmでの実行 - Web から 59
  • 61.
    > Device Farmでの実行 - Web から 60
  • 62.
    > Device Farmでの実行 - Web から 61
  • 63.
    > Device Farmでの実行 - Web から 62
  • 64.
    > Device Farmでの実行 - Web から 63
  • 65.
    > Device Farmでの実行 - Web から 64
  • 66.
    > Device Farmでの実行 - Web から 65
  • 67.
    > Device Farmでの実行 - Web から 66 面倒…
  • 68.
    > Device Farmでの実行 - Web から 67
  • 69.
    > Device Farmでの実行 - Web から 68
  • 70.
    > Device Farmでの実行 - Web から 69 結果表示
  • 71.
    > Device Farmでの実行 - Web から 70 結果表示
  • 72.
    > Device Farmでの実行 - Web から 71 結果表示
  • 73.
    > Device Farmでの実行 72 • Web から実行 • Gradle Plugin から実行 • Jenkins から実行
  • 74.
    > Gradle Pluginから実行 73 • Android の build.gradle へ何行か追記 • IAMユーザを作成して、accessKey / secretKey を取得 (IAM : Identity and Access Management) • accessKey / secretKey を build.gradle へ設定 • ./gradlew devicefarmUpload を実行 • •
  • 75.
    > Gradle Pluginから実行 74 • Android の build.gradle へ何行か追記 • IAMユーザを作成して、accessKey / secretKey を取得 (IAM : Identity and Access Management) • accessKey / secretKey を build.gradle へ設定 • ./gradlew devicefarmUpload を実行 • 事前準備さえすれば、コマンド1つなので便利 • 「 AWS Device Farm Gradle Plugin を導入した」 http://qiita.com/tatsuhama/items/ca7b8e4dbe2fb5c687c0 参照
  • 76.
    > Gradle Pluginから実行 75 • あくまでも devicefarmUpload なので、呼び出しのみ • 結果はコンソール上に示された URL を見に行く
  • 77.
    > Gradle Pluginから実行 76 • URL を見ると、ちゃんと結果が表示されている • 結果を見に行くのはめんどくさい…
  • 78.
    > Gradle Pluginから実行 77 • 2016/02/28 時点で公式ガイドには、 classpath ‘com.amazonaws:aws-devicefarm-gradle-plugin:1.0’ を書くようアナウンスされている http://docs.aws.amazon.com/devicefarm/latest/developerguide/a ws-device-farm-gradle-plugin-setting-up.html • ただし、1.0 では期待通り動かない… https://github.com/awslabs/aws-device-farm-gradle- plugin/issues/4 • 1.1 で改修されているので、少なくとも 1.1 を使いま しょう! • (中の人が今日聞いていることを期待してみる)
  • 79.
    > Gradle Pluginから実行 78 (中略)
  • 80.
    > Device Farmでの実行 79 • Web から実行 • Gradle Plugin から実行 • Jenkins から実行
  • 81.
    > Jenkins から実行 80 •Jenkins に AWS Device Farm Plugin を導入 • Jenkins のシステム設定 • accessKey / secretKey を追加 • Jenkins にジョブを作成&設定する • 本体 apk、テスト apk の作成 • ビルド後の処理の処理に「Run Tests on AWS Device Farm」を追加して、設定する • ジョブを実行 • Jenkins 上から結果を確認
  • 82.
    > Jenkins から実行 81 •Jenkins に AWS Device Farm Plugin を導入
  • 83.
    > Jenkins から実行 82 •Jenkins のシステム設定 • accessKey / secretKey を追加
  • 84.
    > Jenkins から実行 83 •Jenkins にジョブを作成&設定する • 本体 apk、テスト apk の作成 •
  • 85.
    > Jenkins から実行 84 •Jenkins にジョブを作成&設定する • ビルド後の処理の処理に「Run Tests on AWS Device Farm」を追加して、設定する
  • 86.
    > Jenkins から実行 85 •Jenkins にジョブを作成&設定する • ビルド後の処理の処理に「Run Tests on AWS Device Farm」を追加して、設定する
  • 87.
  • 88.
    > Jenkins から実行 87 •Jenkins 上から結果を確認
  • 89.
    > Jenkins から実行 88 •Jenkins 上から結果を確認 良い!!
  • 90.
    > Jenkins から実行 89 •Jenkins 上から結果を確認 良い!! Slack 連携などすれば、もっと良くなる!
  • 91.
  • 92.
    > 効果 91 • 手元に端末がなくても、その端末の実機でテストが行 える •各拠点に何台も端末を買わなくて良い • テスト記述できるスキルがあれば、テスター不要? • リモートワークの味方! • 端末を購入しなくても、時間借りができる
  • 93.
  • 94.
    > 今後への期待 93 • 作ったプロジェクトが削除できない… •Appium の Ruby サポート • 現在は Java のみ • フォーラム上では、サポート予定と書かれていた • ジョブ開始までに時間がかかる(場合がある) • Android のスクリーンショットの保存 or 収集ができ ない(iOS は OK) • フォーラムで多々報告がある • テストを書かなくてもエミュレータのように、端末を 操作したい…
  • 95.
  • 96.
    > まとめ 95 • DeviceFarm は端末の実機を時間借りできる • モンキーテストも実行できるが、テストを記述した方 が効果的 • 実行は、Jenkins などで自動化しよう! • 場所を選ばない働き方の味方
  • 97.