Testa la suddivisione in parti

Quando il corpus di test è di grandi dimensioni o il tempo di esecuzione diventa lungo, offriamo la possibilità di dividere i test su più dispositivi: lo sharding.

Lo sharding ha prerequisiti per il supporto dello sharding da parte del test runner.

La maggior parte dei principali test runner supporta già lo sharding, quindi non è necessario alcun lavoro aggiuntivo. Questi supportano già lo sharding: test di strumentazione, test basati sul lato host, GTest.

In Tradefed supportiamo due tipi di sharding: locale e distribuito. Condividono alcune somiglianze, quindi questa pagina descrive le proprietà comuni e poi le specifiche di ciascuna.

Proprietà comuni

Entrambe le forme di sharding presuppongono le stesse proprietà dei test runner: gli shard devono essere indipendenti e deterministici. Il primo passaggio di entrambi gli sharding consiste nel creare l'elenco ordinato completo dei test e poi suddividerli in gruppi/shard diversi.

La differenza principale tra le forme di sharding è il modo in cui vengono eseguiti i test. Per maggiori dettagli, consulta le sezioni seguenti.

Sharding locale

Lo sharding locale indica che tutti i dispositivi coinvolti nell'esecuzione dell'invocazione sottoposta a sharding sono connessi 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 terminato il test precedente). Ciò comporta un utilizzo ottimizzato del dispositivo. Lo chiamiamo anche sharding dinamico.

Opzioni

--shard-count XX

Sharding distribuito

Lo sharding distribuito significa che tutti i dispositivi coinvolti nell'esecuzione dell'invocazione con sharding possono trovarsi ovunque ed essere connessi a host fisici diversi.

Esecuzione

Lo sharding distribuito si verifica durante la creazione dell'elenco dei test e il contenuto di ogni shard esegue solo lo shard attualmente richiesto. Pertanto, tutti gli shard distribuiti creano inizialmente lo stesso elenco ed eseguono un sottoinsieme mutuamente esclusivo, il che comporta l'esecuzione di tutti i test.

La proprietà principale di questo modulo è che gli shard non sono a conoscenza l'uno dell'altro e possono non funzionare in modo indipendente.

Lo svantaggio principale è che la lunghezza dello shard non è necessariamente bilanciata semplicemente perché non possiamo prevedere in anticipo la durata di ogni test in ogni shard. La distribuzione viene eseguita in modo che ogni shard contenga all'incirca lo stesso numero di scenari di test.

Opzioni

--shard-count XX --shard-index XX

Sharding dei token

Token sharding 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 gli altri non hanno, ad esempio una scheda SIM. Alcuni test potrebbero funzionare solo quando è disponibile la risorsa speciale e altrimenti non riuscirebbero.

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 AndroidTest.xml e Tradefed indirizza 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 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 nessuno dei dispositivi disponibili ha la risorsa corrispondente al modulo di test, il modulo di test non riesce e viene ignorato perché non può essere eseguito correttamente.

Ad esempio, se un modulo di test richiede una scheda SIM per essere eseguito, ma nessun dispositivo ha una scheda SIM, il modulo di test non riesce.

Implementazione

Passa questo flag di funzionalità alla riga di comando principale di Tradefed:

--enable-token-sharding