Una suite in Tradefed si riferisce a una configurazione in cui vengono eseguiti diversi test in un esecuzione di test 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 dal modo in cui vengono eseguiti.
Definizioni
- Suite: insieme di moduli di test configurati per essere eseguiti in una configurazione di primo livello simile per generare report sui risultati in un'unica chiamata.
- Configurazione di primo livello: la configurazione applicata ai dispositivi prima di eseguire uno dei moduli di test.
- Configurazione principale: la configurazione XML Tradefed a livello di suite che descrive i moduli da eseguire e la configurazione di primo livello da utilizzare.
- Configurazione a livello di modulo: la configurazione viene applicata ai dispositivi appena prima dell'esecuzione del modulo. Sono note anche come configurazioni specifiche per i moduli.
- Configurazione del modulo: si riferisce alla configurazione XML
AndroidTest.xml
Tradefed che descrive i moduli e la configurazione a livello di modulo da eseguire. - 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 smantellamento.
- Nuovo tentativo all'interno del modulo: nuovo tentativo automatico eseguito dal cablaggio all'interno del modulo.
- Nuovo tentativo della suite: esecuzione completa di nuovo dei test della suite che non sono riusciti in precedenza.
Struttura di ITestSuite
ITestSuite
in Tradefed fa riferimento alla classe di base comune che gestisce l'esecuzione di una suite. È condiviso da tutte le principali suite di test, in particolare da Android Compatibility Test Suite (CTS) e Android Vendor Test Suite (VTS), e garantisce un'esperienza di esecuzione coerente in tutte le suite.
A volte ci riferiamo a ITestSuite come al runner della suite.
Il runner della suite segue questi passaggi durante l'esecuzione:
- Carica la configurazione del modulo e determina quale set deve essere eseguito.
Esegui ogni modulo:
- Esegui la configurazione a livello di modulo.
- Esegui i test del modulo.
- Esegui il teardown a livello di modulo.
Segnala i risultati.
Configurazione di primo livello
Dal punto di vista di TradeFed, ITestSuite
è solo un altro test. È complesso, ma è ancora solo un test come qualsiasi altro IRemoteTest
. Pertanto, quando specifichi il programma di esecuzione della suite in una configurazione Tradefed, Tradefed segue il consueto schema di 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 i metadati del modulo informazioni aggiuntive specificate nel modulo di test
AndroidTest.xml
. Questi metadati ti consentono di specificare informazioni aggiuntive sul modulo, che può essere filtrato 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 codice riportato sopra eseguirà tutti i moduli con un framework come metadati del 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 di metadati speciale è 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 possibili modalità o i parametri sono descritti da
ModuleParameters
e hanno un gestore associato in
ModuleParametersHelper
che ti consente di modificare la configurazione del modulo in modo che venga eseguita nella modalità specifica.
Ad esempio, la modalità app istantanea impone l'installazione dell'APK come modalità istantanea.
Affinché la parametrizzazione venga eseguita, la riga di comando deve abilitarla con:
--enable-parameterized-modules
È anche possibile eseguire una singola modalità con:
--enable-parameterized-modules --module-parameter <Mode>
--enable-parameterized-modules --module-parameter INSTANT_APP
Quando viene eseguita una versione con parametri di un modulo, i risultati vengono riportati sotto il nome di un modulo con parametri, ad esempio CtsGestureTestCases[instant]
rispetto a CtsGestureTestCases
di base.