Se il corpus di test è molto ampio o il tempo di esecuzione è lungo, offriamo la classe possibilità di suddividere i test tra più dispositivi: sharding.
Lo sharding ha dei prerequisiti affinché l'esecutore del test possa supportare lo sharding.
La maggior parte dei principali runner del test supporta già lo sharding, quindi non e il lavoro è obbligatorio. Supportano già lo sharding: test di strumentazione, test guidati lato host, GTest.
In Tradefed supportiamo due tipi di sharding: locale e distribuito. Poiché condividono alcune somiglianze, questa pagina descrive le proprietà comuni e poi le specifiche di ciascuna.
Proprietà comuni
Entrambe le forme di suddivisione in parti presuppongono le stesse proprietà per gli eseguibili dei test: i frammenti devono essere indipendenti e deterministici. Il primo passaggio di entrambi gli sharding per creare l'elenco ordinato completo dei test e poi suddividerli in gruppi/semi diversi.
La differenza principale dei moduli di partizionamento orizzontale è il modo in cui eseguono i test. Maggiori dettagli nelle sezioni seguenti.
Sharding locale
Per sharding locale si intende che tutti i dispositivi coinvolti nell'esecuzione dell'invocazione suddivisa sono collegati allo stesso host fisico.
Esecuzione
Lo sharding locale sfrutta tutti i dispositivi connessi allo stesso host creando un pool di test da eseguire e facendo in modo che ogni dispositivo esegua il polling dei test quando è libero (ovvero quando ha completato il test precedente). Ciò si traduce in un utilizzo ottimizzato del dispositivo. È anche chiamato sharding dinamico.
Opzioni
--shard-count XX
Partizionamento orizzontale distribuito
Per partizionamento orizzontale distribuito si intendono tutti i dispositivi coinvolti nell'esecuzione dello la chiamata con sharding può essere ovunque ed essere connessa a diverse .
Esecuzione
Lo sharding distribuito viene eseguito durante la creazione dell'elenco dei test e i contenuti di ciascun frammento vengono eseguiti solo per il frammento attualmente richiesto. Pertanto, tutti gli shard distribuiti inizialmente generano lo stesso elenco, quindi ne eseguono un sottoinsieme mutuamente esclusivo, il che comporta l'esecuzione di tutti i test.
La proprietà principale di questo modulo sono gli shard e può generare errori in modo indipendente.
Lo svantaggio principale è che la lunghezza del frammento non è necessariamente bilanciata semplicemente perché non possiamo prevedere in anticipo il tempo di esecuzione di ogni test in ogni frammento. La distribuzione è fatta in modo da avere circa lo stesso numero di scenari di test in ogni shard.
Opzioni
--shard-count XX --shard-index XX
Partizionamento orizzontale dei token
Lo sharding dei token può essere utilizzato solo con lo sharding locale. Il flag è inoperativi nei casi d'uso di partizionamento orizzontale non locale. A volte uno dei dispositivi coinvolti nello sharding contiene risorse speciali che non sono presenti negli altri, ad esempio una scheda SIM. Alcuni test potrebbero funzionare solo quando la risorsa speciale è disponibile e non andrebbero a buon fine in caso contrario.
Lo sharding dei token è la nostra soluzione per questi casi d'uso. I moduli di test sono in grado
dichiarano la risorsa speciale di cui hanno bisogno in AndroidTest.xml
e
Tradefed instrada i test a un dispositivo che dispone della risorsa.
Configurazione XML
<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />
Il value
del token corrisponde a quello di Tradefed
TokenProperty
ed è associato a un gestore
TokenProviderHelper
.
In questo modo, i moduli di test possono essere eseguiti su dispositivi in grado di eseguire correttamente i test.
Cosa succede se nessun dispositivo è in grado di eseguire il test?
Se nessun dispositivo disponibile include la risorsa corrispondente al modulo di test, il modulo di test ha avuto esito negativo e viene ignorato perché non può essere eseguito correttamente.
Ad esempio, se un modulo di test richiede una scheda SIM per l'esecuzione, ma nessun dispositivo ne ha una, il modulo di test non va a buon fine.
Implementazione
Passa questo flag di funzione alla riga di comando principale di Tradefed:
--enable-token-sharding