Partizionamento orizzontale di test

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

Lo sharding ha prerequisiti affinché il test runner possa supportare lo sharding.

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

Esistono due tipi di sharding che supportiamo in Tradefed: 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 assumono le stesse proprietà dai test runner: gli shard devono essere indipendenti e deterministici . Il primo passaggio di entrambi gli sharding è creare l'elenco ordinato completo dei test e quindi suddividerli in diversi gruppi/shard.

La differenza principale tra i moduli di sharding è nel modo in cui eseguono i test. Maggiori dettagli nelle sezioni seguenti.

Sharding locale

Lo sharding locale significa che tutti i dispositivi coinvolti nell'esecuzione dell'invocazione sharding sono connessi allo stesso host fisico.

Esecuzione

Lo sharding locale sfrutta il vantaggio che tutti i dispositivi sono connessi allo stesso host creando un pool di test che deve essere eseguito e facendo in modo che ciascun dispositivo esegua il polling dei test quando è libero (ovvero, eseguito con il test precedente). Ciò si traduce in 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 frammentata possono vivere ovunque ed essere connessi a diversi host fisici.

Esecuzione

Lo sharding distribuito avviene durante la creazione dell'elenco di test e il contenuto di ogni shard esegue solo lo shard attualmente richiesto. Pertanto, tutti i frammenti distribuiti creano inizialmente lo stesso elenco e quindi ne eseguono un sottoinsieme mutuamente esclusivo, il che si traduce nell'esecuzione di tutti i test.

La proprietà principale di questo modulo è che i frammenti sono completamente inconsapevoli l'uno dell'altro e possono fallire in modo indipendente.

Lo svantaggio principale è che la lunghezza dello shard non è necessariamente bilanciata semplicemente perché non possiamo prevedere in anticipo il tempo di esecuzione di ciascun test in ciascuno shard. La distribuzione viene effettuata in modo da avere approssimativamente 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 dello sharding non locale. A volte uno dei dispositivi coinvolti nello sharding contiene risorse speciali che altri non hanno, come una scheda SIM. Alcuni test potrebbero funzionare solo quando quella risorsa speciale è disponibile e altrimenti fallirebbero.

Lo sharding dei token è la nostra soluzione a questi casi d'uso. I moduli di test sono in grado di dichiarare quale risorsa speciale hanno bisogno nel loro 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 TokenProperty di Tradefed ed è associato a un gestore in TokenProviderHelper .

Ciò consente di eseguire moduli di test su dispositivi in ​​grado di eseguire correttamente i test.

Cosa succede se nessun dispositivo può eseguire il test?

Se nessun dispositivo disponibile ha la risorsa corrispondente al modulo di test, il modulo di test non viene eseguito correttamente 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 una scheda SIM, il modulo di test fallisce.

Implementazione

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

--enable-token-sharding