Android UI自動化テスト

9999 ワード

原文住所:Automating User Interface Testing on Android
紹介する
AndroidのTesting Support libraryには、主にAndroidアプリケーションのブラックボックス自動化テストに使用されるUI自動化フレームワークが含まれており、API 18では、開発者がアプリケーションUIを構成するコントロール上でユーザーの操作をシミュレートすることができる.
このチュートリアルでは、このテストフレームワークの使用方法と、作成と実行方法を説明します.デフォルトの計算機アプリケーションに対して基本UIテストを行います.
前提条件
使用前に、最新バージョンのAndroid Studio-Android 4.3以降のデバイスまたはシミュレータ-JUnitの基本概念が必要です.
1.依存項目のインストール
あなたのプロジェクトでUIを使用してテストフレームワークを自動化できるようにします.あなたのプロジェクトのappディレクトリの下でbuildを編集します.gradle.次の依存項目を追加します.
androidTestCompile 'com.android.support.test:runner:0.2'
androidTestCompile 'com.android.support.test:rules:0.2'
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.0'

「Sync Now」のボタンが画面に表示され、クリックすると次のようなエラーが表示されます.
Install Repository and sync projectリンクをクリックすると、Android Support Repositoryがインストールされます.
appcompat-v 7のライブラリを使用し、バージョンが22.1.1の場合は、アプリケーションとテストしたアプリケーションが同じバージョンのcom.android.support:support-annotationsを使用していることを確認するために、依存を追加する必要があります.
androidTestCompile 'com.android.support:support-annotations:22.1.1'

さらに、Android Studioのバグのため、packagingOptionsを使用してLICENSEを実行する必要があります.txtのファイルなので、テストを実行しようとすると、次のような失敗情報が表示されます.
Execution failed for task ':app:packageDebugAndroidTest'.
Duplicate files copied in APK LICENSE.txt

File 1: ~/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.1/860340562250678d1a344907ac75754e259cdb14/hamcrest-core-1.1.jar
File 2: ~/.gradle/caches/modules-2/files-2.1/junit/junit-dep/4.10/64417b3bafdecd366afa514bd5beeae6c1f85ece/junit-dep-4.10.jar

あなたのbuild.gradleファイルの下部には、次のセクションが追加されています.
android {
    packagingOptions {
        exclude 'LICENSE.txt'
    }
}

2.テストクラスの作成
新しいテストクラスを作成し、android Testというディレクトリの下にCalculatorTesterを作成します.JAvadeファイル.UI自動化テスト例を作成するには、クラスがCalculatorTesterを継承する必要があります.
Alt+Insertキーを押し、SetUpメソッドをクリックしてInstrumentationTestCaseメソッドを書き換えます.
再びAlt+Insertを押してTest Methodをクリックして新しいテスト方法を生成します.名前はsetUptestAddです.このクラスは次のようになります.
public class CalculatorTester extends InstrumentationTestCase{

    @Override
    public void setUp() throws Exception {

    }

    public void testAdd() throws Exception {

    }
}

LauncherのUIの表示
Androidデバイスをパソコンにリンクし、デバイスのホームキーをクリックしてデスクトップに戻ります.
コンピュータに戻って、ファイルブラウザまたは端末を使用してAndroid SDKをインストールするパスの下に入り、次はtoolsディレクトリの下に入り、uiautomatorviewerを起動します.UI Automator Viewを起動します.画面は次のように表示されます.
携帯電話のようなボタンをクリックしてAndroidデバイスをスクリーンショットし、さっきのスクリーンショットがインタラクティブであることに注意してください.下部のAppアイコンをクリックすると、右側のNode Detailエリアで、選択エリアの詳細な変数が以下に表示されます.
画面上のアプリケーションとインタラクティブになるためには、UI自動化テストフレームワークには、CalculatorTesterまたはtextを使用して一意に識別する唯一の識別子が必要です.
ご覧のように、アプリケーションのアイコンにはcontent-descはありませんが、classがあります.この値を記録します.次のステップで使用するからです.
今、Androidデバイスを手に取って、画面のアプリケーションアイコンをクリックして、デバイスがインストールしているすべてのアプリケーションインタフェースに入ります.UI Automater Viewを使用して別のスクリーンショットを取得します.コンピュータアプリケーションのテストを書くため、コンピュータアイコンをクリックして詳細なインタフェースを表示します.
このとき、textの内容は空ですが、content-descの内容はCalculatorです.同じようにこれも記録します.
Androidデバイスが異なるlauncherまたは異なるAndroidバージョンを実行している場合、スクリーンショットとnode detailが異なる場合は、オペレーティングシステムに一致するためにコードを変更する必要があります.
4.試験環境の準備
Android Studioに戻って、content-descメソッドにコードを追加します.名前のヒントのように、textメソッドはあなたのテスト環境を準備するために使用されます.言い換えれば、本当にテストを行う前に特に完了する必要がある内容を実行します.
コードシミュレーションを作成する前にAndroidデバイスで行った操作:1.ホームキーを押すメイン画面2に戻る.アプリケーションアイコンをクリックしてすべてのアプリケーションに入ります.Calculatorアプリをクリックして起動
あなたのクラスでは、Androidデバイスを表すsetUpというsetUpタイプのメンバー変数を宣言し、UI操作をシミュレートします.
private UiDevice device;
deviceメソッドでは、UiDeviceメソッドを呼び出すことによってdeviceを初期化し、setUpのインスタンスパラメータを以下のように渡す
device = UiDevice.getInstance(getInstrumentation());
UiDevice.getinstanceメソッドを呼び出してデバイスを押すホームキーをシミュレートする
device.pressHome()

次に、アプリケーションのアイコン上でクリックイベントをシミュレートする必要がありますが、すぐにはできません.Androidデバイスはインタフェースをロードするのにしばらくかかります.画面に表示される前にアプリケーションのアイコンをクリックしようとすると、runtimeの異常が投げ出されます.
何かが起こるのを待つためには、InstrumentationインスタンスオブジェクトのpressHomeメソッドを呼び出し、UiDeviceメソッドを使用してアプリケーションを待つアイコンを画面に表示する必要があります.
アプリケーションのアイコンを識別するために、waitメソッドを使用し、パラメータとしてAppsを渡す.待ち時間の最大ミリ秒数を説明する必要があります.ここでは3000に設定します.結果は次のコードのようです.
// Wait for the Apps icon to show up on the screen
device.wait(Until.hasObject(By.desc("Apps")), 3000);

アプリケーションアイコンの参照を取得するには、Until.hasObjectメソッドを使用します.アプリケーションアイコンに来るアプリケーションを取得すると、By.desメソッドを呼び出してクリックをシミュレートします.
UiObject2 appsButton = device.findObject(By.desc("Apps"));
appsButton.click();

前と同じように、しばらく待って、Calculatorのアイコンを画面に表示させます.CalculatorのアイコンがfindObject変数で一意に認識されるのを見ることができます.clickメソッドを呼び出し、textパラメータを渡してアイコンを見つけることができます.
// Wait for the Calculator icon to show up on the screen
device.wait(Until.hasObject(By.text("Calculator")), 3000);
By.textCalculatorの方法でCalculatorアイコンの参照を取得し、クリックをシミュレートします.
UiObject2 calculatorApp = device.findObject(By.text("Calculator"));
calculatorApp.click();

5.CalculatorのUIの表示
AndroidデバイスでCalculatorアプリケーションを実行し、UI Autoamtor Viewerで確認し、スクリーンショットを取得した後、これらのボタンをクリックして、彼らを唯一認識できるかどうかを確認します.
今回のテスト例では、操作計算機を9+9と計算し、結果が18であるかどうかを確認します.これは、9,+および=をどのように識別するかを知る必要があることを意味します.
私のデバイスでは、次の情報を収集します.-数値キーはtext値に一致します-+と=content-desc値を使用して、plusとequals-戻り値はEditTextコントロールに表示されます.
異なるバージョンのCalculatorアプリケーションを使用すると、これらの値はデバイスに異なる可能性があります.
6.テストケースの作成
前の手順では、findObjectを使用してclickまたはfindObjectを同時に使用して画面上の任意のオブジェクト参照を取得することを学びました.By.textの方法でクリックオブジェクトをシミュレートし、By.descの方法に次のコードを追加して、9+9=の操作を行うことも知っています.
// Wait till the Calculator's buttons are on the screen
device.wait(Until.hasObject(By.text("9")), 3000);

// Select the button for 9
UiObject2 buttonNine = device.findObject(By.text("9"));
buttonNine.click();

// Select the button for +
UiObject2 buttonPlus = device.findObject(By.desc("plus"));
buttonPlus.click();

// Press 9 again as we are calculating 9+9
buttonNine.click();

// Select the button for =
UiObject2 buttonEquals = device.findObject(By.desc("equals"));
buttonEquals.click();

この場合、結果を待つ必要がありますが、ここでclickを使用することはできません.画面にはCalculatorTesterが結果を含んでいるため、逆にtestAddの方法で決済が完了するのを待ってから、最大の待ち時間として3000 msを設定する必要があります.
device.waitForIdle(3000);
Until.hasObjectおよびEditTextメソッドを使用して、waitForIdleオブジェクトの参照を取得し、その参照を取得すると、findObjectメソッドを呼び出して計算結果を取得できます.
UiObject2 resultText = device.findObject(By.clazz("android.widget.EditText"));
String result = resultText.getText();

最後に、By.clazzを使用して結果が18であるかどうかを検証します.
assertTrue(result.equals("18"));

あなたのテスト例は完成しても
7試験例の実行
テストを実行するには、Android StudioのツールバードロップダウンボックスでEditTextを選択し、右側で再生ボタンをクリックする必要があります.
コンパイルが完了すると、テストが実行され、正常に実行され、テスト例が実行されると、Androidデバイスが自動化されていることがわかります.
結論
今回のチュートリアルでは、UIの自動化テストフレームワークとUI Automator Viewを使用してUIテストを作成する方法を学びました.Android Studioを使用してテストを行うときの簡単さも見ることができます.私たちがテストしたことはかなり簡単なアプリケーションですが、ここで学んだ内容を適用してAndroidアプリケーションの大部分をテストすることができます.
Android Developers websitesでtesting support libraryについてもっと勉強できます