スイートをセットアップする

Tradefed のスイートとは、テスト全体の実行を進める共通のテストランナーのもとで、複数のテストが実行される設定を意味します。

Tradefed のスイートは ITestSuite クラスを介して実行され、実行方法に関係なくテストの追加と削除ができます。

定義

  • スイート: 同様のトップレベル設定のもとで実行するように設定され、1 回の呼び出しで結果を報告するテスト モジュールのセット。
  • トップレベル設定: いずれかのテスト モジュールを実行する前にデバイスに適用される設定。
  • メイン設定: 実行すべきモジュールと使用すべきトップレベル設定を記述した、スイートレベルの Tradefed XML 設定。
  • モジュール レベル設定: モジュールを実行する直前にデバイスに適用される設定。これらはモジュール固有の設定とも呼ばれます。
  • モジュール設定: AndroidTest.xml Tradefed XML 設定。モジュールと、行う必要のあるモジュール レベル設定を記述します。
  • モジュール: 設定ステップ(モジュール レベル設定)、テスト実行ステップ、破棄ステップからなるテストユニット。
  • モジュール内再試行: モジュール内のハーネスによる自動再試行。
  • スイート再試行: 以前不合格になったスイートのテストの完全な再実行。

ITestSuite の構造

Tradefed の ITestSuite とは、スイート実行共通の基本クラスを指します。すべての主要なテストスイート、具体的には Android 互換性テストスイート(CTS)Android ベンダー テストスイート(VTS)で共有され、すべてのスイートにわたって一貫した実行エクスペリエンスを提供します。

ITestSuite をスイート ランナーと呼ぶこともあります。

スイート ランナーは実行時に次のステップを進みます。

  1. モジュールの設定を読み込み、実行するセットを決定します。
  2. 各モジュールを実行します。

    1. モジュール レベル設定を実行します。
    2. モジュール テストを実行します。
    3. モジュール レベルの破棄を実行します。
  3. 結果を報告します。

トップレベル設定

Tradefed の観点からは、ITestSuite は単に別のテストです。複雑なテストではあるものの、他の IRemoteTest のようなテストと同じです。そのため、Tradefed 設定でスイート ランナーを指定する場合、Tradefed は通常の設定パターンに従い、build_providertarget_preparer、テスト(この場合はスイート)、target_cleaner を実行します。

ITestSuite を含む Tradefed 設定のこのシーケンスがトップレベル設定です。

例:

<configuration description="Common config for Compatibility suites">

    <build_provider class="com.android.compatibility.common.tradefed.build.CompatibilityBuildProvider" />
    <!-- Setup applied before the suite: so everything running in the suite will
    have this setup beforehand -->
    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
        <option name="run-command" value="settings put global package_verifier_enable 0" />
        <option name="teardown-command" value="settings put global package_verifier_enable 1"/>
    </target_preparer>

    <!-- Our ITestSuite implementation -->
    <test class="com.android.compatibility.common.tradefed.testtype.suite.CompatibilityTestSuite" />

    <result_reporter class="com.android.compatibility.common.tradefed.result.ConsoleReporter" />
</configuration>

モジュール メタデータ

モジュール メタデータとは、テスト モジュール AndroidTest.xml に指定する追加情報のことを言います。このメタデータにより、モジュールに関する追加情報を指定し、モジュールをフィルタリングできます。

メタデータの例:

<option name="config-descriptor:metadata" key="component" value="framework" />
<option name="config-descriptor:metadata" key="parameter" value="instant_app" />

メタデータのフィルタの例:

--module-metadata-include-filter component=framework

上記の例は、フレームワークをコンポーネント メタデータとして持つすべてのモジュールを実行します。

完全な AndroidTest.xml の例:

<configuration description="Config for CTS Gesture test cases">
    <option name="test-suite-tag" value="cts" />
    <!-- Metadata -->
    <option name="config-descriptor:metadata" key="component" value="framework" />
    <option name="config-descriptor:metadata" key="parameter" value="instant_app" />
    <!-- End: metadata -->
    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
        <option name="cleanup-apks" value="true" />
        <option name="test-file-name" value="CtsGestureTestCases.apk" />
    </target_preparer>
    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
        <option name="package" value="android.gesture.cts" />
        <option name="runtime-hint" value="10m50s" />
    </test>
</configuration>

パラメータ化されたモジュール

parameter は特別なメタデータ タイプです。

<option name="config-descriptor:metadata" key="parameter" value="instant_app" />

このメタデータは、標準のアプリモードではなく、Instant App のような別のモードでモジュールを実行する必要があることを示します。

利用可能なモードまたはパラメータはすべて ModuleParameters に記述され、関連するハンドラは ModuleParametersHelper に示されています。これにより、特定のモードで実行するようにモジュール設定を変更できます。

たとえば Instant App モードにすれば、APK のインストールが強制的に Instant モードになります。

パラメータ化を行うには、コマンドラインで次のようにして有効にする必要があります。

--enable-parameterized-modules

単一の特定のモードを次のようにして実行することも可能です。

--enable-parameterized-modules --module-parameter <Mode>

--enable-parameterized-modules --module-parameter INSTANT_APP

パラメータ化されたバージョンのモジュールを実行すると、結果はパラメータ化されたモジュール名で報告されます。たとえば、ベースの CtsGestureTestCases に対して CtsGestureTestCases[instant] と報告されます。