Tradefed のスイートとは、テスト全体の実行を進める共通のテストランナーのもとで、複数のテストが実行される設定を意味します。
Tradefed のスイートは ITestSuite
クラスを介して実行され、実行方法に関係なくテストの追加と削除ができます。
定義
- スイート: 同様のトップレベル設定のもとで実行するように設定され、1 回の呼び出しで結果を報告するテスト モジュールのセット。
- トップレベル設定: いずれかのテスト モジュールを実行する前にデバイスに適用される設定。
- メイン設定: 実行すべきモジュールと使用すべきトップレベル設定を記述した、スイートレベルの Tradefed XML 設定。
- モジュール レベル設定: モジュールを実行する直前にデバイスに適用される設定。これらはモジュール固有の設定とも呼ばれます。
- モジュール設定:
AndroidTest.xml
Tradefed XML 設定。モジュールと、行う必要のあるモジュール レベル設定を記述します。 - モジュール: 設定ステップ(モジュール レベル設定)、テスト実行ステップ、破棄ステップからなるテストユニット。
- モジュール内再試行: モジュール内のハーネスによる自動再試行。
- スイート再試行: 以前不合格になったスイートのテストの完全な再実行。
ITestSuite の構造
Tradefed の ITestSuite
とは、スイート実行共通の基本クラスを指します。すべての主要なテストスイート、具体的には Android 互換性テストスイート(CTS)と Android ベンダー テストスイート(VTS)で共有され、すべてのスイートにわたって一貫した実行エクスペリエンスを提供します。
ITestSuite をスイート ランナーと呼ぶこともあります。
スイート ランナーは実行時に次のステップを進みます。
- モジュールの設定を読み込み、実行するセットを決定します。
各モジュールを実行します。
- モジュール レベル設定を実行します。
- モジュール テストを実行します。
- モジュール レベルの破棄を実行します。
結果を報告します。
トップレベル設定
Tradefed の観点からは、ITestSuite
は単に別のテストです。複雑なテストではあるものの、他の IRemoteTest
のようなテストと同じです。そのため、Tradefed 設定でスイート ランナーを指定する場合、Tradefed は通常の設定パターンに従い、build_provider
、target_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]
と報告されます。