Quando il corpus di test è di grandi dimensioni o il tempo di esecuzione diventa lungo, offriamo la possibilità di suddividere i test su più dispositivi: sharding.
Lo sharding ha prerequisiti perché il programma di esecuzione dei test supporti lo sharding.
La maggior parte dei runner di test principali supporta già lo sharding, quindi non è richiesta alcuna operazione aggiuntiva. Questi supportano già lo sharding: test di misurazione, test basati sull'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 i runner dei test: gli shard devono essere indipendenti e deterministici. Il primo passaggio di entrambi gli shard consiste nel creare l'elenco completo e ordinato dei test, quindi suddividerli in gruppi/shard diversi.
La differenza principale delle forme di suddivisione è nel 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ò comporta un utilizzo ottimizzato del dispositivo. Lo chiamiamo anche sharding dinamico.
Opzioni
--shard-count XX
Sharding distribuito
Con sharding distribuito si intende che tutti i dispositivi coinvolti nell'esecuzione dell' invocazione suddivisa possono trovarsi ovunque ed essere connessi a diversi host fisici.
Esecuzione
Lo sharding distribuito viene eseguito durante la creazione dell'elenco di 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 è che i frammenti sono completamente ignari l'uno dell'altro e possono avere 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 all'incirca lo stesso numero di casi di test in ogni shard.
Opzioni
--shard-count XX --shard-index XX
Sharding dei token
Lo sharding dei token può essere utilizzato solo con lo sharding locale. Il flag non è operativo nei casi d'uso di sharding 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 di dichiarare la risorsa speciale di cui hanno bisogno nel loro AndroidTest.xml
e Tradefed inoltra i test a un dispositivo che dispone della risorsa.
Configurazione XML
<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />
Il valore value
del token corrisponde a TokenProperty
di Tradefed ed è associato a un gestore in 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 può eseguire il test?
Se nessun dispositivo disponibile dispone della risorsa corrispondente al modulo di test, il modulo di test non viene superato e viene ignorato perché non può essere eseguito correttamente.
Ad esempio, se un modulo di test richiede l'esecuzione di una scheda SIM, ma nessun dispositivo ne ha una, il modulo di test non va a buon fine.
Implementazione
Passa questo flag della funzionalità alla riga di comando principale di TradeFed:
--enable-token-sharding