Scrivere un test basato sull'host in Trade Federation

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

Tieni presente che consideriamo i test "lato host" e "basati sull'host" leggermente diversi:

  • basato sull'host: un test eseguito sull'host che interagisce con uno o più dispositivi. Il sistema in test (SUT) non si trova sull'host stesso, ma viene sottoposto a test dall'host.
  • Test lato host: è un test eseguito esclusivamente sull'host e che testa qualcosa solo sull'host, ad esempio i test di unità.

Perché creare un test basato sull'host anziché un test di strumentazione?

Alcuni test potrebbero richiedere di modificare lo stato complessivo del dispositivo, ad esempio inviando un comando di riavvio. Nello scenario di test della strumentazione, il riavvio causerebbe l'interruzione la strumentazione, il test non è stato possibile continuare e non saranno disponibili risultati.

I test basati sull'host possono anche richiedere ulteriori passaggi di configurazione che richiedono l'interazione con dispositivi esterni su cui si basa il test.

Un test condotto dall'host può gestire questi casi d'uso e consentire test avanzati delle sul dispositivo in più scenari. In questo caso, è consigliabile scrivere un test basato sull'host.

Come vengono scritti i test guidati da 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 basati su host nella Trade Federation sono condotti da DeviceJUnit4ClassRunner Esecutore test JUnit4. La struttura generale della classe di test è la stessa di test JUnit4 standard:

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

L'estensione di BaseHostJunit4Test è un modo per ereditare API di utilità di test utili 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: verifica se un pacchetto è installato o meno.
  • hasDeviceFeature: controlla se il dispositivo supporta o meno una funzionalità. (pm list features)
  • runDeviceTests(DeviceTestRunOptions options): esegui una strumentazione eseguire il test su un dispositivo di destinazione utilizzando DeviceTestRunOptions per gestire tutte le opzioni possibili.

Fornisci inoltre l'accesso all'oggetto dispositivo Tradefed:

  • getDevice(): restituisce un oggetto dispositivo TF per manipolare il dispositivo.
  • getBuild(): restituisce un oggetto TF di informazioni sulla compilazione per ottenere informazioni sulla compilazione.
  • getAbi(): restituisce l'ABI in base al quale viene eseguito il test.

Supporto di Tradefed: preparazione e pulizia dei dispositivi per classe

JUnit4 @BeforeClass e @AfterClass sono applicabili solo ai metodi statici, il che rende impossibile utilizzare l'handler #getDevice() per eseguire alcune operazioni di pulizia o configurazione una tantum per classe e specifiche del dispositivo. Per risolvere il 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 ti consente di utilizzare le proprietà del dispositivo e del negozio che possono essere utilizzato nell'ambito statico o non statico. Supporta BaseHostJUnit4Test recuperando TestInformation in un ambito non statico tramite #getTestInformation().

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

Come si configura un test basato su host in Tradefed?

Nel file di configurazione XML di Tradefed, i test basati sull'host vengono eseguiti tramite il programma di esecuzione HostTest.

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