Android UIAutomatorTestCase その3
2012/11/16 追加: ビルドまでは完了
2012/11/28 追記: 動きました!
4.2が出た所?で、ドキュメントもいつの間にか変わってました。
http://developer.android.com/intl/ja/tools/testing/testing_ui.html
http://developer.android.com/intl/ja/tools/help/uiautomator/index.html
改めて、紹介すると、HierarchyViewer と MonkeyRunner と似たような位置づけ、という理解でいいようです。
但し、前回も述べたように、MonkeyRunner とはそもそもの仕組みが違うので、
ケースバイケースで使い分けでしょうか?
で、API Level 16 / SDK r21 から使えるよ!とのことです。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
上のドキュメントを要約しておくと、以下のとおりになります。
概要
アプリケーションのテストとは、Activityだけでは充分ではなく、ダイアログやメニュー等もあり、
機能テストだけでは充分ではありません。
機能を操作するのではなく、UIから操作する必要があります。
機能テストにしても、UIテストにしても、「ブラックボックステスト」を行う場合は
プログラムの中身に精通している必要はありません。
適切に役割を分割し、開発をすることで恩恵を受けられます。
しかし、MonkeyRunnerの様な(とは書いてませんが)、形のテストツールでは
実行のタイミングなどにより、エラーになってしまいます。
本ツールでは、テストフレームワークを用いたシナリオをベースにしたテスト方法を提供します。
本ツールを利用して、様々な解像度のテストや、着信や別アプリなどの遷移を行うようなテストを実行する事で
最大限のメリットを得ることができます。
注意点
Text Label または、Contents Description 等を元にアクセスをします。
uiautomatorviewer (Eclipse のデバッグからも起動可能)を元に、上記の値を確認・実装しましょう。
uiautomatorviewer に関しては、特に説明するまでも無さそうなので説明は割愛します。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Eclipse の設定
- テストの記述
- テストのビルド
- テストの実行
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
1. Eclipse の設定
「Java プロジェクト」を作成し、以下のような設定をします。
Junit3 は、Add Library から
android.jar と uiautomator.jar は、自分の対象とする端末のバージョンに依存します。
ANDROID_SDK のディレクトリから、platforms/android-[api level] 等のディレクトリから選択してください。
2.テストの記述
UIAutomatorTestCase : JUnit同様のテストケースクラス
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
UIDevice : MonkeyRunner に似た感じの、端末自身を操作する為のクラス
UISelector : UIを指定する際に使うクラス
UIObject : UI のパーツを表すクラス
UIScrollable: スクロール可能なUIパーツを表すクラス
UICollection: 子要素を持つようなUIのパーツを表すクラス
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
サンプルも乗ってますが、とりあえずは動かす所を目標に持って行ってみましょう。
以下のHOMEボタンを押したり、システムプロパティを持ってくるサンプルを動かしてみましょう。
import android.app.Activity;
import android.os.Bundle;import com.android.uiautomator.core.UiDevice;
import com.android.uiautomator.testrunner.UiAutomatorTestCase;
public class SampleUITest extends UiAutomatorTestCase {
void testSample(){
UiDevice d = getUiDevice();
d.pressHome();
Bundle status = new Bundle();
status.putString("msg", "This is a demo test and I just pressed HOME");
status.putString("product", getUiDevice().getProductName());
status.putInt("dp-width", d.getDisplayWidth());
status.putInt("dp-height", d.getDisplayHeight());
getAutomationSupport().sendStatus(Activity.RESULT_OK, status);
}
}
3.テストのビルド
android uitest-project コマンドを使うようですが、まだ機能していないようです?
また試して再度掲載します。
テストのビルドは、ant を利用して行います。
android uitest-project コマンドを利用すると、build.xml が生成されるので、
この build.xml を利用して、ビルドを実行します。
android uitest-project -n
Target ID は、android list コマンドで取得します。
api レベル16以上のターゲットを選んでください。
Jenkins を利用すると、以下の様な設定になります。
export PATH=/var/lib/jenkins/tools/android-sdk/tools:$PATH
export PATH=/var/lib/jenkins/tools/Ant/ant-1.8.3/bin:$PATH
android create uitest-project -n SampleUITest -p . -t 28
ant build
4.テストの実行
前回の通り、adb push を利用して転送し
コマンドから実行します。
引数が若干増えてます。
$ adb shell uiautomator runtest test.jar -e class SampleUITest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
INSTRUMENTATION_STATUS: class=SampleUITest
INSTRUMENTATION_STATUS: stream=
SampleUITest:
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: test=testSample
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: dp-height=480
INSTRUMENTATION_STATUS: product=google_sdk
INSTRUMENTATION_STATUS: msg=This is a demo test and I just pressed HOME
INSTRUMENTATION_STATUS: dp-width=320
INSTRUMENTATION_STATUS_CODE: -1
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
INSTRUMENTATION_STATUS: class=SampleUITest
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: test=testSample
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_STATUS: stream=
Test results for UiAutomatorTestRunner=.
Time: 1.665OK (1 test)
INSTRUMENTATION_STATUS_CODE: -1
画面の高さなどを取得して、コマンドライン側に受け渡すことに成功しました。
@nowsprinting さんにさき越されてました。
http://nowsprinting.hatenablog.com/entry/2012/11/22/235609
http://nowsprinting.hatenablog.com/entry/2012/11/23/163729
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
上記の手順で行うのが正式な手順のようです。
この手順なら、Jenkins との連携も可能ですね。
と、言うわけで、あんまり進んでないですが、ToDo更新
・テストの詳細な書き方。
# 別に難しい所は無さそうですが
・MonkeyRunner(Easy)との速度比較
・Jenkins