Scrivi un test gestito 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.

Tieni presente che consideriamo i test "lato host" e i test "guidati dall'host" leggermente diversi:

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

Perché creare un test gestito dall'host anziché un test di strumentazione?

Alcuni test potrebbero richiedere di influenzare lo stato generale del dispositivo, come l'invio di un comando di riavvio. Nel caso del test della strumentazione, un riavvio interromperebbe la strumentazione, il test non potrebbe continuare e non sarebbero disponibili risultati.

I test gestiti da 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 ​​questa situazione, scrivere un test gestito dall'host ha più senso.

Come vengono scritti i test gestiti dall'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());
    }
}

I test gestiti da host in Trade Federation sono gestiti dal test runner DeviceJUnit4ClassRunner JUnit4. La struttura complessiva della classe di test è la stessa di un normale test JUnit4:

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

L'estensione BaseHostJunit4Test è un modo per ereditare utili API di utilità di test come:

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

Fornisci anche l'accesso all'oggetto dispositivo Tradefed:

  • getDevice() : Restituisce un oggetto dispositivo TF per manipolare il dispositivo.
  • getBuild() : restituisce un oggetto TF con informazioni sulla build per ottenere informazioni sulla build.
  • getAbi() : restituisce l'ABI rispetto al quale viene eseguito il test.

Supporto Tradefed: preparazione e pulizia dei dispositivi per classe

JUnit4 @BeforeClass e @AfterClass sono applicabili solo ai metodi statici, il che rende impossibile utilizzare il gestore #getDevice() per eseguire alcune impostazioni o ripuliture specifiche del dispositivo, una tantum, per classe. Per risolvere questo problema, utilizzare 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 il dispositivo e archiviare le proprietà che possono essere utilizzate nell'ambito statico o non statico. BaseHostJUnit4Test supporta l'ottenimento di TestInformation in un ambito non statico tramite #getTestInformation() .

Se non stai estendendo BaseHostJUnit4Test , puoi implementare ITestInformationReceiver per ricevere l'oggetto TestInformation .

Come configurare un test gestito da host in Tradefed?

Nel file di configurazione XML di Tradefed, i test gestiti dall'host vengono eseguiti tramite il runner HostTest .

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