Scrivi un test guidato dall'host in Trade Federation

Questa pagina descrive come scrivere un test del dispositivo in stile JUnit4 guidato dall'host. Ciò significa che il lato host del cablaggio attiverà azioni contro il dispositivo.

Nota che consideriamo i test "host-side" e i test "host-driven" leggermente diversi:

  • test guidato dall'host: test in esecuzione sull'host che interagisce con uno o più dispositivi. Il sistema in prova (SUT) non si trova sull'host stesso ma viene testato dall'host.
  • test lato host: è un test eseguito esclusivamente sull'host e che esegue il test solo sull'host, ad esempio i test unitari.

Perché creare un test guidato dall'host piuttosto che un test della strumentazione?

Alcuni test potrebbero richiedere di influenzare lo stato generale del dispositivo, come l'emissione di un comando di riavvio. Nel caso del test della strumentazione, un riavvio interromperebbe la strumentazione, il test non potrebbe continuare e nessun risultato sarebbe disponibile.

I test basati su host possono anche guidare passaggi di configurazione aggiuntivi che richiedono l'interazione con dispositivi esterni da cui dipende il test.

Un test basato su host può gestire questi casi d'uso e consentire test avanzati del dispositivo con più scenari. Se ti trovi in ​​quella situazione, scrivere un test guidato dall'host ha più senso.

Come vengono scritti i test basati su host in TF?

Ecco un esempio:

@RunWith(DeviceJUnit4ClassRunner.class)
public class SampleHostJUnit4DeviceTest extends BaseHostJUnit4Test {
    @Before
    public void setUp() throws Exception {
       // Some setup
    }

    @Test
    public void testCheckWeHaveDevice() throws Exception {
        Assert.assertNotNull(getDevice());
    }
}

Prove condotte da organismi ospitanti in Federazione dei Mercanti sono guidati dalla DeviceJUnit4ClassRunner prova corridore JUnit4. La struttura generale della classe di test è la stessa di un normale test JUnit4:

  • @BeforeClass
  • @Before
  • @Test
  • @After
  • @AfterClass
  • Assume , Assert

Estendentesi BaseHostJunit4Test è un modo per ereditare utile utilità test API quali:

  • installPackage : consente di installare un APK sul dispositivo di destinazione.
  • installPackageAsUser : consente di installare un APK come utente sul dispositivo di destinazione.
  • uninstallPackage : Permette di disinstallare un APK.
  • isPackageInstalled : Controllare se un pacchetto è installato o meno.
  • hasDeviceFeature : Controllare se dispositivo supporta una funzione o meno. ( pm list features )
  • runDeviceTests(DeviceTestRunOptions options) : eseguire un test di strumentazione contro un dispositivo di destinazione utilizzando DeviceTestRunOptions per gestire tutte le possibili opzioni.

Fornisci anche l'accesso all'oggetto dispositivo Tradefed:

  • getDevice() : restituisce un oggetto dispositivo TF per la manipolazione del dispositivo.
  • getBuild() : restituisce un oggetto informazioni accumulo TF per ottenere informazioni circa la costruzione.
  • getAbi() : restituisce l'ABI l'esecuzione del test contro.

Supporto Tradefed: preparazione e pulizia del dispositivo per classe

JUnit4 @BeforeClass e @AfterClass sono applicabili solo a metodi statici, che rende impossibile utilizzare la #getDevice() gestore per fare qualche dispositivo specifico, una volta, la configurazione per-classe o pulire. Per risolvere questo problema, utilizza l'annotazione Tradefed.

  • @BeforeClassWithInfo: viene eseguito prima delle annotazioni @BeforeClass
  • @AfterClassWithInfo: viene eseguito dopo le annotazioni @AfterClass
   @BeforeClassWithInfo
   public static void beforeClassWithDevice(TestInformation testInfo) {
       assertNotNull(testInfo.getDevice());
       testInfo.properties().put("mytest:test-prop", "test");
   }

   @AfterClassWithInfo
   public static void afterClassWithDevice(TestInformation testInfo) {
       assertNotNull(testInfo.getDevice());
       testInfo.properties().put("mytest:test-prop", "test");
   }

TestInformation consente di utilizzare le proprietà del dispositivo e memorizzare che possono essere utilizzati sia in ambito statico o non statici. BaseHostJUnit4Test supporti ricevendo il TestInformation in un ambito non statico tramite #getTestInformation() .

Se non si sta estendendo BaseHostJUnit4Test , è possibile implementare ITestInformationReceiver al fine di ricevere il TestInformation oggetto.

Come configurare un test basato su host in Tradefed?

Nel file di configurazione XML Tradefed, le prove condotte da organismi ospitanti sono gestiti attraverso il Hosttest corridore.

<test class="com.android.tradefed.testtype.HostTest" >
    <option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>