この記事はリクルートテクノロジーズアドベントカレンダー24日目の記事です.
私が所属するスマートデバイスグループで行っている
Androidアプリ開発における「自動テスト」の試みについて紹介します。
UiAutomatorを用いた全自動モンキーテストツールの開発
画面内のUiオブジェクトを自動解析することで、
クラッシュ検知を目的とした「適用コスト0でアプリの品質向上に寄与できる」自動テストツールを開発しています。
この記事ではそのツールについて紹介させていただきます。
UiAutomatorについて
本ツールは [UiAutomator]
(http://developer.android.com/tools/help/uiautomator/index.html)という、Android SDKに含まれているテスト自動化ツールの機能を主に用いて作っています。
UiAutomatorの機能としては画面上のUI情報の取得、各種タップ/ロングタップ/スワイプなどのイベントのシミュレート、ハードキーの押下や文字入力、スクリーンショットの撮影などを提供しています。
UiAutomator参考情報
UiAutomatorについて下記ページが大変勉強になりました。
- @IT-Android SDK標準の何でもテストツールuiautomatorの基本的な使い方 (1/3)
- adakoda-はじめてのuiautomator
- Qiita-uiautomatorでandroidスマホ動作テストしましょう。
ツールが提供する2種類の再現情報
クラッシュ検知を目的にツールはアプリ内を自動回遊するのですが、
2種類の情報をクラッシュレポートとしてサーバ上に送信し、開発チームに不具合の再現情報として提供しています。
再現情報①: クラッシュ直前までのスクリーンショット
アプリ内の自動回遊はイベントエミュレートの組み合わせによって行われるのですが、
イベントエミュレート直前にスクリーンショットを撮り、画面内の「このオブジェクトをタップするよ」といった
エミューレート情報を描画した上で画像を保存しておきます。
そして、クラッシュ検知時に、直前の数枚の画像をサーバに送信しチームに再現情報を提供します。
下記イメージとなります。
1枚目: ここから回遊開始 | 2枚目: この画面のここをタップ | 3枚目: そしたらクラッシュ発生! |
---|---|---|
再現情報②: スタックトレース
2つめの再現情報として、視覚的な再現情報と合わせてソースコードレベルでの情報(スタックトレース)もクラッシュ検知時にサーバに送信しています。
ツール実行中は常にアプリのプロセスを監視しており、アプリが落ちた際にログキャットへの出力を出力することで実現しています。
下記、管理画面のキャプチャとなります。
開発背景と今後について
開発背景について
開発背景として、Robotium, Espresso などのUIテストツールの他社での活用事例をよく耳にしていました。
うちの組織でも上記のようなUIテストツールを使い品質を担保した上でスピーディな開発ができないか?と考えていました。
しかし、導入を具体的に検討し始めると、
・UIテストツール導入に伴う、テストケース実装の初期工数
・テストケースのメンテナンス工数
といった導入コストに見合う品質改善/開発スピードUPのメリットがイメージできなかったため組織ではUIテストツールの導入を見送っていました。
上記のような流れから、
・導入コストがかからない
・品質向上もしくは開発生産性向上に寄与できる
自動テストの形を模索しており、試行錯誤の結果、本ツールの開発に繋がりました。
今後について
社内での本ツール評価では約20アプリに適用し、40種類以上の改修対象のクラッシュを検知し品質向上に繋がりました。
また、Android5.0で採用されたARTの各アプリにおける動作確認(モンキーテスト)の際にも活躍しました。
まだまだ課題は山積みですが、引き続きツールを磨きこんでいく予定です。
Ui情報の識別した後のエミューレートするオブジェクト選択アルゴリズムや
画面ロック解除、ログインが必要なアプリに対する対応、ネットワーク面での制御など話したいことはまだありますが、
続きは来年1月にもう少し詳しい紹介をさせていただく予定です。
本記事の内容について私の説明が下手で伝わらなかったとしても
リクルートテクノロジーズが新しい試みに寛容な組織ということが伝われば幸いです。
以上、アドベントカレンダー24日目の記事となります。
[PR]リクルートテクノロジーズはエンジニアを募集しています。
明日は最終回です!