Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

複雑なテスト構成

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

  • 他の 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 属性はオプションの名前を示しますが、さらにコロンで 2 つの部分に分けられます。作成ツールの省略名と、作成ツールが提供する実際のオプション名です。

value フィールドの正確な目的は、作成ツールがオプションを定義する方法に依存します。文字列、数値、ブール値、ファイルパスなどです。上記の例で name が「run-command:run-command」である場合、「run-command」という省略名のターゲット作成ツールによって定義された「run-command」オプションの値を設定することを示します。「run-command:teardown-command」という name の場合、省略名「run-command」を持つ同様のターゲット作成ツールによって定義された「teardown-command」オプションの値を設定することを示します。一般的なターゲット作成ツール 3 つについて、概要を以下に示します。

  • クラス名: PushFilePreparer

    • 省略名: push-file
    • 機能: テストケース フォルダ内の任意のファイルをデバイス上の宛先にプッシュします。
    • :
      • この作成ツールは、フォルダ間、またはファイル間でプッシュできます。つまり、デバイス上のフォルダ下にファイルをプッシュすることはできません。そのフォルダの下の宛先ファイル名も指定する必要があります。
    • オプション:
      • push: push-spec。「/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 を使用して、指定デバイスでインストゥルメンテーション テスト パッケージを実行するテスト。インストゥルメンテーション テストを実行する主な方法です。