Configurare le suite

Una suite in Tradefed si riferisce a una configurazione in cui vengono eseguiti diversi test in un test runner comune che gestisce l'esecuzione complessiva.

In Tradefed, le suite vengono gestite tramite la classe ITestSuite, che consente di aggiungere e rimuovere i test indipendentemente dalla modalità di esecuzione.

Definizioni

  • Suite: insieme di moduli di test configurati per essere eseguiti in una configurazione di primo livello simile per segnalare i risultati in una singola chiamata.
  • Configurazione di primo livello: configurazione applicata ai dispositivi prima dell'esecuzione di uno qualsiasi dei moduli di test.
  • Configurazione principale: la configurazione XML di Tradefed a livello di suite che descrive quali moduli devono essere eseguiti e quale configurazione di primo livello deve essere utilizzata.
  • Configurazione a livello di modulo: la configurazione viene applicata ai dispositivi subito prima dell'esecuzione del modulo. Queste sono note anche come configurazioni specifiche del modulo.
  • Configurazione del modulo: si riferisce alla configurazione XML di Tradefed che descrive i moduli e quale configurazione a livello di modulo deve essere eseguita.AndroidTest.xml
  • Modulo: unità di test composta da un passaggio di configurazione (configurazione a livello di modulo), un passaggio di esecuzione del test e un passaggio di smontaggio.
  • Nuovo tentativo all'interno del modulo: nuovo tentativo automatico eseguito dal cablaggio all'interno del modulo.
  • Riprova suite: esecuzione completa dei test della suite non riusciti in precedenza.

Struttura di ITestSuite

ITestSuite in Tradefed si riferisce alla classe base comune che gestisce l'esecuzione di una suite. È condiviso da tutte le principali suite di test, in particolare dalla suite di test di compatibilità Android (CTS) e dalla suite di test del fornitore Android (VTS) e garantisce un'esperienza di esecuzione coerente in tutte le suite.

A volte ci riferiamo a ITestSuite come suite runner.

Il runner della suite segue questi passaggi durante l'esecuzione:

  1. Carica la configurazione del modulo e determina quale set deve essere eseguito.
  2. Esegui ogni modulo:

    1. Esegui la configurazione a livello di modulo.
    2. Esegui i test dei moduli.
    3. Esegui lo smontaggio a livello di modulo.
  3. Riporta i risultati.

Configurazione di primo livello

Dal punto di vista di Tradefed, ITestSuite è solo un altro test. È un test complesso, ma è comunque un test come tutti gli altri IRemoteTest. Pertanto, quando specifichi il runner della suite in una configurazione Tradefed, Tradefed segue il normale pattern della configurazione: esecuzione di build_provider, target_preparer, test (la nostra suite in questo caso) e target_cleaner.

Questa sequenza nella configurazione di Tradefed contenente ITestSuite è la configurazione di primo livello.

Esempio:

<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>

Metadati del modulo

Chiamiamo metadati del modulo le informazioni aggiuntive specificate nel modulo di test AndroidTest.xml. Questi metadati ti consentono di specificare informazioni aggiuntive sul modulo e i moduli possono essere filtrati utilizzando i metadati.

Esempio di metadati:

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

Esempio di filtro sui metadati:

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

Il comando precedente eseguirà tutti i moduli con framework come metadati componente.

Esempio completo di 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>

Modulo con parametri

Un tipo speciale di metadati è parameter.

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

Questi metadati specificano che il modulo deve essere eseguito in una modalità diversa, ad esempio come app istantanea, anziché in modalità app standard.

Tutte le modalità o i parametri possibili sono descritti da ModuleParameters e hanno un gestore associato in ModuleParametersHelper che ti consente di modificare la configurazione del modulo per l'esecuzione nella modalità specifica.

Ad esempio, la modalità app istantanea forza l'installazione dell'APK come modalità istantanea.

Affinché la parametrizzazione avvenga, la riga di comando deve abilitarla con:

--enable-parameterized-modules

È anche possibile eseguire una singola modalità specifica con:

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

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

Quando viene eseguita una versione parametrizzata di un modulo, i risultati vengono riportati con un nome di modulo parametrizzato, ad esempio CtsGestureTestCases[instant] anziché CtsGestureTestCases di base.