Una suite tende a includere diversi moduli di test e può raggiungere dimensioni del corpus di test piuttosto grandi. Ad esempio, Android Compatibility Test Suite (CTS) include centinaia di moduli e centinaia di migliaia di casi di test.
Diventa possibile che una grande quantità di test fallisca a causa di uno scarso isolamento o di dispositivi che vanno in cattivo stato.
La funzione di ripetizione dei tentativi della suite ha lo scopo di risolvere questi casi: consente di riprovare solo gli errori anziché le suite complete al fine di escludere flakiness e scarso isolamento. Se un test fallisce costantemente, anche il nuovo tentativo fallirà; e ottieni un segnale molto più forte che c'è un problema reale.
Riprova della suite di implementazione
La ripetizione dei risultati implica la lettura dei risultati precedenti e l'esecuzione della chiamata precedente.
L'interfaccia principale che guida il nuovo tentativo è ITestSuiteResultLoader , che consente di caricare un risultato precedente e la riga di comando precedente.
Il RetryRescheduler utilizza quindi queste informazioni per ricreare il comando precedente e popolare alcuni filtri in modo da rieseguire solo gli errori precedenti o i test non eseguiti.
Esempio di ripetizione della suite: CTS
La configurazione dei tentativi in CTS è:
<configuration description="Runs a retry of a previous CTS session.">
<object type="previous_loader" class="com.android.compatibility.common.tradefed.result.suite.PreviousResultLoader" />
<test class="com.android.tradefed.testtype.suite.retry.RetryRescheduler" />
<logger class="com.android.tradefed.log.FileLogger">
<option name="log-level-display" value="WARN" />
</logger>
</configuration>
Questo è applicabile alla maggior parte delle suite che lo estendono, ad esempio VTS ).
Sarebbe invocato tramite:
cts-tradefed run retry --retry <session>
La sessione verrebbe trovata elencando i risultati precedenti nella console CTS:
cts-tf > l r
Session Pass Fail Modules Complete Result Directory Test Plan Device serial(s) Build ID Product
0 2092 30 148 of 999 2018.10.29_14.12.57 cts [serial] P Pixel
Il comando originale esatto verrà ricaricato e rieseguito con filtri aggiuntivi. Ciò significa che se il tuo comando originale includesse alcune opzioni, anche queste farebbero parte del nuovo tentativo.
Per esempio:
cts-tradefed run cts-dev -m CtsGestureTestCases
Il nuovo tentativo di cui sopra sarebbe sempre limitato a CtsGestureTestCases
poiché stiamo riprovando un comando che lo riguardava solo.
Configura riprova per la suite in stile CTS
Affinché il nuovo tentativo funzioni, i risultati precedenti devono essere esportati in formato proto. È necessario aggiungere quanto segue:
<result_reporter class="com.android.compatibility.common.tradefed.result.suite.CompatibilityProtoResultReporter" />
Questo deve essere aggiunto alla configurazione XML del comando principale e risulterà in un file test-record.pb
da creare nella cartella dei risultati.
Il nuovo tentativo CTS carica quindi i dati da una combinazione di test-record.pb
e test_result.xml
esistente per preparare il richiamo del nuovo tentativo.