Einen hostgesteuerten Test in der Trade Federation schreiben

Auf dieser Seite wird beschrieben, wie Sie einen vom Host gesteuerten Gerätetest im JUnit4-Stil schreiben. Das bedeutet, dass auf der Hostseite auf dem Gerät.

Beachten Sie, dass wir als „hostseitig“ Tests und "host-gesteuert" Tests leicht zu unterschiedlich:

  • host-gesteuerter Test: Hier wird ein Test auf dem Host ausgeführt, der mit einem oder mehr Geräte. Das zu testende System befindet sich nicht auf dem Host selbst, die vom Host getestet werden.
  • Host-Side-Test: Wird nur auf dem Host ausgeführt und testet etwas z. B. Einheitentests.

Warum sollte ich einen hostgesteuerten Test anstelle eines Instrumentierungstests erstellen?

Bei einigen Tests müssen Sie möglicherweise den Gesamtstatus des Geräts beeinflussen, z. B. eine neu starten. Im Testfall für die Instrumentierung würde ein Neustart die der Test nicht fortgesetzt werden konnte und keine Ergebnisse verfügbar wären.

Hostgesteuerte Tests können auch zusätzliche Einrichtungsschritte ermöglichen, die eine Interaktion erfordern mit externen Geräten, von denen der Test abhängt.

Ein hostgesteuerter Test eignet sich für diese Anwendungsfälle und ermöglicht erweiterte Tests von mit weiteren Szenarien. Wenn Sie sich in dieser Situation befinden, schreiben Sie eine am besten geeignet.

Wie werden hostgesteuerte Tests in TF geschrieben?

Hier ein Beispiel:

@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());
    }
}

Hostgesteuerte Tests in Trade Federation werden vom DeviceJUnit4ClassRunner durchgeführt JUnit4-Test-Runner. Die Gesamtstruktur der Testklasse entspricht der eines Regulärer JUnit4-Test:

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

BaseHostJunit4Test erweitern ist eine Möglichkeit, nützliche Testdienstprogramm-APIs zu übernehmen, z. B.:

  • installPackage: Ermöglicht die Installation eines APK auf dem Zielgerät.
  • installPackageAsUser: Ermöglicht die Installation eines APK als Nutzer auf dem Ziel .
  • uninstallPackage: Ermöglicht die Deinstallation eines APK.
  • isPackageInstalled: Prüft, ob ein Paket installiert ist oder nicht.
  • hasDeviceFeature: Prüfen Sie, ob das Gerät eine Funktion unterstützt. (pm list features)
  • runDeviceTests(DeviceTestRunOptions options): Instrumentierung ausführen Test mit einem Zielgerät mithilfe von DeviceTestRunOptions um alle möglichen Optionen abzuwickeln.

Gewähren Sie auch Zugriff auf das Tradefed-Geräteobjekt:

  • getDevice(): Gibt ein TF-Geräteobjekt zur Bearbeitung des Geräts zurück.
  • getBuild(): Gibt ein Build-Info-TF-Objekt zurück, um Informationen zum erstellen.
  • getAbi(): Gibt die ABI zurück, für die der Test ausgeführt wird.

Tradefed-Support: Vorbereitung und Bereinigung der Geräteklasse

JUnit4 @BeforeClass und @AfterClass gelten nur für statische Methoden, Dadurch ist es unmöglich, den #getDevice()-Handler für einige gerätespezifische Einrichtung oder Bereinigung nur einmal pro Klasse. Verwenden Sie zur Behebung dieses Problems die Anmerkung „Tradefed“.

  • @BeforeClassWithInfo: Wird vor @BeforeClass-Annotationen ausgeführt
  • @AfterClassWithInfo: Wird nach @AfterClass-Annotationen ausgeführt
   @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");
   }

Mit TestInformation können Sie Geräte- und Speichereigenschaften verwenden, die die im statischen oder nicht-statischen Bereich verwendet werden. BaseHostJUnit4Test unterstützt Abrufen des TestInformation in einem nicht statischen Bereich über #getTestInformation()

Wenn Sie BaseHostJUnit4Test nicht erweitern, können Sie ITestInformationReceiver fest, um das TestInformation-Objekt zu erhalten.

Wie wird ein hostgesteuerter Test in Tradefed konfiguriert?

In der Tradefed-XML-Konfigurationsdatei werden hostgesteuerte Tests über die HostTest Runner.

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