97
Device Farm をををを をををををををををををを JAWS DAYS 2016 - Move Up the Next Cloud - 2016/03/06 ををををををををををを Sansan をををを ををを

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

Embed Size (px)

Citation preview

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

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

JAWS DAYS 2016 - Move Up the Next Cloud -2016/03/06 @ベルサール新宿グランド

Sansan 株式会社 辰濱健一

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

>Agenda

2

• 自己紹介

• Device Farm とは

• Device Farm を有効活用するために

• Device Farm での実行

• 効果

• 雑感

• まとめ

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

自己紹介

3

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

>自己紹介

4

• 辰濱健一

• Sansan 株式会社所属

• スマホアプリエンジニア

• リモートワーク@徳島県神山町

• Tokushima.app 主催(スマホアプリ開発勉強会)

• JAWS-UG 四国のイベントに、なんやかんやでちょこちょこ参加

• 趣味は音楽と旅行

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

>自己紹介

5

• 業務経歴

• 1 社目@徳島市

• Java, C++, MFC• UWSC を使った Windows アプリの UI 自動テストの導入

• 性能改善チームにて、自動性能計測ツールを作成

• 2 社目@徳島市

• iOS ( Objective-C ) , Android ( Java ) , Windows ( C# )のスマホ&タブレット向けアプリ開発

• 機能担当制、 iOS で作った機能は作った人が他 OS に移植

• 3 社目@徳島県神山町

• スマホアプリの自動テスト

• リモートワーク

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

>自己紹介

6

• 業務経歴

• 1 社目@徳島市

• Java, C++, MFC• UWSC を使った Windows アプリの UI 自動テストの導入

• 性能改善チームにて、自動性能計測ツールを作成

• 2 社目@徳島市

• iOS ( Objective-C ) , Android ( Java ) , Windows ( C# )のスマホ&タブレット向けアプリ開発

• 機能担当制、 iOS で作った機能は作った人が他 OS に移植

• 3 社目@徳島県神山町

• スマホアプリの自動テスト

• リモートワーク

開発&品質担保と自動テスト

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

>自己紹介

7

• 業務経歴

• 1 社目@徳島市

• Java, C++, MFC• UWSC を使った Windows アプリの UI 自動テストの導入

• 性能改善チームにて、自動性能計測ツールを作成

• 2 社目@徳島市

• iOS ( Objective-C ) , Android ( Java ) , Windows ( C# )のスマホ&タブレット向けアプリ開発

• 機能担当制、 iOS で作った機能は作った人が他 OS に移植

• 3 社目@徳島県神山町

• スマホアプリの自動テスト

• リモートワーク

開発&品質担保と自動テスト

モバイル開発

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

>自己紹介

8

• 業務経歴

• 1 社目@徳島市

• Java, C++, MFC• UWSC を使った Windows アプリの UI 自動テストの導入

• 性能改善チームにて、自動性能計測ツールを作成

• 2 社目@徳島市

• iOS ( Objective-C ) , Android ( Java ) , Windows ( C# )のスマホ&タブレット向けアプリ開発

• 機能担当制、 iOS で作った機能は作った人が他 OS に移植

• 3 社目@徳島県神山町

• スマホアプリの自動テスト

• リモートワーク

開発&品質担保と自動テスト

モバイル開発

モバイル開発での品質担保と自動テスト

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

>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 登壇

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

>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 登壇 えっ!?

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

>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 !?・弊社、企業サポータ…

・アプリエンジニアなのですが…

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

>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 !?・弊社、企業サポータ…

・アプリエンジニアなのですが…

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

>Sansan 神山ラボ

13

• 築 70 年の木造古民家( 3 棟)

• 略歴

• 2010 年設置

• 〜 2013/11: 合宿所

• 2013/11 〜 : 常駐メンバーのいる開発拠点に

• 家具家電、畑付き、風呂トイレセパレート

• 家賃:数万円 / 月

• インターネット接続:光回線

• 最寄り駅まで徒歩 15 分

• 改装 OK 物件

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

>Sansan 神山ラボ

14

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

>Sansan 神山ラボ

15

掘りごたつ席最近は

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

>2014 年の LT 資料より…

16

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

>2014 年の LT 資料より…

17

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

>2014 年の LT 資料より…

18

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

>2014 年の LT 資料より…

19

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

>Sansan 株式会社

20

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

21

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

22

← 昨日発表!!

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

23

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

24

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

25

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

26

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

27

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

28

Let’s Try!!

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

29

この人数で試して大丈夫なの?

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

30

安心して下さい!

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

31

AWS 使ってますから!

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

>AWS 導入事例

32

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

>AWS 導入事例

33

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

Device Farm とは

34

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

>Device Farm とは

35

• AWS クラウドで実機のデバイスを使用してアプリをテスト

• Android / iOS / Fire OS に対応

• 実際の環境をシミュレート

• 開発ワークフローとの統合

• UI テストフレームワークをサポート

• 料金

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

>Device Farm とは

36

• AWS クラウドで実機のデバイスを使用してアプリをテスト

• Android / iOS / Fire OS に対応

• 実際の環境をシミュレート

• 開発ワークフローとの統合

• UI テストフレームワークをサポート

• 料金エミュレータよりも

信頼できるパフォーマンス

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

>Device Farm とは

37

• AWS クラウドで実機のデバイスを使用してアプリをテスト

• Android / iOS / Fire OS に対応

• 実際の環境をシミュレート

• 開発ワークフローとの統合

• UI テストフレームワークをサポート

• 料金マルチプラット

フォーム!

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

>Device Farm とは

38

• AWS クラウドで実機のデバイスを使用してアプリをテスト

• Android / iOS / Fire OS に対応

• 実際の環境をシミュレート

• 開発ワークフローとの統合

• UI テストフレームワークをサポート

• 料金位置情報の指定、端末言語、前提アプリのインストールなど

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

>Device Farm とは

39

• AWS クラウドで実機のデバイスを使用してアプリをテスト

• Android / iOS / Fire OS に対応

• 実際の環境をシミュレート

• 開発ワークフローとの統合

• UI テストフレームワークをサポート

• 料金・ API・ Gradle Plugin・ Jenkins Plugin

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

>Device Farm とは

40

• AWS クラウドで実機のデバイスを使用してアプリをテスト

• Android / iOS / Fire OS に対応

• 実際の環境をシミュレート

• 開発ワークフローとの統合

• UI テストフレームワークをサポート

• 料金 Appium, Espressoなどで、指定した UI操作が記述可能

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

>Device Farm とは

41

• AWS クラウドで実機のデバイスを使用してアプリをテスト

• Android / iOS / Fire OS に対応

• 実際の環境をシミュレート

• 開発ワークフローとの統合

• UI テストフレームワークをサポート

• 料金・ 0.17 $ / デバイス分・ 250 $ / 月・ 250 デバイス分 無料

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

Device Farm を有効活用するために

42

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

>Device Farm を有効活用するために

43

• 何らかのテスティングフレームワークを習得しよう!

• スクリーンショットを保存しよう!

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

>Device Farm を有効活用するために

44

• 何らかのテスティングフレームワークを習得しよう!

• スクリーンショットを保存しよう!

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

>テスティングフレームワーク

45

• UI 操作を記述するためのフレームワーク

• 特徴

• iOS 専用、 Android 専用、ハイブリッド

• アプリ内部オブジェクトへのアクセスの可否

• リリースバイナリでの実行可否

• アプリ外の端末の操作(遷移後の別アプリの操作など)の可否

• 用途によって選ぼう

• 細かなところまでテストをしたい?

• リリースバイナリでテストをしたい?( Android だとリリース時に難読化や最適化がかかる)

• 記述可能な言語

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

>テスティングフレームワーク

46

• 弊社で使っているテスティングフレームワーク

• Android• Robotium, Espresso• アプリ内オブジェクト利用可→ 端末内 DB の状態やキャッシュの値も参照可能

• 別アプリ遷移後の操作はできない…→  UIAutomater との併用を検討

• iOS• KIF

• iOS & Android• Appium ( Ruby ) でテストコードを共通化

• リリースバイナリ可

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

>テストコード

47

• 未入力でボタンタップ↓エラー表示の確認

※テストライブラリを抽象クラスで隠蔽しています

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

>Device Farm を有効活用するために

49

• 何らかのテスティングフレームワークを習得しよう!

• スクリーンショットを保存しよう!

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

>スクリーンショット

50

• どのテスティングフレームワークでも、だいたいサポートされている

• 任意のタイミングでスクリーンショットを保存することで、実機での画面レイアウト確認にもなる

• エラー時にスクショを残すのはオススメ

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

Device Farm での実行

51

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

Device Farm での実行

52

※このセクションは、 Android 開発を前提に説明します

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

>Device Farm での実行

53

• Web から実行

• Gradle Plugin から実行

• Jenkins から実行

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

>Device Farm での実行

54

• Web から実行

• Gradle Plugin から実行

• Jenkins から実行

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

>Device Farm での実行 - Web から

55

「 Robotium で書いた Android アプリのテストを  AWS Device Farm で実行する」http://qiita.com/tatsuhama/items/27d5e3ef1056e740b085で詳しく書いているので、雰囲気だけ掴んでもらえば OK。

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

>Device Farm での実行 - Web から

56

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

>Device Farm での実行 - Web から

57

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

>Device Farm での実行 - Web から

58

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

>Device Farm での実行 - Web から

59

※前提として、アプリ本体、テスト apk はビルド済みとする

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

>Device Farm での実行 - Web から

60

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

>Device Farm での実行 - Web から

61

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

>Device Farm での実行 - Web から

62

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

>Device Farm での実行 - Web から

63

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

>Device Farm での実行 - Web から

64

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

>Device Farm での実行 - Web から

65

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

>Device Farm での実行 - Web から

66

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

>Device Farm での実行 - Web から

67

面倒…

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

>Device Farm での実行 - Web から

68

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

>Device Farm での実行 - Web から

69

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

>Device Farm での実行 - Web から

70

結果表示

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

>Device Farm での実行 - Web から

71

結果表示

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

>Device Farm での実行 - Web から

72

結果表示

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

>Device Farm での実行

73

• Web から実行

• Gradle Plugin から実行

• Jenkins から実行

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

>Gradle Plugin から実行

74

• Android の build.gradle へ何行か追記

• IAMユーザを作成して、 accessKey / secretKey を取得 ( IAM : Identity and Access Management )

• accessKey / secretKey を build.gradle へ設定

• ./gradlew devicefarmUpload を実行

•   

•      

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

>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参照

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

>Gradle Plugin から実行

76

• あくまでも devicefarmUpload なので、呼び出しのみ

• 結果はコンソール上に示された URL を見に行く

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

>Gradle Plugin から実行

77

• URL を見ると、ちゃんと結果が表示されている

• 結果を見に行くのはめんどくさい…

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

>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 を使いましょう!

• (中の人が今日聞いていることを期待してみる)

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

>Gradle Plugin から実行

79

(中略)

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

>Device Farm での実行

80

• Web から実行

• Gradle Plugin から実行

• Jenkins から実行

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

>Jenkins から実行

81

• Jenkins に AWS Device Farm Plugin を導入

• Jenkins のシステム設定

• accessKey / secretKey を追加

• Jenkins にジョブを作成&設定する

• 本体 apk 、テスト apk の作成

• ビルド後の処理の処理に「 Run Tests on AWS Device Farm 」を追加して、設定する

• ジョブを実行

• Jenkins 上から結果を確認

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

>Jenkins から実行

82

• Jenkins に AWS Device Farm Plugin を導入

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

>Jenkins から実行

83

• Jenkins のシステム設定

• accessKey / secretKey を追加

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

>Jenkins から実行

84

• Jenkins にジョブを作成&設定する

• 本体 apk 、テスト apk の作成

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

>Jenkins から実行

85

• Jenkins にジョブを作成&設定する

• ビルド後の処理の処理に「 Run Tests on AWS Device Farm 」を追加して、設定する

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

>Jenkins から実行

86

• Jenkins にジョブを作成&設定する

• ビルド後の処理の処理に「 Run Tests on AWS Device Farm 」を追加して、設定する

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

>Jenkins から実行

87

• ジョブを実行

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

>Jenkins から実行

88

• Jenkins 上から結果を確認

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

>Jenkins から実行

89

• Jenkins 上から結果を確認

良い!!

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

>Jenkins から実行

90

• Jenkins 上から結果を確認

良い!!Slack 連携などすれば、もっと良くなる!

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

効果

91

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

>効果

92

• 手元に端末がなくても、その端末の実機でテストが行える

• 各拠点に何台も端末を買わなくて良い

• テスト記述できるスキルがあれば、テスター不要?

• リモートワークの味方!

• 端末を購入しなくても、時間借りができる

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

今後への期待

93

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

>今後への期待

94

• 作ったプロジェクトが削除できない…

• Appium の Ruby サポート• 現在は Java のみ

• フォーラム上では、サポート予定と書かれていた

• ジョブ開始までに時間がかかる(場合がある)

• Android のスクリーンショットの保存 or 収集ができない( iOS は OK )• フォーラムで多々報告がある

• テストを書かなくてもエミュレータのように、端末を操作したい…

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

まとめ

95

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

>まとめ

96

• Device Farm は端末の実機を時間借りできる

• モンキーテストも実行できるが、テストを記述した方が効果的

• 実行は、 Jenkins などで自動化しよう!

• 場所を選ばない働き方の味方

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

97