SlideShare a Scribd company logo
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

More Related Content

PDF
スマホアプリ自動テストサービス
PPTX
Robotium を使った UI テスト
PPTX
Device Farm を使ったスマホアプリの自動テスト
PPTX
Android 開発, 運用時に使いたいライブラリやサービスの紹介
PDF
Apiドキュメンテーションツールを使いこなす【api blueprint編】
PPTX
Espresso と Firebase Test Lab で Android アプリのテストを自動化する
PDF
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
PPTX
Win7 * appium * androidで実機自動テストやってみた。
スマホアプリ自動テストサービス
Robotium を使った UI テスト
Device Farm を使ったスマホアプリの自動テスト
Android 開発, 運用時に使いたいライブラリやサービスの紹介
Apiドキュメンテーションツールを使いこなす【api blueprint編】
Espresso と Firebase Test Lab で Android アプリのテストを自動化する
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
Win7 * appium * androidで実機自動テストやってみた。

What's hot (20)

PDF
Java + React.jsでSever Side Rendering #reactjs_meetup
PDF
アプリケーションエンジニアがMackerelで楽しく監視構成している事例
PDF
自作アプリを Apple Watch対応した話 〜FastCheckin編〜
PDF
Behind-the-Scenes and Goals of LINE Summer Internship Program
PDF
Lt 20150711
PPTX
10分でわかるOpenAPI V3
PDF
AppiumのWebViewアプリテストの仕組みとハマりどころ
PDF
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
PPTX
Android ReactNative UITesting
PPTX
リアルタイムリモートデバッグ環境によるゲーム開発イテレーションの高速化【DeNA TechCon 2020 ライブ配信】
PDF
R5 3 type annotation
PDF
Ansible softlayer
PDF
Appiumのテスト結果レポートをsahaginで作ってみる
PDF
最近のSpringFramework2013 #jjug #jsug #SpringFramework
PDF
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
PDF
海外のSeleniumカンファレンスではどんな発表がされているのか2014
PPTX
前任者から引き継いだ Eight Android アプリ内部の改善
PDF
インフラエンジニアの綺麗で優しい手順書の書き方
PDF
ログ管理でウキウキAndroid Life (Log Management in Android)
PDF
Firebase Test Lab 無料枠を使ってみました。
Java + React.jsでSever Side Rendering #reactjs_meetup
アプリケーションエンジニアがMackerelで楽しく監視構成している事例
自作アプリを Apple Watch対応した話 〜FastCheckin編〜
Behind-the-Scenes and Goals of LINE Summer Internship Program
Lt 20150711
10分でわかるOpenAPI V3
AppiumのWebViewアプリテストの仕組みとハマりどころ
Javaアプリケーション開発におけるユニットテストとTDDの実践 Java Day Tokyo 2014
Android ReactNative UITesting
リアルタイムリモートデバッグ環境によるゲーム開発イテレーションの高速化【DeNA TechCon 2020 ライブ配信】
R5 3 type annotation
Ansible softlayer
Appiumのテスト結果レポートをsahaginで作ってみる
最近のSpringFramework2013 #jjug #jsug #SpringFramework
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
海外のSeleniumカンファレンスではどんな発表がされているのか2014
前任者から引き継いだ Eight Android アプリ内部の改善
インフラエンジニアの綺麗で優しい手順書の書き方
ログ管理でウキウキAndroid Life (Log Management in Android)
Firebase Test Lab 無料枠を使ってみました。
Ad

Viewers also liked (20)

PDF
AWS Device FarmでAndroidのUIテストをやってみた
PPTX
Appium を使って iOS / Android の UI テストを共通化
PPTX
Sansan における Android アプリ自動テスト導入事例
PPTX
UNICORNで爆速アプリ開発
PPTX
Jawsdays2016 田舎とAWS Lambdaと私
PDF
ディープラーニングとAppiumでモバイルテスト自動化
PDF
AWS Device Farm を Jenkins CI から叩いてみた
PDF
無料追補版#2「ペーパープロトタイピング原論」
PDF
kollectionの紹介
PPT
スマホアプリ・サイトの実機検証・自動テストサービスーMovaTestingのご紹介
PDF
Jawsdays2016 LT BoCue3
PDF
serverless
PDF
Mobile automation – should I use robotium or calabash or appium?
PPTX
JAWS DAYS | IoTプラットフォーム”SORACOM”最新動向
PPTX
iOSアプリ開発のCI環境 - Jenkins編 -
PPTX
Robotium を使った UI テストとレイアウト確認の効率化
PDF
【JAWS DAYS 2016】ランサーズを支えるAurora
PPTX
Androidアプリ開発のテスト環境
PPTX
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
PDF
Jawsug chiba API Gateway
AWS Device FarmでAndroidのUIテストをやってみた
Appium を使って iOS / Android の UI テストを共通化
Sansan における Android アプリ自動テスト導入事例
UNICORNで爆速アプリ開発
Jawsdays2016 田舎とAWS Lambdaと私
ディープラーニングとAppiumでモバイルテスト自動化
AWS Device Farm を Jenkins CI から叩いてみた
無料追補版#2「ペーパープロトタイピング原論」
kollectionの紹介
スマホアプリ・サイトの実機検証・自動テストサービスーMovaTestingのご紹介
Jawsdays2016 LT BoCue3
serverless
Mobile automation – should I use robotium or calabash or appium?
JAWS DAYS | IoTプラットフォーム”SORACOM”最新動向
iOSアプリ開発のCI環境 - Jenkins編 -
Robotium を使った UI テストとレイアウト確認の効率化
【JAWS DAYS 2016】ランサーズを支えるAurora
Androidアプリ開発のテスト環境
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
Jawsug chiba API Gateway
Ad

Similar to Device Farm を使ったスマホアプリの自動テスト (20)

PDF
おすすめインフラ! for スタートアップ
PDF
リモート・スマホ・レンタル(第2回 Androidテスト祭り)
PPTX
アプリの不具合を少なくするために
PDF
Sharoid Service Menu
PDF
福井スマートフォンハッカソン Titanium Mobileの紹介
PPTX
DRIVE CHARTの裏側 〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜
PPTX
20170705 apiをつくろう
PDF
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
PDF
Automation with SoftLayer and Zabbix
PPTX
Azure Api Management 俺的マニュアル 2020年3月版
PPTX
OpManager導入事例 日テレITプロデュース様
PDF
退屈なブラウザ作業をpuppeteerにやらせたいお話
PDF
デブサミ2014【13-E-3】クラウド時代の環境構築・デプロイ自動化戦略
PPTX
インドのインターネット環境 との戦い方
PDF
リモート・スマホ・レンタル
PPTX
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
PPTX
JaSST'16 Tokyo モバイルセッション
PDF
Voicepic@FukuiMASeminar
PDF
AWSによるサーバーレスアーキテクチャ
PPTX
WebIntentsにより拓かれる次のWeb
おすすめインフラ! for スタートアップ
リモート・スマホ・レンタル(第2回 Androidテスト祭り)
アプリの不具合を少なくするために
Sharoid Service Menu
福井スマートフォンハッカソン Titanium Mobileの紹介
DRIVE CHARTの裏側 〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜
20170705 apiをつくろう
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
Automation with SoftLayer and Zabbix
Azure Api Management 俺的マニュアル 2020年3月版
OpManager導入事例 日テレITプロデュース様
退屈なブラウザ作業をpuppeteerにやらせたいお話
デブサミ2014【13-E-3】クラウド時代の環境構築・デプロイ自動化戦略
インドのインターネット環境 との戦い方
リモート・スマホ・レンタル
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
JaSST'16 Tokyo モバイルセッション
Voicepic@FukuiMASeminar
AWSによるサーバーレスアーキテクチャ
WebIntentsにより拓かれる次のWeb

More from Kenichi Tatsuhama (20)

PDF
【技術的負債LT会】私たちの技術負債最前線〜過去と未来について〜 2024/08/01
PDF
地方創生ワカモノ会合
PDF
Google Analytics のデータ分析ハンズオン
PDF
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
PDF
知っておきたいFirebase の色んな上限について
PDF
Android 開発の昔と今
PDF
Firebase Extensions はじめの一歩
PDF
Firebase & BigQuery で Android アプリの成⻑を支える
PPTX
GDG DevFest Tokyo 2019 Day2 Special Hands-on
PPTX
Firebase Summit 2019 Recap
PPTX
Cloud Firestore を使って、Polling をやめたい話
PPTX
Firebase hands on in Matsuyama
PPTX
インドの低速なネットワーク環境の攻略法
PPTX
DroidKaigi 2018 参加報告会 Closing
PPTX
企業スポンサー
PPTX
参加したセッションの ピックアップ
PPTX
CFP(Call For Paper) を出す話
PPTX
DroidKaigi 2018 参加報告会
PPTX
DroidKaigi アプリの内部を見る
PPTX
Java で書かれた Android アプリに Kotlin を適用させていく
【技術的負債LT会】私たちの技術負債最前線〜過去と未来について〜 2024/08/01
地方創生ワカモノ会合
Google Analytics のデータ分析ハンズオン
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
知っておきたいFirebase の色んな上限について
Android 開発の昔と今
Firebase Extensions はじめの一歩
Firebase & BigQuery で Android アプリの成⻑を支える
GDG DevFest Tokyo 2019 Day2 Special Hands-on
Firebase Summit 2019 Recap
Cloud Firestore を使って、Polling をやめたい話
Firebase hands on in Matsuyama
インドの低速なネットワーク環境の攻略法
DroidKaigi 2018 参加報告会 Closing
企業スポンサー
参加したセッションの ピックアップ
CFP(Call For Paper) を出す話
DroidKaigi 2018 参加報告会
DroidKaigi アプリの内部を見る
Java で書かれた Android アプリに Kotlin を適用させていく

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

  • 1. Device Farm を使った スマホアプリの自動テスト JAWS DAYS 2016 - Move Up the Next Cloud - 2016/03/06@ベルサール新宿グランド Sansan株式会社 辰濱健一
  • 2. > Agenda 1 • 自己紹介 • Device Farm とは • Device Farm を有効活用するために • Device Farm での実行 • 効果 • 雑感 • まとめ
  • 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物件
  • 16. > 2014 年の LT 資料より… 15
  • 17. > 2014 年の LT 資料より… 16
  • 18. > 2014 年の LT 資料より… 17
  • 19. > 2014 年の LT 資料より… 18
  • 21. 20
  • 23. 22
  • 24. 23
  • 25. 24
  • 26. 25
  • 27. 26
  • 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 デバイス分 無料
  • 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) でテストコードを共通化 • リリースバイナリ可
  • 49. > Device Farm を有効活用するために 48 • 何らかのテスティングフレームワークを習得しよう! • スクリーンショットを保存しよう!
  • 50. > スクリーンショット 49 • どのテスティングフレームワークでも、だいたいサ ポートされている • 任意のタイミングでスクリーンショットを保存するこ とで、実機での画面レイアウト確認にもなる • エラー時にスクショを残すのはオススメ
  • 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. > Jenkins から実行 86 • ジョブを実行
  • 88. > Jenkins から実行 87 • Jenkins 上から結果を確認
  • 89. > Jenkins から実行 88 • Jenkins 上から結果を確認 良い!!
  • 90. > Jenkins から実行 89 • Jenkins 上から結果を確認 良い!! Slack 連携などすれば、もっと良くなる!
  • 92. > 効果 91 • 手元に端末がなくても、その端末の実機でテストが行 える • 各拠点に何台も端末を買わなくて良い • テスト記述できるスキルがあれば、テスター不要? • リモートワークの味方! • 端末を購入しなくても、時間借りができる
  • 94. > 今後への期待 93 • 作ったプロジェクトが削除できない… • Appium の Ruby サポート • 現在は Java のみ • フォーラム上では、サポート予定と書かれていた • ジョブ開始までに時間がかかる(場合がある) • Android のスクリーンショットの保存 or 収集ができ ない(iOS は OK) • フォーラムで多々報告がある • テストを書かなくてもエミュレータのように、端末を 操作したい…
  • 96. > まとめ 95 • Device Farm は端末の実機を時間借りできる • モンキーテストも実行できるが、テストを記述した方 が効果的 • 実行は、Jenkins などで自動化しよう! • 場所を選ばない働き方の味方