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 partizionamento orizzontale presuppongono le stesse proprietà degli elementi esecutivi 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. Nelle sezioni che seguono puoi trovare ulteriori dettagli.
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
Sharding distribuito
Con lo partizionamento orizzontale distribuito tutti i dispositivi coinvolti nell'esecuzione della chiamata segmentata possono trovarsi ovunque ed essere connessi a diversi host fisici.
Esecuzione
Lo sharding distribuito avviene durante la creazione dell'elenco dei test e i contenuti di ogni shard vengono eseguiti solo per lo shard attualmente richiesto. Tutti gli shard distribuiti creano prima lo stesso elenco e poi ne eseguono un sottoinsieme che si esclude reciprocamente. In questo modo, vengono eseguiti tutti i test.
La proprietà principale di questo modulo sono gli shard che non sono completamente a conoscenza degli altri e possono 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 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 è in grado di eseguire il test?
Se nessun dispositivo disponibile dispone della risorsa corrispondente al modulo di test, il modulo di test ha esito negativo 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 funziona.
Implementazione
Passa questo flag della funzionalità alla riga di comando principale di TradeFed:
--enable-token-sharding