SlideShare a Scribd company logo
Robotium を使った UI テスト
2016/02/20 DroidKaigi 2016 Reject Conf
Sansan 株式会社 辰濱健一
Copyright © 2014 Sansan, Inc. All rights reserved.
> Agenda
1
• 自己紹介
• なぜ Robotium?
• テスト記述のポリシー
• 実行環境
• デモ
• 自動テストを導入してみて
• UI テストで他にもできること
• これから
Copyright © 2014 Sansan, Inc. All rights reserved.
自己紹介
2
Copyright © 2014 Sansan, Inc. All rights reserved.
> 自己紹介
3
• 辰濱健一
• https://www.facebook.com/kenichi.tatsuhama
• http://www.slideshare.net/kenichitatsuhama
• 徳島県生まれ、徳島県勤務
• Tokushima.app というスマホアプリ勉強会を主催
• 趣味は音楽&旅行
Copyright © 2014 Sansan, Inc. All rights reserved.
> 自己紹介
4
• 業務経歴
• 1社目@徳島市
• Java, C++, MFC
• UWSC を使った Windows アプリの UI 自動テストの導入
• 性能改善チームにて、自動性能計測ツールを作成
• 2社目@徳島市
• iOS(Objective-C), Android(Java), Windows(C#)の
スマホ&タブレット向けアプリ開発
• 機能担当制、iOS で作った機能は作った人が他 OS に移植
• 3社目@徳島県神山町
• スマホアプリの自動テスト
• リモートワーク
開発&
品質担保と自動テスト
モバイル開発
モバイル開発での
品質担保と
自動テスト
Copyright © 2014 Sansan, Inc. All rights reserved.
> Sansan株式会社
5
モバイルアプリエンジニアは、2つの事業部で8人のメンバー
・Sansan … 4名(iOS x2 / Android x2)
・Eight … 4名(iOS x2 / Android x2)
Copyright © 2014 Sansan, Inc. All rights reserved.
> Sansan神山ラボ
6
• 築70年の木造古民家(3棟)
• 略歴
• 2010年設置
• 〜2013/11:合宿所
• 2013/11〜:常駐メンバーのいる開発拠点に
• 家具家電、畑付き、風呂トイレセパレート
• 家賃:数万円 / 月
• インターネット接続:光回線
• 最寄り駅まで徒歩15分
• 改装OK物件
Copyright © 2014 Sansan, Inc. All rights reserved.
> Sansan神山ラボ
7
Copyright © 2014 Sansan, Inc. All rights reserved.
> 昨日もパンフレット入れさせて頂きました!
8
Copyright © 2014 Sansan, Inc. All rights reserved.
> 余談
9
Copyright © 2014 Sansan, Inc. All rights reserved.
> 余談
10
ちゃんと徳島に
帰ることができるのか!?
Copyright © 2014 Sansan, Inc. All rights reserved.
> 余談
11
ちゃんと徳島に
帰ることができるのか!?
徳島空港から家まで車なので呑めない…
飛ばないとわかっていれば呑める。。。
Copyright © 2014 Sansan, Inc. All rights reserved.
なぜ Robotium?
18
Copyright © 2014 Sansan, Inc. All rights reserved.
> スマホアプリの自動テストライブラリ
19
- Android 専用
- Robotium
- monkeyrunner
- Espresso
- UI Automater など…
- iOS 専用
- KIF
- Kiwi
- など…
- ハイブリッド
- Appium
- Calabash
- MonkeyTALK
- など…
Copyright © 2014 Sansan, Inc. All rights reserved.
> Robotium にした理由
20
• Android 実装と同じ Java 言語で記述
• アプリケーション内部のオブジェクトを参照できる
• UI に見えない内部の値、Activity の getter を呼べる
SharedPreference の値
• DB にもアクセスできるので期待値を動的生成できる
→ サーバ DB 状態の変更にも強い
• ただし、リリースビルドでは使えない
• リリースバイナリでも使いたい&iOS / Android のテストコード共通化のため、
Appium によるテストコード記述も実践中
※Appium は、アプリ内部のオブジェクトは参照できない
• 導入当時(2014/05)、最終局面で Espresso とどっちにす
るか悩んだ。
•
Copyright © 2014 Sansan, Inc. All rights reserved.
> Robotium にした理由
21
• Android 実装と同じ Java 言語で記述
• アプリケーション内部のオブジェクトを参照できる
• UI に見えない内部の値、Activity の getter を呼べる
SharedPreference の値
• DB にもアクセスできるので期待値を動的生成できる
→ サーバ DB 状態の変更にも強い
• ただし、リリースビルドでは使えない
• リリースバイナリでも使いたい&iOS / Android のテストコード共通化のため、
Appium によるテストコード記述も実践中
※Appium は、アプリ内部のオブジェクトは参照できない
• 導入当時(2014/05)、最終局面で Espresso とどっちにす
るか悩んだ。
• 今となっては、Espresso にしておけば良かったと思う…。
Copyright © 2014 Sansan, Inc. All rights reserved.
テスト記述のポリシー
22
Copyright © 2014 Sansan, Inc. All rights reserved.
> テスト記述のポリシー
23
• ライブラリとテストコードの結合度を下げる
• まずは、浅く・広く記述する
• あきらめも大事
• 待ち方のコツ
• どの環境でも動くように
Copyright © 2014 Sansan, Inc. All rights reserved.
テスト記述のポリシー
ライブラリとテストコードの結合度を下げる
24
Copyright © 2014 Sansan, Inc. All rights reserved.
> ライブラリとテストコードの結合度を下げる
25
• 目的
• テストコードの可読性を上げる
• ライブラリに依存しないテストコードにする
• ライブラリにない機能追加ができる
• 実行ログの記録
• エラー時にスクリーンショットを残すようにする
• 理由
• ライブラリの API 変更, ライブラリの置き換えでテスト
コードの修正が伴わない
• 失敗時の原因調査がしやすい
Copyright © 2014 Sansan, Inc. All rights reserved.
> Robotium Getting Started は密結合
26
• https://github.com/RobotiumTech/robotium/wiki/Getting-Started
• あくまでも API の使い方と思っておきましょう。
• 【対応】テストの基底クラスなどを作って clickOnText(String)を作り、
テストコードではそちらを呼び出す
テストコードと
ライブラリが密結合
Copyright © 2014 Sansan, Inc. All rights reserved.
> ライブラリの依存性排除
27
• ライブラリの隠蔽
Robotium 版
Copyright © 2014 Sansan, Inc. All rights reserved.
> ライブラリを置き換えるとしても…
28
• テストコードを修正することなく、対応可能
Robotium 版
Espresso 版
※Robotium と Espresso は同じ InstrumentationTest なので、共存可能!!
Copyright © 2014 Sansan, Inc. All rights reserved.
テスト記述のポリシー
まずは、広く・浅く記述する
29
Copyright © 2014 Sansan, Inc. All rights reserved.
> まずは、広く・浅く記述する
30
• 背景
• スマホアプリの UI や機能は比較的すぐ見直しが入る
• 使えないと致命的な機能と、そうでない機能がある
• 対策
• まずは、費用対効果の高い、主要機能のワンパスを通す
• ログイン → 検索・閲覧・編集 → ログアウト あたり
• ログイン時のバリデートチェックよりも、ログインできる
かの方が重要
• 慣れてきたら、各画面の詳細テストへ
Copyright © 2014 Sansan, Inc. All rights reserved.
テスト記述のポリシー
あきらめも大事
31
Copyright © 2014 Sansan, Inc. All rights reserved.
> あきらめも大事
32
• 別アプリと連携するものなどは手動で確認へ
• 例)
• カメラのピントが合っていること
• 住所文字列をタップすると地図アプリが起動し、その場所
にピンが立っていること
• URL をタップするとブラウザが起動し、ページが正しく表
示されること
• 場合によってはアプリ選択画面が出る
• 起動後の状態判定は目視の方が容易
• こういう所の自動化を頑張るのは費用対効果的に微妙…
Copyright © 2014 Sansan, Inc. All rights reserved.
> あきらめも大事
33
• 例)URL をタップするとブラウザが開く
アプリ ブラウザ
Copyright © 2014 Sansan, Inc. All rights reserved.
> あきらめも大事(だけど、知見共有)
34
• 例)URL をタップするとブラウザが開く
• Robotium や Espresso は UI 操作により別アプリが開
くと、その後どうしようもなくなる…
• 理由
• アプリケーションの操作であって、端末の操作ではない
• 対応策
• UI Automaterと 併用する
• ※但し、minSdkVersion に注意
• Espresso の Intent チェックを使う
Copyright © 2014 Sansan, Inc. All rights reserved.
> あきらめも大事:メールチェック編
35
• 別アプリ…とはいえ、送られてきたメールをチェックする
なら、MailCatcher & MailCatcher API で実現可能
• MailCatcher
• SMTPサーバを経由したメールをブラウザから
確認できる。開発中の誤送信防止にも役立つ。
• http://mailcatcher.me/
• MailCatcher API
• /messages
• /messages/:id.json
• /messages/:id.html
• /messages/:id.plain
など
Copyright © 2014 Sansan, Inc. All rights reserved.
> あきらめも大事:メールチェック編
36
• Retrofit & RxAndroid を使えば容易
• 指定したタイトルのメールが届いているか?
• 特定のメールを開いて本文の URL をタップ
(メール本文から URL を抽出して、OkHttpClient など
で post する)
※Message モデルのプロパティは
一部しか宣言していない
Copyright © 2014 Sansan, Inc. All rights reserved.
テスト記述のポリシー
待ち方のコツ
37
Copyright © 2014 Sansan, Inc. All rights reserved.
> 待ち方のコツ
38
• テストコードでは SLEEP 関数は使わない
• 自作関数やライブラリのラッパー関数内で使うのはアリ
• 端末、実行環境、サーバの状態によって待ち時間は違
う!
• どうするか? → wait* 関数を使う
• ライブラリ関数の例
• waitForActivity
• waitForFragmentByTag
• waitForCondition
Copyright © 2014 Sansan, Inc. All rights reserved.
テスト記述のポリシー
どの環境でも動くように
39
Copyright © 2014 Sansan, Inc. All rights reserved.
> どの環境でも動くように
40
• 期待値の動的生成
• エミュレータ判定
• 多言語対応
Copyright © 2014 Sansan, Inc. All rights reserved.
> どの環境でも動くように
41
• 期待値の動的生成
• エミュレータ判定
• 多言語対応
Copyright © 2014 Sansan, Inc. All rights reserved.
> 期待値の動的生成
42
• 弊社の開発事情によるところかも知れないですが…
「開発用」「ステージング」「本番」でデータセット
が異なります。
• 検索結果などが保証されるためにも
• ローカル DB を参照して期待値を動的生成する
• ログイン後にテストコードでデータを作る操作を行う
• このデータに対し、検索・編集・削除などのテストを行う
• ノイズにならないためにログアウト前に作ったデータを
削除する操作を行う
• これにより、データ非依存なテストケースになります
Copyright © 2014 Sansan, Inc. All rights reserved.
> 期待値の動的生成
43
実際のテストコード
myName : ”山田賢治”
users : {Uesr(阿部拓真), User(浅野緋美) ,
User(葉加瀬万太郎), …}
※ログインユーザを変えると、myName は違う値
※ログイン企業を変えると、users も違うデータセットが返る
Copyright © 2014 Sansan, Inc. All rights reserved.
> どの環境でも動くように
44
• 期待値の動的生成
• エミュレータ判定
• 多言語対応
Copyright © 2014 Sansan, Inc. All rights reserved.
> どの環境でも動くように
45
• エミュレータかどうかの判定
• 実機じゃないと確認できない項目(カメラなど)は
このフラグを見てスキップさせる
Copyright © 2014 Sansan, Inc. All rights reserved.
> どの環境でも動くように
46
• 期待値の動的生成
• エミュレータ判定
• 多言語対応
Copyright © 2014 Sansan, Inc. All rights reserved.
> 多言語対応
47
• https://github.com/RobotiumTech/robotium/wiki/Getting-Started
• ↑あくまでも API の使い方と思っておきましょう。
• 【対応】
• Robotium なら、clickOnText(@StringRes int) を作って、
getString(…)
• Espresso なら、withText に @StringRes int を渡す
日本語の時文言が違えば、
このコードはエラーになる
実行環境
Copyright © 2014 Sansan, Inc. All rights reserved.
> 実行環境
49
• 基本的に実機で実行
• 昔は Jenkins & エミュレータでやっていた
• テストが増え、CI 環境を長時間(2h 以上)占有する&
エミュレータが不安定なためやめた
• jacoco でカバレッジ計測
• どこのテストが足りてないかわかる
• 開発環境 DB で実施
• 固定のデータセット、特定のデータを使いたい場合は
Docker にて特定のデータセットを持つ DB を用意
Copyright © 2014 Sansan, Inc. All rights reserved.
> Jacoco のカバレッジレポート
50
• html で出力される(抜粋)
•
• 2016/02時点で 59% をカバーできている
Copyright © 2014 Sansan, Inc. All rights reserved.
> Jacoco のカバレッジレポート
51
• html で出力される
• 通っていないパスがよくわかる
Copyright © 2014 Sansan, Inc. All rights reserved.
> Docker を使った固定データ環境
52
• 開発環境(データや件数が他者によって書き換えられる可能性があ
る)でもテストが行えるようにしているが、以下のニーズ
がある
• パフォーマンス計測がしたい(ので、件数固定じゃないとダメ)
• テスト用に特定のユーザセットが欲しい
• 例)アカウント停止ユーザのエラーチェック
• アプリからは設定できないデータを持つ名刺が欲しい
• 例)名刺交換日未設定
• ローカル DB をアテにしない期待値を書きたい
• 例)山田賢治さんは○○枚名刺を持っている
• Docker で環境(API&DB)のイメージを持っておき、テス
トコードから環境準備&片付けを行う
Copyright © 2014 Sansan, Inc. All rights reserved.
> Docker を使った固定データ環境
53
• 事前準備
• Jenkins に環境起動用のジョブ / 環境破棄用のを作成
• テスト実行時
• setup() で 環境起動用の Jenkins ジョブを Jenkins WebAPI
を用いて実行
• アプリの API の向き先を差し替える
• テスト実行中
• 起動した環境に接続してテストを実施
• テスト終了時
• tearDown() で環境破棄用の Jenkins ジョブを Jenkins
WebAPI を用いて実行
• API の向き先を戻す
デモ
Copyright © 2014 Sansan, Inc. All rights reserved.
> デモ動画
55
• 2014/11 時点の動画です
• http://youtu.be/scY_RPgfxeY
• 4分ぐらいありますが、発表時間の都合上ちょっとだ
け…
自動テストを導入してみて
Copyright © 2014 Sansan, Inc. All rights reserved.
> 自動テスト導入してみて
57
• デグレードがないことを容易に確認できる
• メンテは思ったほど大変じゃない
• コツ:1行で書ける画面操作も clickSendButton() など
の関数にして共通利用するとよい
• テストでしっかりカバーしていれば、大規模なリファ
クタリングも安心!
• これから、通信ライブラリ・カメラ API・デザインパーツの差し替
え・DB の置き換え?などが控えている
• モックを使わないので、サーバの動作確認にもなる
UI テストで他にもできそうなこと
(ちょっとだけ着手して、本格導入できていない件)
Copyright © 2014 Sansan, Inc. All rights reserved.
> 推移時間(イメージ)
59
• パフォーマンス改善の結果確認、性能デグレの検出が
できる(かも?)
• 通信状態やサーバ状態に大きく左右される気がする…
0
2
4
6
8
10
12
2015/2/27 2015/2/28 2015/3/1 2015/3/2 2015/3/3 2015/3/4 2015/3/5 2015/3/6
ログイン処理
初回同期
名刺画像送信
詳細データ取得
高画質画像データ取得
手動同期処理
Copyright © 2014 Sansan, Inc. All rights reserved.
> 通信回数の分析
60
- 呼び出し毎に API名と実行時間を csv ファイルに出力
- Excel のピボットテーブルで集計
- iOS / Android で同じ仕組みを入れれば、
同じ操作で API 呼び出しの違いがわかる!
そんなに呼び
出す必要ある
の…?
サーバ負荷削減のためのボトルネック分析が容易になる
Excelマクロ
Copyright © 2014 Sansan, Inc. All rights reserved.
> 通信回数の分析(推移)
61
- さっきのデータを実行毎に集計する
呼び出し回数削減施策導入
Copyright © 2014 Sansan, Inc. All rights reserved.
> スクショ一覧
62
画面名→
画面名→
画面名→
Nexus4 Nexus5 デザイン指示画像(期待値)
※元サイズが違うけど、
今は同じサイズで
表示されている
目で比較する!
デザイナのチェックや
意図しないレイアウト崩れの
確認が楽になりました
これから
Copyright © 2014 Sansan, Inc. All rights reserved.
> これから
64
• Espresso も併用して、Robotium ではテストしづら
かった部分のテスト(Intent のチェックなど)を行う
• UI Automater も併用して、
• アクティビティを保持しない設定にする
• 最小化&復帰後の画面状態のテスト
• AWS Device Farm を使って、所有していない端末
でのテストも行う
Copyright © 2014 Sansan, Inc. All rights reserved.
> DroidKaigi 2016 落ちたけど…
65
• JAWS DAYS 2016 出ます!
http://jawsdays2016.jaws-ug.jp/speaker/409
http://jawsdays2016.jaws-ug.jp/
Copyright © 2014 Sansan, Inc. All rights reserved.
> Device Farm を使ったスマホアプリの自動テスト
66
http://jawsdays2016.jaws-ug.jp/speaker/409
質疑応答
ステッカー欲しい方は
お声がけ下さい!!

More Related Content

What's hot

Win7 * appium * androidで実機自動テストやってみた。
Win7 * appium * androidで実機自動テストやってみた。Win7 * appium * androidで実機自動テストやってみた。
Win7 * appium * androidで実機自動テストやってみた。
Naoto Kishino
 
iOSアプリ UIテスト自動化入門
iOSアプリ UIテスト自動化入門iOSアプリ UIテスト自動化入門
iOSアプリ UIテスト自動化入門
Shingo Tamaki
 
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
 Sansan Tech Meetup Androidエンジニアが振り返る Google I/O   Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
健一 辰濱
 
Appium を使って iOS / Android の UI テストを共通化
Appium を使って iOS / Android の UI テストを共通化Appium を使って iOS / Android の UI テストを共通化
Appium を使って iOS / Android の UI テストを共通化
健一 辰濱
 
スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編
スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編
スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編
Koji Hasegawa
 
JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッションJaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッション
mirer
 
STFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テストSTFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テスト
Toshiyuki Hirata
 
海外のSeleniumカンファレンスではどんな発表がされているのか2014
海外のSeleniumカンファレンスではどんな発表がされているのか2014海外のSeleniumカンファレンスではどんな発表がされているのか2014
海外のSeleniumカンファレンスではどんな発表がされているのか2014
Nozomi Ito
 
Appiumのテスト結果レポートをsahaginで作ってみる
Appiumのテスト結果レポートをsahaginで作ってみるAppiumのテスト結果レポートをsahaginで作ってみる
Appiumのテスト結果レポートをsahaginで作ってみる
Nozomi Ito
 
fastlane触ってみた
fastlane触ってみたfastlane触ってみた
fastlane触ってみた
Shingo Tamaki
 
VRの入力デバイス #JAGVR
VRの入力デバイス #JAGVRVRの入力デバイス #JAGVR
VRの入力デバイス #JAGVR
Koji Hasegawa
 
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
Tatsuya Ishikawa
 
初めての単体テスト
初めての単体テスト初めての単体テスト
初めての単体テスト
Basuke Suzuki
 
Lt 20150711
Lt 20150711Lt 20150711
Lt 20150711
Tomoyuki Obi
 
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAAスマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAAKoji Hasegawa
 
Stack2017 自動化困難な状況での活動方法
Stack2017 自動化困難な状況での活動方法Stack2017 自動化困難な状況での活動方法
Stack2017 自動化困難な状況での活動方法
Tatsuya Ishikawa
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
Toshiyuki Hirata
 
価値あるシステムテスト自動化の実現By friendly
価値あるシステムテスト自動化の実現By friendly価値あるシステムテスト自動化の実現By friendly
価値あるシステムテスト自動化の実現By friendlyTatsuya Ishikawa
 
アプリケーションエンジニアがMackerelで楽しく監視構成している事例
アプリケーションエンジニアがMackerelで楽しく監視構成している事例アプリケーションエンジニアがMackerelで楽しく監視構成している事例
アプリケーションエンジニアがMackerelで楽しく監視構成している事例
景子 西岡
 
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
Nozomi Ito
 

What's hot (20)

Win7 * appium * androidで実機自動テストやってみた。
Win7 * appium * androidで実機自動テストやってみた。Win7 * appium * androidで実機自動テストやってみた。
Win7 * appium * androidで実機自動テストやってみた。
 
iOSアプリ UIテスト自動化入門
iOSアプリ UIテスト自動化入門iOSアプリ UIテスト自動化入門
iOSアプリ UIテスト自動化入門
 
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
 Sansan Tech Meetup Androidエンジニアが振り返る Google I/O   Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
 
Appium を使って iOS / Android の UI テストを共通化
Appium を使って iOS / Android の UI テストを共通化Appium を使って iOS / Android の UI テストを共通化
Appium を使って iOS / Android の UI テストを共通化
 
スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編
スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編
スマートフォンアプリの色々自動化をはじめよう - at SonyDNA Meisters Salon 特別編
 
JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッションJaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッション
 
STFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テストSTFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テスト
 
海外のSeleniumカンファレンスではどんな発表がされているのか2014
海外のSeleniumカンファレンスではどんな発表がされているのか2014海外のSeleniumカンファレンスではどんな発表がされているのか2014
海外のSeleniumカンファレンスではどんな発表がされているのか2014
 
Appiumのテスト結果レポートをsahaginで作ってみる
Appiumのテスト結果レポートをsahaginで作ってみるAppiumのテスト結果レポートをsahaginで作ってみる
Appiumのテスト結果レポートをsahaginで作ってみる
 
fastlane触ってみた
fastlane触ってみたfastlane触ってみた
fastlane触ってみた
 
VRの入力デバイス #JAGVR
VRの入力デバイス #JAGVRVRの入力デバイス #JAGVR
VRの入力デバイス #JAGVR
 
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
 
初めての単体テスト
初めての単体テスト初めての単体テスト
初めての単体テスト
 
Lt 20150711
Lt 20150711Lt 20150711
Lt 20150711
 
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAAスマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
スマートフォンアプリ開発と自動化 〜なじむ。実に!なじむぞ!〜 #AsianAA
 
Stack2017 自動化困難な状況での活動方法
Stack2017 自動化困難な状況での活動方法Stack2017 自動化困難な状況での活動方法
Stack2017 自動化困難な状況での活動方法
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
 
価値あるシステムテスト自動化の実現By friendly
価値あるシステムテスト自動化の実現By friendly価値あるシステムテスト自動化の実現By friendly
価値あるシステムテスト自動化の実現By friendly
 
アプリケーションエンジニアがMackerelで楽しく監視構成している事例
アプリケーションエンジニアがMackerelで楽しく監視構成している事例アプリケーションエンジニアがMackerelで楽しく監視構成している事例
アプリケーションエンジニアがMackerelで楽しく監視構成している事例
 
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
 

Viewers also liked

自動家(オートメーター)大地に立つ!! 〜オールドタイプの一年戦争〜
自動家(オートメーター)大地に立つ!! 〜オールドタイプの一年戦争〜自動家(オートメーター)大地に立つ!! 〜オールドタイプの一年戦争〜
自動家(オートメーター)大地に立つ!! 〜オールドタイプの一年戦争〜
Kazuhito Miura
 
Java → Kotlin 変換 そのあとに。
Java → Kotlin 変換 そのあとに。Java → Kotlin 変換 そのあとに。
Java → Kotlin 変換 そのあとに。
健一 辰濱
 
Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
Tatsuya Ishikawa
 
AAA2015 関西風と欧米風 2つのTest Automation Patterns
AAA2015 関西風と欧米風 2つのTest Automation PatternsAAA2015 関西風と欧米風 2つのTest Automation Patterns
AAA2015 関西風と欧米風 2つのTest Automation Patterns
Noriyuki Mizuno
 
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用までTemplate Meta Programming入門から応用まで
Template Meta Programming入門から応用までyoshihikoozaki5
 
よろしい、ならば自動化だっ! ~自動家の自動化哲学~ #AsianAA
よろしい、ならば自動化だっ! ~自動家の自動化哲学~ #AsianAAよろしい、ならば自動化だっ! ~自動家の自動化哲学~ #AsianAA
よろしい、ならば自動化だっ! ~自動家の自動化哲学~ #AsianAA
Kazuhito Miura
 
テストがあればなんとかなる〜効率化までの道程〜
テストがあればなんとかなる〜効率化までの道程〜テストがあればなんとかなる〜効率化までの道程〜
テストがあればなんとかなる〜効率化までの道程〜
Takao Sumitomo
 
Unity testtool
Unity testtoolUnity testtool
Unity testtool
大介 束田
 
C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!
TATSUYA HAYAMIZU
 
Friendlyを使ったwindowsアプリテスト自動化
Friendlyを使ったwindowsアプリテスト自動化Friendlyを使ったwindowsアプリテスト自動化
Friendlyを使ったwindowsアプリテスト自動化Tatsuya Ishikawa
 
テストの種類とBDD #33testing
テストの種類とBDD #33testingテストの種類とBDD #33testing
テストの種類とBDD #33testing
Koji Hasegawa
 
User Scenario based UI testing with KIF
User Scenario based UI testing with KIFUser Scenario based UI testing with KIF
User Scenario based UI testing with KIF
Yusuke Kita
 

Viewers also liked (12)

自動家(オートメーター)大地に立つ!! 〜オールドタイプの一年戦争〜
自動家(オートメーター)大地に立つ!! 〜オールドタイプの一年戦争〜自動家(オートメーター)大地に立つ!! 〜オールドタイプの一年戦争〜
自動家(オートメーター)大地に立つ!! 〜オールドタイプの一年戦争〜
 
Java → Kotlin 変換 そのあとに。
Java → Kotlin 変換 そのあとに。Java → Kotlin 変換 そのあとに。
Java → Kotlin 変換 そのあとに。
 
Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
 
AAA2015 関西風と欧米風 2つのTest Automation Patterns
AAA2015 関西風と欧米風 2つのTest Automation PatternsAAA2015 関西風と欧米風 2つのTest Automation Patterns
AAA2015 関西風と欧米風 2つのTest Automation Patterns
 
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用までTemplate Meta Programming入門から応用まで
Template Meta Programming入門から応用まで
 
よろしい、ならば自動化だっ! ~自動家の自動化哲学~ #AsianAA
よろしい、ならば自動化だっ! ~自動家の自動化哲学~ #AsianAAよろしい、ならば自動化だっ! ~自動家の自動化哲学~ #AsianAA
よろしい、ならば自動化だっ! ~自動家の自動化哲学~ #AsianAA
 
テストがあればなんとかなる〜効率化までの道程〜
テストがあればなんとかなる〜効率化までの道程〜テストがあればなんとかなる〜効率化までの道程〜
テストがあればなんとかなる〜効率化までの道程〜
 
Unity testtool
Unity testtoolUnity testtool
Unity testtool
 
C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!
 
Friendlyを使ったwindowsアプリテスト自動化
Friendlyを使ったwindowsアプリテスト自動化Friendlyを使ったwindowsアプリテスト自動化
Friendlyを使ったwindowsアプリテスト自動化
 
テストの種類とBDD #33testing
テストの種類とBDD #33testingテストの種類とBDD #33testing
テストの種類とBDD #33testing
 
User Scenario based UI testing with KIF
User Scenario based UI testing with KIFUser Scenario based UI testing with KIF
User Scenario based UI testing with KIF
 

Similar to Robotium を使った UI テスト

Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
Manabu Shimobe
 
Sharoid Service Menu
Sharoid Service MenuSharoid Service Menu
Sharoid Service Menusharoid
 
20170705 apiをつくろう
20170705 apiをつくろう20170705 apiをつくろう
20170705 apiをつくろう
CData Software Japan
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップ
Koichiro Sumi
 
Espresso と Firebase Test Lab で Android アプリのテストを自動化する
Espresso と Firebase Test Lab で Android アプリのテストを自動化するEspresso と Firebase Test Lab で Android アプリのテストを自動化する
Espresso と Firebase Test Lab で Android アプリのテストを自動化する
健一 辰濱
 
次期Office製品群の新しい開発モデルの解説
次期Office製品群の新しい開発モデルの解説次期Office製品群の新しい開発モデルの解説
次期Office製品群の新しい開発モデルの解説kumo2010
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi
 
Sparkにプルリク投げてみた
Sparkにプルリク投げてみたSparkにプルリク投げてみた
Sparkにプルリク投げてみた
Noritaka Sekiyama
 
DroidKaigi_devicefarm
DroidKaigi_devicefarmDroidKaigi_devicefarm
DroidKaigi_devicefarm
Shunsuke Maeda
 
[SC13] ログ管理で向上させるセキュリティ
[SC13] ログ管理で向上させるセキュリティ[SC13] ログ管理で向上させるセキュリティ
[SC13] ログ管理で向上させるセキュリティ
de:code 2017
 
DRIVE CHARTの裏側 〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜
DRIVE CHARTの裏側  〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜DRIVE CHARTの裏側  〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜
DRIVE CHARTの裏側 〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜
DeNA
 
2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage Platform2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage PlatformMasaki Nakagawa
 
Spring I/O 2015 報告
Spring I/O 2015 報告Spring I/O 2015 報告
Spring I/O 2015 報告
Takuya Iwatsuka
 
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
日本マイクロソフト株式会社
 
ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014
Koji Hasegawa
 
リモート・スマホ・レンタル(第2回 Androidテスト祭り)
リモート・スマホ・レンタル(第2回 Androidテスト祭り)リモート・スマホ・レンタル(第2回 Androidテスト祭り)
リモート・スマホ・レンタル(第2回 Androidテスト祭り)
NTT Resonant Technology Inc.
 
WebIntentsにより拓かれる次のWeb
WebIntentsにより拓かれる次のWebWebIntentsにより拓かれる次のWeb
WebIntentsにより拓かれる次のWeb
Kensaku Komatsu
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話し
Akira Nagata
 
Lightning componentとlightning design system
Lightning componentとlightning design systemLightning componentとlightning design system
Lightning componentとlightning design system
Noriko Iwai
 

Similar to Robotium を使った UI テスト (20)

Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
 
Sharoid Service Menu
Sharoid Service MenuSharoid Service Menu
Sharoid Service Menu
 
20170705 apiをつくろう
20170705 apiをつくろう20170705 apiをつくろう
20170705 apiをつくろう
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップ
 
Espresso と Firebase Test Lab で Android アプリのテストを自動化する
Espresso と Firebase Test Lab で Android アプリのテストを自動化するEspresso と Firebase Test Lab で Android アプリのテストを自動化する
Espresso と Firebase Test Lab で Android アプリのテストを自動化する
 
次期Office製品群の新しい開発モデルの解説
次期Office製品群の新しい開発モデルの解説次期Office製品群の新しい開発モデルの解説
次期Office製品群の新しい開発モデルの解説
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
Sparkにプルリク投げてみた
Sparkにプルリク投げてみたSparkにプルリク投げてみた
Sparkにプルリク投げてみた
 
DroidKaigi_devicefarm
DroidKaigi_devicefarmDroidKaigi_devicefarm
DroidKaigi_devicefarm
 
[SC13] ログ管理で向上させるセキュリティ
[SC13] ログ管理で向上させるセキュリティ[SC13] ログ管理で向上させるセキュリティ
[SC13] ログ管理で向上させるセキュリティ
 
DRIVE CHARTの裏側 〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜
DRIVE CHARTの裏側  〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜DRIVE CHARTの裏側  〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜
DRIVE CHARTの裏側 〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜
 
2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage Platform2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage Platform
 
Spring I/O 2015 報告
Spring I/O 2015 報告Spring I/O 2015 報告
Spring I/O 2015 報告
 
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
 
ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014
 
リモート・スマホ・レンタル(第2回 Androidテスト祭り)
リモート・スマホ・レンタル(第2回 Androidテスト祭り)リモート・スマホ・レンタル(第2回 Androidテスト祭り)
リモート・スマホ・レンタル(第2回 Androidテスト祭り)
 
WebIntentsにより拓かれる次のWeb
WebIntentsにより拓かれる次のWebWebIntentsにより拓かれる次のWeb
WebIntentsにより拓かれる次のWeb
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話し
 
20090328
2009032820090328
20090328
 
Lightning componentとlightning design system
Lightning componentとlightning design systemLightning componentとlightning design system
Lightning componentとlightning design system
 

More from 健一 辰濱

地方創生ワカモノ会合
地方創生ワカモノ会合地方創生ワカモノ会合
地方創生ワカモノ会合
健一 辰濱
 
Google Analytics のデータ分析ハンズオン
Google Analytics のデータ分析ハンズオンGoogle Analytics のデータ分析ハンズオン
Google Analytics のデータ分析ハンズオン
健一 辰濱
 
知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について
健一 辰濱
 
Android 開発の昔と今
Android 開発の昔と今Android 開発の昔と今
Android 開発の昔と今
健一 辰濱
 
Firebase Extensions はじめの一歩
Firebase Extensions はじめの一歩Firebase Extensions はじめの一歩
Firebase Extensions はじめの一歩
健一 辰濱
 
Firebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支えるFirebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支える
健一 辰濱
 
GDG DevFest Tokyo 2019 Day2 Special Hands-on
GDG DevFest Tokyo 2019 Day2 Special Hands-onGDG DevFest Tokyo 2019 Day2 Special Hands-on
GDG DevFest Tokyo 2019 Day2 Special Hands-on
健一 辰濱
 
Firebase Summit 2019 Recap
Firebase Summit 2019 RecapFirebase Summit 2019 Recap
Firebase Summit 2019 Recap
健一 辰濱
 
Cloud Firestore を使って、Polling をやめたい話
Cloud Firestore を使って、Polling をやめたい話Cloud Firestore を使って、Polling をやめたい話
Cloud Firestore を使って、Polling をやめたい話
健一 辰濱
 
Firebase hands on in Matsuyama
Firebase hands on in MatsuyamaFirebase hands on in Matsuyama
Firebase hands on in Matsuyama
健一 辰濱
 
インドのインターネット環境 との戦い方
インドのインターネット環境との戦い方インドのインターネット環境との戦い方
インドのインターネット環境 との戦い方
健一 辰濱
 
インドの低速なネットワーク環境の攻略法
インドの低速なネットワーク環境の攻略法インドの低速なネットワーク環境の攻略法
インドの低速なネットワーク環境の攻略法
健一 辰濱
 
DroidKaigi 2018 参加報告会 Closing
DroidKaigi 2018 参加報告会 ClosingDroidKaigi 2018 参加報告会 Closing
DroidKaigi 2018 参加報告会 Closing
健一 辰濱
 
企業スポンサー
企業スポンサー企業スポンサー
企業スポンサー
健一 辰濱
 
参加したセッションの ピックアップ
参加したセッションのピックアップ参加したセッションのピックアップ
参加したセッションの ピックアップ
健一 辰濱
 
CFP(Call For Paper) を出す話
CFP(Call For Paper)を出す話CFP(Call For Paper)を出す話
CFP(Call For Paper) を出す話
健一 辰濱
 
DroidKaigi 2018 参加報告会
DroidKaigi 2018 参加報告会DroidKaigi 2018 参加報告会
DroidKaigi 2018 参加報告会
健一 辰濱
 
DroidKaigi アプリの内部を見る
DroidKaigi アプリの内部を見るDroidKaigi アプリの内部を見る
DroidKaigi アプリの内部を見る
健一 辰濱
 
Java で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていくJava で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていく
健一 辰濱
 
20171209エンジニアの移住相談会 自己紹介スライド
20171209エンジニアの移住相談会 自己紹介スライド20171209エンジニアの移住相談会 自己紹介スライド
20171209エンジニアの移住相談会 自己紹介スライド
健一 辰濱
 

More from 健一 辰濱 (20)

地方創生ワカモノ会合
地方創生ワカモノ会合地方創生ワカモノ会合
地方創生ワカモノ会合
 
Google Analytics のデータ分析ハンズオン
Google Analytics のデータ分析ハンズオンGoogle Analytics のデータ分析ハンズオン
Google Analytics のデータ分析ハンズオン
 
知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について
 
Android 開発の昔と今
Android 開発の昔と今Android 開発の昔と今
Android 開発の昔と今
 
Firebase Extensions はじめの一歩
Firebase Extensions はじめの一歩Firebase Extensions はじめの一歩
Firebase Extensions はじめの一歩
 
Firebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支えるFirebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支える
 
GDG DevFest Tokyo 2019 Day2 Special Hands-on
GDG DevFest Tokyo 2019 Day2 Special Hands-onGDG DevFest Tokyo 2019 Day2 Special Hands-on
GDG DevFest Tokyo 2019 Day2 Special Hands-on
 
Firebase Summit 2019 Recap
Firebase Summit 2019 RecapFirebase Summit 2019 Recap
Firebase Summit 2019 Recap
 
Cloud Firestore を使って、Polling をやめたい話
Cloud Firestore を使って、Polling をやめたい話Cloud Firestore を使って、Polling をやめたい話
Cloud Firestore を使って、Polling をやめたい話
 
Firebase hands on in Matsuyama
Firebase hands on in MatsuyamaFirebase hands on in Matsuyama
Firebase hands on in Matsuyama
 
インドのインターネット環境 との戦い方
インドのインターネット環境との戦い方インドのインターネット環境との戦い方
インドのインターネット環境 との戦い方
 
インドの低速なネットワーク環境の攻略法
インドの低速なネットワーク環境の攻略法インドの低速なネットワーク環境の攻略法
インドの低速なネットワーク環境の攻略法
 
DroidKaigi 2018 参加報告会 Closing
DroidKaigi 2018 参加報告会 ClosingDroidKaigi 2018 参加報告会 Closing
DroidKaigi 2018 参加報告会 Closing
 
企業スポンサー
企業スポンサー企業スポンサー
企業スポンサー
 
参加したセッションの ピックアップ
参加したセッションのピックアップ参加したセッションのピックアップ
参加したセッションの ピックアップ
 
CFP(Call For Paper) を出す話
CFP(Call For Paper)を出す話CFP(Call For Paper)を出す話
CFP(Call For Paper) を出す話
 
DroidKaigi 2018 参加報告会
DroidKaigi 2018 参加報告会DroidKaigi 2018 参加報告会
DroidKaigi 2018 参加報告会
 
DroidKaigi アプリの内部を見る
DroidKaigi アプリの内部を見るDroidKaigi アプリの内部を見る
DroidKaigi アプリの内部を見る
 
Java で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていくJava で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていく
 
20171209エンジニアの移住相談会 自己紹介スライド
20171209エンジニアの移住相談会 自己紹介スライド20171209エンジニアの移住相談会 自己紹介スライド
20171209エンジニアの移住相談会 自己紹介スライド
 

Robotium を使った UI テスト

  • 1. Robotium を使った UI テスト 2016/02/20 DroidKaigi 2016 Reject Conf Sansan 株式会社 辰濱健一
  • 2. Copyright © 2014 Sansan, Inc. All rights reserved. > Agenda 1 • 自己紹介 • なぜ Robotium? • テスト記述のポリシー • 実行環境 • デモ • 自動テストを導入してみて • UI テストで他にもできること • これから
  • 3. Copyright © 2014 Sansan, Inc. All rights reserved. 自己紹介 2
  • 4. Copyright © 2014 Sansan, Inc. All rights reserved. > 自己紹介 3 • 辰濱健一 • https://www.facebook.com/kenichi.tatsuhama • http://www.slideshare.net/kenichitatsuhama • 徳島県生まれ、徳島県勤務 • Tokushima.app というスマホアプリ勉強会を主催 • 趣味は音楽&旅行
  • 5. Copyright © 2014 Sansan, Inc. All rights reserved. > 自己紹介 4 • 業務経歴 • 1社目@徳島市 • Java, C++, MFC • UWSC を使った Windows アプリの UI 自動テストの導入 • 性能改善チームにて、自動性能計測ツールを作成 • 2社目@徳島市 • iOS(Objective-C), Android(Java), Windows(C#)の スマホ&タブレット向けアプリ開発 • 機能担当制、iOS で作った機能は作った人が他 OS に移植 • 3社目@徳島県神山町 • スマホアプリの自動テスト • リモートワーク 開発& 品質担保と自動テスト モバイル開発 モバイル開発での 品質担保と 自動テスト
  • 6. Copyright © 2014 Sansan, Inc. All rights reserved. > Sansan株式会社 5 モバイルアプリエンジニアは、2つの事業部で8人のメンバー ・Sansan … 4名(iOS x2 / Android x2) ・Eight … 4名(iOS x2 / Android x2)
  • 7. Copyright © 2014 Sansan, Inc. All rights reserved. > Sansan神山ラボ 6 • 築70年の木造古民家(3棟) • 略歴 • 2010年設置 • 〜2013/11:合宿所 • 2013/11〜:常駐メンバーのいる開発拠点に • 家具家電、畑付き、風呂トイレセパレート • 家賃:数万円 / 月 • インターネット接続:光回線 • 最寄り駅まで徒歩15分 • 改装OK物件
  • 8. Copyright © 2014 Sansan, Inc. All rights reserved. > Sansan神山ラボ 7
  • 9. Copyright © 2014 Sansan, Inc. All rights reserved. > 昨日もパンフレット入れさせて頂きました! 8
  • 10. Copyright © 2014 Sansan, Inc. All rights reserved. > 余談 9
  • 11. Copyright © 2014 Sansan, Inc. All rights reserved. > 余談 10 ちゃんと徳島に 帰ることができるのか!?
  • 12. Copyright © 2014 Sansan, Inc. All rights reserved. > 余談 11 ちゃんと徳島に 帰ることができるのか!? 徳島空港から家まで車なので呑めない… 飛ばないとわかっていれば呑める。。。
  • 13. Copyright © 2014 Sansan, Inc. All rights reserved. なぜ Robotium? 18
  • 14. Copyright © 2014 Sansan, Inc. All rights reserved. > スマホアプリの自動テストライブラリ 19 - Android 専用 - Robotium - monkeyrunner - Espresso - UI Automater など… - iOS 専用 - KIF - Kiwi - など… - ハイブリッド - Appium - Calabash - MonkeyTALK - など…
  • 15. Copyright © 2014 Sansan, Inc. All rights reserved. > Robotium にした理由 20 • Android 実装と同じ Java 言語で記述 • アプリケーション内部のオブジェクトを参照できる • UI に見えない内部の値、Activity の getter を呼べる SharedPreference の値 • DB にもアクセスできるので期待値を動的生成できる → サーバ DB 状態の変更にも強い • ただし、リリースビルドでは使えない • リリースバイナリでも使いたい&iOS / Android のテストコード共通化のため、 Appium によるテストコード記述も実践中 ※Appium は、アプリ内部のオブジェクトは参照できない • 導入当時(2014/05)、最終局面で Espresso とどっちにす るか悩んだ。 •
  • 16. Copyright © 2014 Sansan, Inc. All rights reserved. > Robotium にした理由 21 • Android 実装と同じ Java 言語で記述 • アプリケーション内部のオブジェクトを参照できる • UI に見えない内部の値、Activity の getter を呼べる SharedPreference の値 • DB にもアクセスできるので期待値を動的生成できる → サーバ DB 状態の変更にも強い • ただし、リリースビルドでは使えない • リリースバイナリでも使いたい&iOS / Android のテストコード共通化のため、 Appium によるテストコード記述も実践中 ※Appium は、アプリ内部のオブジェクトは参照できない • 導入当時(2014/05)、最終局面で Espresso とどっちにす るか悩んだ。 • 今となっては、Espresso にしておけば良かったと思う…。
  • 17. Copyright © 2014 Sansan, Inc. All rights reserved. テスト記述のポリシー 22
  • 18. Copyright © 2014 Sansan, Inc. All rights reserved. > テスト記述のポリシー 23 • ライブラリとテストコードの結合度を下げる • まずは、浅く・広く記述する • あきらめも大事 • 待ち方のコツ • どの環境でも動くように
  • 19. Copyright © 2014 Sansan, Inc. All rights reserved. テスト記述のポリシー ライブラリとテストコードの結合度を下げる 24
  • 20. Copyright © 2014 Sansan, Inc. All rights reserved. > ライブラリとテストコードの結合度を下げる 25 • 目的 • テストコードの可読性を上げる • ライブラリに依存しないテストコードにする • ライブラリにない機能追加ができる • 実行ログの記録 • エラー時にスクリーンショットを残すようにする • 理由 • ライブラリの API 変更, ライブラリの置き換えでテスト コードの修正が伴わない • 失敗時の原因調査がしやすい
  • 21. Copyright © 2014 Sansan, Inc. All rights reserved. > Robotium Getting Started は密結合 26 • https://github.com/RobotiumTech/robotium/wiki/Getting-Started • あくまでも API の使い方と思っておきましょう。 • 【対応】テストの基底クラスなどを作って clickOnText(String)を作り、 テストコードではそちらを呼び出す テストコードと ライブラリが密結合
  • 22. Copyright © 2014 Sansan, Inc. All rights reserved. > ライブラリの依存性排除 27 • ライブラリの隠蔽 Robotium 版
  • 23. Copyright © 2014 Sansan, Inc. All rights reserved. > ライブラリを置き換えるとしても… 28 • テストコードを修正することなく、対応可能 Robotium 版 Espresso 版 ※Robotium と Espresso は同じ InstrumentationTest なので、共存可能!!
  • 24. Copyright © 2014 Sansan, Inc. All rights reserved. テスト記述のポリシー まずは、広く・浅く記述する 29
  • 25. Copyright © 2014 Sansan, Inc. All rights reserved. > まずは、広く・浅く記述する 30 • 背景 • スマホアプリの UI や機能は比較的すぐ見直しが入る • 使えないと致命的な機能と、そうでない機能がある • 対策 • まずは、費用対効果の高い、主要機能のワンパスを通す • ログイン → 検索・閲覧・編集 → ログアウト あたり • ログイン時のバリデートチェックよりも、ログインできる かの方が重要 • 慣れてきたら、各画面の詳細テストへ
  • 26. Copyright © 2014 Sansan, Inc. All rights reserved. テスト記述のポリシー あきらめも大事 31
  • 27. Copyright © 2014 Sansan, Inc. All rights reserved. > あきらめも大事 32 • 別アプリと連携するものなどは手動で確認へ • 例) • カメラのピントが合っていること • 住所文字列をタップすると地図アプリが起動し、その場所 にピンが立っていること • URL をタップするとブラウザが起動し、ページが正しく表 示されること • 場合によってはアプリ選択画面が出る • 起動後の状態判定は目視の方が容易 • こういう所の自動化を頑張るのは費用対効果的に微妙…
  • 28. Copyright © 2014 Sansan, Inc. All rights reserved. > あきらめも大事 33 • 例)URL をタップするとブラウザが開く アプリ ブラウザ
  • 29. Copyright © 2014 Sansan, Inc. All rights reserved. > あきらめも大事(だけど、知見共有) 34 • 例)URL をタップするとブラウザが開く • Robotium や Espresso は UI 操作により別アプリが開 くと、その後どうしようもなくなる… • 理由 • アプリケーションの操作であって、端末の操作ではない • 対応策 • UI Automaterと 併用する • ※但し、minSdkVersion に注意 • Espresso の Intent チェックを使う
  • 30. Copyright © 2014 Sansan, Inc. All rights reserved. > あきらめも大事:メールチェック編 35 • 別アプリ…とはいえ、送られてきたメールをチェックする なら、MailCatcher & MailCatcher API で実現可能 • MailCatcher • SMTPサーバを経由したメールをブラウザから 確認できる。開発中の誤送信防止にも役立つ。 • http://mailcatcher.me/ • MailCatcher API • /messages • /messages/:id.json • /messages/:id.html • /messages/:id.plain など
  • 31. Copyright © 2014 Sansan, Inc. All rights reserved. > あきらめも大事:メールチェック編 36 • Retrofit & RxAndroid を使えば容易 • 指定したタイトルのメールが届いているか? • 特定のメールを開いて本文の URL をタップ (メール本文から URL を抽出して、OkHttpClient など で post する) ※Message モデルのプロパティは 一部しか宣言していない
  • 32. Copyright © 2014 Sansan, Inc. All rights reserved. テスト記述のポリシー 待ち方のコツ 37
  • 33. Copyright © 2014 Sansan, Inc. All rights reserved. > 待ち方のコツ 38 • テストコードでは SLEEP 関数は使わない • 自作関数やライブラリのラッパー関数内で使うのはアリ • 端末、実行環境、サーバの状態によって待ち時間は違 う! • どうするか? → wait* 関数を使う • ライブラリ関数の例 • waitForActivity • waitForFragmentByTag • waitForCondition
  • 34. Copyright © 2014 Sansan, Inc. All rights reserved. テスト記述のポリシー どの環境でも動くように 39
  • 35. Copyright © 2014 Sansan, Inc. All rights reserved. > どの環境でも動くように 40 • 期待値の動的生成 • エミュレータ判定 • 多言語対応
  • 36. Copyright © 2014 Sansan, Inc. All rights reserved. > どの環境でも動くように 41 • 期待値の動的生成 • エミュレータ判定 • 多言語対応
  • 37. Copyright © 2014 Sansan, Inc. All rights reserved. > 期待値の動的生成 42 • 弊社の開発事情によるところかも知れないですが… 「開発用」「ステージング」「本番」でデータセット が異なります。 • 検索結果などが保証されるためにも • ローカル DB を参照して期待値を動的生成する • ログイン後にテストコードでデータを作る操作を行う • このデータに対し、検索・編集・削除などのテストを行う • ノイズにならないためにログアウト前に作ったデータを 削除する操作を行う • これにより、データ非依存なテストケースになります
  • 38. Copyright © 2014 Sansan, Inc. All rights reserved. > 期待値の動的生成 43 実際のテストコード myName : ”山田賢治” users : {Uesr(阿部拓真), User(浅野緋美) , User(葉加瀬万太郎), …} ※ログインユーザを変えると、myName は違う値 ※ログイン企業を変えると、users も違うデータセットが返る
  • 39. Copyright © 2014 Sansan, Inc. All rights reserved. > どの環境でも動くように 44 • 期待値の動的生成 • エミュレータ判定 • 多言語対応
  • 40. Copyright © 2014 Sansan, Inc. All rights reserved. > どの環境でも動くように 45 • エミュレータかどうかの判定 • 実機じゃないと確認できない項目(カメラなど)は このフラグを見てスキップさせる
  • 41. Copyright © 2014 Sansan, Inc. All rights reserved. > どの環境でも動くように 46 • 期待値の動的生成 • エミュレータ判定 • 多言語対応
  • 42. Copyright © 2014 Sansan, Inc. All rights reserved. > 多言語対応 47 • https://github.com/RobotiumTech/robotium/wiki/Getting-Started • ↑あくまでも API の使い方と思っておきましょう。 • 【対応】 • Robotium なら、clickOnText(@StringRes int) を作って、 getString(…) • Espresso なら、withText に @StringRes int を渡す 日本語の時文言が違えば、 このコードはエラーになる
  • 44. Copyright © 2014 Sansan, Inc. All rights reserved. > 実行環境 49 • 基本的に実機で実行 • 昔は Jenkins & エミュレータでやっていた • テストが増え、CI 環境を長時間(2h 以上)占有する& エミュレータが不安定なためやめた • jacoco でカバレッジ計測 • どこのテストが足りてないかわかる • 開発環境 DB で実施 • 固定のデータセット、特定のデータを使いたい場合は Docker にて特定のデータセットを持つ DB を用意
  • 45. Copyright © 2014 Sansan, Inc. All rights reserved. > Jacoco のカバレッジレポート 50 • html で出力される(抜粋) • • 2016/02時点で 59% をカバーできている
  • 46. Copyright © 2014 Sansan, Inc. All rights reserved. > Jacoco のカバレッジレポート 51 • html で出力される • 通っていないパスがよくわかる
  • 47. Copyright © 2014 Sansan, Inc. All rights reserved. > Docker を使った固定データ環境 52 • 開発環境(データや件数が他者によって書き換えられる可能性があ る)でもテストが行えるようにしているが、以下のニーズ がある • パフォーマンス計測がしたい(ので、件数固定じゃないとダメ) • テスト用に特定のユーザセットが欲しい • 例)アカウント停止ユーザのエラーチェック • アプリからは設定できないデータを持つ名刺が欲しい • 例)名刺交換日未設定 • ローカル DB をアテにしない期待値を書きたい • 例)山田賢治さんは○○枚名刺を持っている • Docker で環境(API&DB)のイメージを持っておき、テス トコードから環境準備&片付けを行う
  • 48. Copyright © 2014 Sansan, Inc. All rights reserved. > Docker を使った固定データ環境 53 • 事前準備 • Jenkins に環境起動用のジョブ / 環境破棄用のを作成 • テスト実行時 • setup() で 環境起動用の Jenkins ジョブを Jenkins WebAPI を用いて実行 • アプリの API の向き先を差し替える • テスト実行中 • 起動した環境に接続してテストを実施 • テスト終了時 • tearDown() で環境破棄用の Jenkins ジョブを Jenkins WebAPI を用いて実行 • API の向き先を戻す
  • 50. Copyright © 2014 Sansan, Inc. All rights reserved. > デモ動画 55 • 2014/11 時点の動画です • http://youtu.be/scY_RPgfxeY • 4分ぐらいありますが、発表時間の都合上ちょっとだ け…
  • 52. Copyright © 2014 Sansan, Inc. All rights reserved. > 自動テスト導入してみて 57 • デグレードがないことを容易に確認できる • メンテは思ったほど大変じゃない • コツ:1行で書ける画面操作も clickSendButton() など の関数にして共通利用するとよい • テストでしっかりカバーしていれば、大規模なリファ クタリングも安心! • これから、通信ライブラリ・カメラ API・デザインパーツの差し替 え・DB の置き換え?などが控えている • モックを使わないので、サーバの動作確認にもなる
  • 54. Copyright © 2014 Sansan, Inc. All rights reserved. > 推移時間(イメージ) 59 • パフォーマンス改善の結果確認、性能デグレの検出が できる(かも?) • 通信状態やサーバ状態に大きく左右される気がする… 0 2 4 6 8 10 12 2015/2/27 2015/2/28 2015/3/1 2015/3/2 2015/3/3 2015/3/4 2015/3/5 2015/3/6 ログイン処理 初回同期 名刺画像送信 詳細データ取得 高画質画像データ取得 手動同期処理
  • 55. Copyright © 2014 Sansan, Inc. All rights reserved. > 通信回数の分析 60 - 呼び出し毎に API名と実行時間を csv ファイルに出力 - Excel のピボットテーブルで集計 - iOS / Android で同じ仕組みを入れれば、 同じ操作で API 呼び出しの違いがわかる! そんなに呼び 出す必要ある の…? サーバ負荷削減のためのボトルネック分析が容易になる Excelマクロ
  • 56. Copyright © 2014 Sansan, Inc. All rights reserved. > 通信回数の分析(推移) 61 - さっきのデータを実行毎に集計する 呼び出し回数削減施策導入
  • 57. Copyright © 2014 Sansan, Inc. All rights reserved. > スクショ一覧 62 画面名→ 画面名→ 画面名→ Nexus4 Nexus5 デザイン指示画像(期待値) ※元サイズが違うけど、 今は同じサイズで 表示されている 目で比較する! デザイナのチェックや 意図しないレイアウト崩れの 確認が楽になりました
  • 59. Copyright © 2014 Sansan, Inc. All rights reserved. > これから 64 • Espresso も併用して、Robotium ではテストしづら かった部分のテスト(Intent のチェックなど)を行う • UI Automater も併用して、 • アクティビティを保持しない設定にする • 最小化&復帰後の画面状態のテスト • AWS Device Farm を使って、所有していない端末 でのテストも行う
  • 60. Copyright © 2014 Sansan, Inc. All rights reserved. > DroidKaigi 2016 落ちたけど… 65 • JAWS DAYS 2016 出ます! http://jawsdays2016.jaws-ug.jp/speaker/409 http://jawsdays2016.jaws-ug.jp/
  • 61. Copyright © 2014 Sansan, Inc. All rights reserved. > Device Farm を使ったスマホアプリの自動テスト 66 http://jawsdays2016.jaws-ug.jp/speaker/409