device farm を使ったスマホアプリの自動テスト

Post on 16-Apr-2017

1.130 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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

>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

top related