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. Condividono alcune somiglianze, questa pagina descrive le proprietà comuni e quindi le specifiche di ciascuno.
Proprietà comuni
Entrambe le forme di partizionamento orizzontale assumono le stesse proprietà degli elementi esecutivi dei test: shard 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. Nelle sezioni che seguono puoi trovare ulteriori dettagli.
Partizionamento orizzontale locale
Per partizionamento orizzontale locale si intendono tutti i dispositivi coinvolti nell'esecuzione dello sharding le chiamate siano connesse allo stesso host fisico.
Esecuzione
Lo sharding locale sfrutta tutti i dispositivi connessi allo stesso host creando un pool di test che devono essere eseguiti il polling dei dispositivi esegue i test quando è senza costi (ovvero eseguito con il test precedente). Ciò si traduce in un utilizzo ottimizzato del dispositivo. Lo chiamiamo anche lo 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 si verifica al momento della creazione dell'elenco dei test e dei contenuti ogni shard esegue solo lo shard attualmente richiesto. Quindi tutti shard distribuiti creano inizialmente lo stesso elenco e poi eseguono un'operazione un sottoinsieme esclusivo, che determina 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 dello shard non è necessariamente bilanciata perché non possiamo prevedere in anticipo il runtime di ogni test in ogni shard. 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 partizionamento orizzontale 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 coinvolte nello sharding contiene risorse speciali non acquisite da altri, come una SIM . Alcuni test potrebbero funzionare solo quando la risorsa speciale è disponibile e non andrebbe a buon fine.
Lo sharding dei token è la nostra soluzione per questi casi d'uso. I moduli di test sono in grado
dichiarano le risorse speciali di cui hanno bisogno nel loro AndroidTest.xml
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
.
Ciò consente di eseguire moduli di test su dispositivi in grado di eseguire correttamente per eseguire 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 l'esecuzione di una scheda SIM, ma nessun dispositivo dispone di un Scheda SIM, il modulo di test non funziona.
Implementazione
Passa questo flag di funzione alla riga di comando principale di Tradefed:
--enable-token-sharding