Suiten einrichten

Eine Suite in Tradefed bezieht sich auf ein Setup, bei dem mehrere Tests unter einem gemeinsamen Testläufer ausgeführt werden, der die Gesamtausführung steuert.

In Tradefed werden Suiten über die ITestSuite -Klasse gesteuert, mit der Tests unabhängig von ihrer Ausführung hinzugefügt und entfernt werden können.

Definitionen

  • Suite: Satz von Testmodulen, die so konfiguriert sind, dass sie unter einem ähnlichen Top-Level-Setup ausgeführt werden, um ihre Ergebnisse in einem einzigen Aufruf zu melden.
  • Setup der obersten Ebene: Setup, das 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 welches Setup der obersten Ebene verwendet werden soll.
  • Setup auf Modulebene: Das Setup wird unmittelbar vor der Ausführung des Moduls auf die Geräte angewendet. Diese werden auch als modulspezifische Setups bezeichnet.
  • Modulkonfiguration: Bezieht sich auf die Tradefed-XML-Konfiguration AndroidTest.xml , die die Module beschreibt und welche Einrichtung auf Modulebene durchgeführt werden sollte.
  • Modul: Testeinheit bestehend aus einem Einrichtungsschritt ( Einrichtung auf Modulebene ), einem Testausführungsschritt und einem Abbauschritt.
  • Modulinterner Wiederholungsversuch: Automatischer Wiederholungsversuch durch den Kabelbaum im Modul.
  • 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. Es wird von allen wichtigen Testsuiten gemeinsam genutzt, insbesondere von der Android Compatibility Test Suite (CTS) und der Android Vendor Test Suite (VTS) , und gewährleistet eine konsistente Ausführungserfahrung über alle Suiten hinweg.

Wir bezeichnen ITestSuite manchmal als Suite-Runner .

Der Suite-Runner folgt bei der Ausführung diesen Schritten:

  1. Laden Sie die Konfiguration des Moduls und bestimmen Sie, welcher Satz ausgeführt werden soll.
  2. Führen Sie jedes Modul aus:

    1. Führen Sie das Setup auf Modulebene aus.
    2. Führen Sie Modultests durch.
    3. Führen Sie einen Teardown auf Modulebene durch.
  3. Melden Sie die Ergebnisse.

Setup auf höchstem Niveau

Aus Tradefed-Sicht ist ITestSuite nur ein weiterer Test. Es ist komplex, aber dennoch nur ein Test wie jeder andere IRemoteTest . Wenn Sie also 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 die ITestSuite enthält, ist das Setup der obersten 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 nennen Modulmetadaten zusätzliche Informationen, die im Testmodul AndroidTest.xml angegeben sind. Mit diesen Metadaten können Sie zusätzliche Informationen zum Modul angeben und Module können mithilfe der Metadaten gefiltert werden.

Beispiel-Metadaten:

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

Beispielfilter für Metadaten:

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

Das Obige würde alle Module mit einem Framework als Komponentenmetadaten ausführen.

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>

Parametriertes Modul

Ein besonderer 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, beispielsweise als Instant-App, statt im Standard-App-Modus.

Alle möglichen Modi oder Parameter werden durch ModuleParameters beschrieben und verfügen über einen zugehörigen Handler in ModuleParametersHelper , mit dem Sie das Modul-Setup so ändern können, dass es im jeweiligen Modus ausgeführt wird.

Beispielsweise erzwingt der Instant-App-Modus die APK-Installation im Instant-Modus.

Damit die Parametrisierung erfolgen kann, muss sie über die Befehlszeile aktiviert werden mit:

--enable-parameterized-modules

Es ist auch möglich, einen einzelnen bestimmten Modus auszuführen mit:

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

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

Wenn eine parametrisierte Version eines Moduls ausgeführt wird, meldet es seine Ergebnisse unter einem parametrisierten Modulnamen, zum Beispiel CtsGestureTestCases[instant] im Vergleich zu Basis CtsGestureTestCases .