Help us understand the problem. What is going on with this article?

Android UiAutomatorを用いた「自動テスト」の試み

More than 3 years have passed since last update.

この記事はリクルートテクノロジーズアドベントカレンダー24日目の記事です.

私が所属するスマートデバイスグループで行っている
Androidアプリ開発における「自動テスト」の試みについて紹介します。

UiAutomatorを用いた全自動モンキーテストツールの開発

画面内のUiオブジェクトを自動解析することで、
クラッシュ検知を目的とした「適用コスト0でアプリの品質向上に寄与できる」自動テストツールを開発しています。
この記事ではそのツールについて紹介させていただきます。

UiAutomatorについて

本ツールは UiAutomatorという、Android SDKに含まれているテスト自動化ツールの機能を主に用いて作っています。
UiAutomatorの機能としては画面上のUI情報の取得、各種タップ/ロングタップ/スワイプなどのイベントのシミュレート、ハードキーの押下や文字入力、スクリーンショットの撮影などを提供しています。

UiAutomator参考情報

UiAutomatorについて下記ページが大変勉強になりました。

ツールが提供する2種類の再現情報

クラッシュ検知を目的にツールはアプリ内を自動回遊するのですが、
2種類の情報をクラッシュレポートとしてサーバ上に送信し、開発チームに不具合の再現情報として提供しています。

再現情報①: クラッシュ直前までのスクリーンショット

system概要.PNG

アプリ内の自動回遊はイベントエミュレートの組み合わせによって行われるのですが、
イベントエミュレート直前にスクリーンショットを撮り、画面内の「このオブジェクトをタップするよ」といった
エミューレート情報を描画した上で画像を保存しておきます。

そして、クラッシュ検知時に、直前の数枚の画像をサーバに送信しチームに再現情報を提供します。
下記イメージとなります。

1枚目: ここから回遊開始 2枚目: この画面のここをタップ 3枚目: そしたらクラッシュ発生!
1.png 2.png 3.png

再現情報②: スタックトレース

2つめの再現情報として、視覚的な再現情報と合わせてソースコードレベルでの情報(スタックトレース)もクラッシュ検知時にサーバに送信しています。
ツール実行中は常にアプリのプロセスを監視しており、アプリが落ちた際にログキャットへの出力を出力することで実現しています。
下記、管理画面のキャプチャとなります。

stacktrace1.png

開発背景と今後について

開発背景について

開発背景として、Robotium, Espresso などのUIテストツールの他社での活用事例をよく耳にしていました。
うちの組織でも上記のようなUIテストツールを使い品質を担保した上でスピーディな開発ができないか?と考えていました。

しかし、導入を具体的に検討し始めると、
・UIテストツール導入に伴う、テストケース実装の初期工数
・テストケースのメンテナンス工数
といった導入コストに見合う品質改善/開発スピードUPのメリットがイメージできなかったため組織ではUIテストツールの導入を見送っていました。

上記のような流れから、
・導入コストがかからない
・品質向上もしくは開発生産性向上に寄与できる
自動テストの形を模索しており、試行錯誤の結果、本ツールの開発に繋がりました。

今後について

社内での本ツール評価では約20アプリに適用し、40種類以上の改修対象のクラッシュを検知し品質向上に繋がりました。
また、Android5.0で採用されたARTの各アプリにおける動作確認(モンキーテスト)の際にも活躍しました。
まだまだ課題は山積みですが、引き続きツールを磨きこんでいく予定です。

Ui情報の識別した後のエミューレートするオブジェクト選択アルゴリズムや
画面ロック解除、ログインが必要なアプリに対する対応、ネットワーク面での制御など話したいことはまだありますが、
続きは来年1月にもう少し詳しい紹介をさせていただく予定です。

本記事の内容について私の説明が下手で伝わらなかったとしても
リクルートテクノロジーズが新しい試みに寛容な組織ということが伝われば幸いです。
以上、アドベントカレンダー24日目の記事となります。

[PR]リクルートテクノロジーズはエンジニアを募集しています。

明日は最終回です!

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away