Scrivi un test guidato da host nella Federazione del commercio

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 "lato host" basati sull'host in modo che sia leggermente diverso:

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

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

Alcuni test potrebbero richiedere di influire sullo stato complessivo del dispositivo, ad esempio l'emissione di un esegui il 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 su host possono anche favorire passaggi di configurazione aggiuntivi che richiedono l'interazione con dispositivi esterni da cui dipende il test.

Un test condotto dall'host può gestire questi casi d'uso e consentire test avanzati delle sul dispositivo in più scenari. Se ti trovi in questa situazione, scrivi un il test condotto dall'host è la scelta più sensata.

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

Estensione di BaseHostJunit4Test è un modo per ereditare utili API di test delle utilità di test, ad esempio:

  • installPackage: consente di installare un APK sul dispositivo di destinazione.
  • installPackageAsUser: consente di installare un APK come utente nella destinazione dispositivo.
  • uninstallPackage: consente di disinstallare un APK.
  • isPackageInstalled: verifica se un pacchetto è installato o meno.
  • hasDeviceFeature: controlla se il dispositivo supporta 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 anche l'accesso all'oggetto del dispositivo scambiato:

  • getDevice(): restituisce un oggetto dispositivo TF per manipolare il dispositivo.
  • getBuild(): restituisce un oggetto TF con informazioni sulla build per ottenere informazioni sull'oggetto creare.
  • getAbi(): restituisce l'ABI su cui è in esecuzione il test.

Assistenza fornita: preparazione e pulizia dei dispositivi per classe

JUnit4 @BeforeClass e @AfterClass sono applicabili solo ai metodi statici, che rende impossibile l'utilizzo del gestore #getDevice() per una configurazione una tantum per classe o una pulizia specifica per il 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 intendi estendere BaseHostJUnit4Test, puoi implementare ITestInformationReceiver per ricevere l'oggetto TestInformation.

Come si configura un test basato su host in Tradefed?

Nel file di configurazione XML Tradefed, i test basati sull'host vengono eseguiti Test Host runner.

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