Suiten einrichten

Eine Suite in Tradefed ist eine Einrichtung, bei der mehrere Tests unter einem gemeinsamen Testrunner ausgeführt werden, der die gesamte Ausführung steuert.

In Tradefed werden Suites über die ITestSuite Klasse 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 in einem einzigen Aufruf zu melden.
  • Einrichtung auf oberster Ebene: Einrichtung, die auf die Geräte angewendet wird, bevor eines der Testmodule ausgeführt wird.
  • Hauptkonfiguration: Die Tradefed-XML-Konfiguration auf Suite-Ebene, die beschreibt, welche Module ausgeführt werden sollen und welche Einrichtung auf oberster Ebene verwendet werden soll.
  • Einrichtung auf Modulebene: Einrichtung, die auf die Geräte angewendet wird, kurz bevor das Modul ausgeführt wird. Sie werden auch als modulspezifische Einrichtungen bezeichnet.
  • Modulkonfiguration: Bezieht sich auf die Tradefed-XML-Konfiguration AndroidTest.xml, die die Module beschreibt und angibt, welche Einrichtung auf Modulebene vorgenommen werden soll.
  • Modul: Testeinheit, die aus einem Einrichtungsschritt (Einrichtung auf Modulebene), einem Testausführungsschritt und einem Bereinigungsschritt besteht.
  • Wiederholung innerhalb des Moduls: Automatische Wiederholung durch die Testumgebung innerhalb des Moduls.
  • Suite-Wiederholung: Vollständige Wiederholung der zuvor fehlgeschlagenen Tests der Suite.

ITestSuite-Struktur

ITestSuite in Tradefed bezieht sich auf die gemeinsame Basisklasse, die eine Suite-Ausführung steuert. Sie wird von allen wichtigen Testsuites 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 aller Suites.

Manchmal wird ITestSuite als Suite-Runner bezeichnet.

Der Suite-Runner führt bei der Ausführung die folgenden Schritte aus:

  1. Konfiguration des Moduls laden und festlegen, welche Gruppe ausgeführt werden soll.
  2. Jedes Modul ausführen:

    1. Einrichtung auf Modulebene ausführen.
    2. Modultests ausführen.
    3. Bereinigung auf Modulebene ausführen.
  3. Ergebnisse melden.

Einrichtung auf oberster Ebene

Aus Tradefed-Sicht ist ITestSuite nur ein weiterer Test. Es ist ein komplexer Test, aber immer noch nur ein Test 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 oberster 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

Als Modulmetadaten werden zusätzliche Informationen bezeichnet, die im Testmodul AndroidTest.xml angegeben sind. Mit diesen Metadaten können Sie zusätzliche Informationen zum Modul angeben und Module anhand der Metadaten filtern.

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 einen Filter für Metadaten:

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

Dadurch werden alle Module mit einem Framework als Komponenten -Metadaten ausgeführt.

Vollständiges AndroidTest.xml-Beispiel:

<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 anstelle eines Standard-App-Modus.

Alle möglichen Modi oder Parameter werden durch ModuleParameters beschrieben und haben einen zugehörigen Handler in ModuleParametersHelper , mit dem Sie die Moduleinrichtung ändern können, um sie im jeweiligen Modus auszuführen.

Im Instant App-Modus wird beispielsweise die APK-Installation als Instant-Modus erzwungen.

Damit die Parametrisierung erfolgt, muss sie in der Befehlszeile mit folgendem Befehl aktiviert werden:

--enable-parameterized-modules

Es ist auch möglich, einen einzelnen bestimmten Modus mit folgendem Befehl auszufü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 zu Basis CtsGestureTestCases.