複雑なテスト構成

一部のテスト モジュールでは、テストケース自体の中で実行できない、カスタマイズされたセットアップとティアダウンの手順が必要になる場合があります。代表的な例を次に示します。

  • 他の APK をインストールする(テスト apk に追加して)
  • 一部のファイルをデバイスにプッシュする
  • コマンドを実行する(例: adb shell pm ...)

これまで、コンポーネント チームは上記のようなタスクを実行するためにホスト側のテストを作成する方法に頼りがちでしたが、この方法には Trade Federation ハーネスの理解が必要です。また、一般的にはテスト モジュールの複雑さが増大します。

そこで、このようなタスクをサポートするために、CTS から借用されたテスト モジュール構成の概念が導入されました。上記のような一般的なタスクリストは、わずか数行の構成で実現できます。柔軟性を最大限に高めるには、ITargetPreparerITargetCleaner で定義された独自のターゲット作成ツールを実装し、独自のテスト モジュール構成で使用するように設定することもできます。

テスト モジュールのテスト モジュール構成は、最上位モジュールのソースフォルダに追加される必須の XML ファイル(「AndroidTest.xml」)です。この XML は、Trade Federation テスト自動化ハーネスで使用される構成ファイルの形式に従います。 現在、テスト モジュール構成で処理される主要タグは「target_preparer」と「test」です。

ターゲット作成ツール

「target_preparer」タグは、その名前が示すように、セットアップ方法を提供するターゲット作成ツール(ITargetPreparer を参照)を定義します。これは、テスト モジュールがテストで実行される前に呼び出されます。「target_preparer」タグで参照されるクラスが ITargetCleaner も実装している場合、そのティアダウン メソッドがテスト モジュールの終了後に呼び出されます。

組み込みの共通モジュール構成を使用するには、テスト モジュールの最上位フォルダに新しいファイル「AndroidTest.xml」を追加し、次の内容を含めます。

<?xml version="1.0" encoding="utf-8"?>
<!-- [insert standard AOSP copyright here] -->
<configuration description="Test module config for Foo">
<!-- insert options here -->
</configuration>

たとえば、上記の「insert」コメントに次のオプションタグを追加できます。

    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
        <option name="run-command" value="settings put secure accessibility_enabled 1" />
        <option name="teardown-command" value="settings put secure accessibility_enabled 0" />
    </target_preparer>

オプションで、テストハーネスを次のように設定します。

  1. テスト モジュールが呼び出される前に、シェルコマンド「settings put secure accessibility_enabled 1」をデバイスで実行します。
  2. テスト モジュールが終了したら、シェルコマンド「settings put secure accessibility_enabled 0」を実行します。

この例では、テスト モジュールの実行前または実行後にユーザー補助機能をそれぞれ有効または無効にしています。簡単な例を示していますが、「option」タグの使用方法について詳しく説明します。上記のように、タグには name、value の 2 つの属性を指定できます。name 属性は、作成ツールが提供するオプションのいずれかを参照する必要があります。

value フィールドの正確な目的は、作成ツールがオプションを定義する方法に依存します。文字列、数値、ブール値、ファイルパスなどです。一般的なターゲット作成ツール 3 つについて、概要を以下に示します。

  • クラス名: PushFilePreparer

    • 省略名: push-file
    • 機能: テストケース フォルダ内の任意のファイルをデバイス上の宛先にプッシュします。
    • :
      • この作成ツールは、フォルダ間、またはファイル間でプッシュできます。つまり、デバイス上のフォルダ下にファイルをプッシュすることはできません。そのフォルダの下の宛先ファイル名も指定する必要があります。
    • オプション:
      • push-file: プッシュ仕様。デバイス上のパスにプッシュするローカル ファイルを指定します。繰り返し可。同じリモートパスにプッシュされるよう複数のファイルが設定されている場合は、最新のファイルがプッシュされます。
      • push: (非推奨)プッシュ仕様。「/path/to/srcfile.txt->/path/to/destfile.txt」または「/path/to/srcfile.txt->/path/to/destdir/」。繰り返し可。このパスは、テスト モジュール ディレクトリまたは出力ディレクトリ自体への相対パスでも指定できます。
      • post-push: すべてのプッシュが試行された後にデバイス上で実行するコマンド(「adb shell <your command>」)。一般的な使用例は、権限に chmod を使用する場合です。
  • クラス名: InstallApkSetup

    • 省略名: install-apk
    • 機能: 任意の apk ファイルをデバイス上の宛先にプッシュします。
    • オプション:
      • test-file-name: デバイスにインストールする apk の名前。
      • install-arg: pm install コマンドに渡す追加の引数。先頭にダッシュを含めます(例: 「-d」)。繰り返し可。
  • クラス名: RunCommandTargetPreparer

    • 省略名: run-command
    • 機能: テスト モジュールの実行前後に任意のシェルコマンドを実行します。
    • オプション:
      • run-command: adb シェルコマンドを実行します。繰り返し可。
      • teardown-command: ティアダウン フェーズで実行する adb シェルコマンド。 繰り返し可。

テストクラス

テストクラスは、テストの実行に使用する Trade Federation クラスです。

<test class="com.android.tradefed.testtype.AndroidJUnitTest">
  <option name="package" value="android.test.example.helloworld"/>
  <option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
</test>

一般的なテストクラスとして次の 3 つがあります。

  • クラス名: GTest

    • 省略名: gtest
    • 機能: 指定のデバイスでネイティブ テスト パッケージを実行するテスト。
    • オプション:
      • native-test-device-path: ネイティブ テストが配置されているデバイス上のパス。
  • クラス名: InstrumentationTest

    • 省略名: instrumentation
    • 機能: 指定されたデバイスでインストルメンテーション テスト パッケージを実行するテスト
    • オプション:
      • package: 実行する Android テスト アプリケーションのマニフェスト パッケージ名。
      • class: 実行するテストクラスの名前。
      • method: 実行するテストメソッドの名前。
  • クラス名: AndroidJUnitTest

    • 機能: android.support.test.runner.AndroidJUnitRunner を使用して、指定デバイスでインストルメンテーション テスト パッケージを実行するテスト。インストルメンテーション テストを実行する主な方法です。