Eine Suite in Tradefed bezieht sich auf eine Einrichtung, bei der mehrere Tests unter einem gemeinsamen Test-Runner ausgeführt werden, der die Gesamtausführung steuert.
In Tradefed werden Suiten über die Klasse ITestSuite
gesteuert. Dadurch können Tests unabhängig davon hinzugefügt und entfernt werden, wie sie ausgeführt werden.
Definitionen
- Suite: Eine Reihe von Testmodulen, die so konfiguriert sind, dass sie unter einer ähnlichen Einrichtung auf oberster Ebene ausgeführt werden, um ihre Ergebnisse unter einem einzigen Aufruf zu melden.
- Einrichtung auf höchster Ebene: Die Einrichtung wird auf die Geräte angewendet, bevor eines der Testmodule ausgeführt wird.
- Hauptkonfiguration: Die Tradefed-XML-Konfiguration auf Suite-Ebene, in der beschrieben wird, welche Module ausgeführt werden sollen und welches Setup auf oberster Ebene verwendet werden soll.
- Einrichtung auf Modulebene: Die Einrichtung wird auf die Geräte angewendet, kurz bevor das Modul ausgeführt wird. Diese werden auch als modulspezifische Einrichtung bezeichnet.
- Modulkonfiguration: Bezieht sich auf die
AndroidTest.xml
Tradefed-XML-Konfiguration, die die Module beschreibt und angibt, welche Einrichtung auf Modulebene erfolgen soll. - Modul: Testeinheit, die aus einem Einrichtungsschritt (Einrichtung auf Modulebene), einem Testausführungsschritt und einem Abbruchschritt besteht.
- Wiederholung innerhalb des Moduls: Automatischer Wiederholungsversuch durch das Harness innerhalb des Moduls.
- Suite-Wiederholung: Die zuvor fehlgeschlagenen Tests der Suite werden noch einmal ausgeführt.
ITestsSuite-Struktur
ITestSuite
in Tradefed ist die gemeinsame Basisklasse, die die Ausführung einer Suite steuert. Sie wird von allen wichtigen Test-Suites gemeinsam genutzt, insbesondere von der Android Compatibility Test Suite (CTS) und der Android Vendor Test Suite (VTS), und sorgt für eine einheitliche Ausführung in allen Suites.
ITestSuite wird manchmal auch als Suite-Runner bezeichnet.
Der Suite-Runner führt bei der Ausführung die folgenden Schritte aus:
- Die Konfiguration des Moduls wird geladen und es wird festgelegt, welcher Satz ausgeführt werden soll.
Führen Sie die einzelnen Module aus:
- Führen Sie die Einrichtung auf Modulebene aus.
- Modultests ausführen
- Führen Sie die Analyse auf Modulebene durch.
Ergebnisse melden
Einrichtung auf höchster Ebene
Aus Tradefed-Sicht ist ITestSuite
nur ein weiterer Test. Es ist ein komplexer Test, aber wie jeder andere IRemoteTest
. Wenn Sie den Suite-Runner in einer Tradefed-Konfiguration angeben, folgt Tradefed dem üblichen Muster der Konfiguration: Ausführen von build_provider
, target_preparer
, Test (in diesem Fall unsere Suite) und target_cleaner
.
Diese Sequenz in der Tradefed-Konfiguration, die ITestSuite
enthält, ist die Einrichtung auf höchster Ebene.
Beispiel:
<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>
Modulmetadaten
Wir bezeichnen zusätzliche Informationen, die im Testmodul AndroidTest.xml
angegeben sind, als Modulmetadaten. Mit diesen Metadaten können Sie zusätzliche Informationen zum Modul angeben. Außerdem können Module anhand der Metadaten gefiltert werden.
Beispiel für Metadaten:
<option name="config-descriptor:metadata" key="component" value="framework" />
<option name="config-descriptor:metadata" key="parameter" value="instant_app" />
Beispiel für das Filtern nach Metadaten:
--module-metadata-include-filter component=framework
Dadurch werden alle Module mit einem framework als component-Metadaten ausgeführt.
Vollständiges Beispiel für 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>
Parametrisiertes Modul
Ein spezieller Metadatentyp ist parameter
.
<option name="config-descriptor:metadata" key="parameter" value="instant_app" />
Diese Metadaten geben an, dass das Modul in einem anderen Modus ausgeführt werden muss, z. B. als Instant-App, anstatt in einem Standard-App-Modus.
Alle möglichen Modi oder Parameter werden von ModuleParameters
beschrieben und haben einen zugehörigen Handler in ModuleParametersHelper
, mit dem Sie die Modulkonfiguration ändern können, damit sie im jeweiligen Modus ausgeführt wird.
Im Instant App-Modus wird die APK-Installation beispielsweise als Instant-Modus erzwungen.
Damit die Parametrisierung erfolgen kann, muss sie in der Befehlszeile mit folgendem Befehl aktiviert werden:
--enable-parameterized-modules
Sie können auch einen einzelnen Modus mit folgendem Befehl ausführen:
--enable-parameterized-modules --module-parameter <Mode>
--enable-parameterized-modules --module-parameter INSTANT_APP
Wenn eine parametrisierte Version eines Moduls ausgeführt wird, werden die Ergebnisse unter einem parametrisierten Modulnamen gemeldet, z. B. CtsGestureTestCases[instant]
im Vergleich zum Basismodul CtsGestureTestCases
.