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