Auf dieser Seite wird beschrieben, wie Sie einen vom Host gesteuerten Gerätetest im JUnit4-Stil schreiben. Das bedeutet, dass die Hostseite des Kabelbaums Aktionen auf dem Gerät auslöst.
„Host-Tests“ und „host-getriebene Tests“ unterscheiden sich geringfügig:
- Host-driven Test: Ein Test, der auf dem Host ausgeführt wird und mit einem oder mehreren Geräten interagiert. Das zu testende System befindet sich nicht auf dem Host selbst, die vom Host getestet werden.
- Hostseitiger Test: Ein Test, der ausschließlich auf dem Host ausgeführt wird und nur etwas auf dem Host testet, z. B. Unit-Tests.
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 Instrumentierung beenden, der Test könnte nicht fortgesetzt werden und es wären keine Ergebnisse verfügbar.
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. In diesem Fall ist es am sinnvollsten, einen hostbasierten Test zu erstellen.
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
Wenn Sie BaseHostJunit4Test erweitern, können Sie nützliche APIs für Testtools wie die folgenden übernehmen:
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üfen, ob ein Paket installiert isthasDeviceFeature
: 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()
: Hiermit wird ein TF-Objekt mit Build-Informationen zurückgegeben, um Informationen zum Build abzurufen.getAbi()
: Gibt die ABI zurück, für die der Test ausgeführt wird.
Tradefed-Unterstützung: Gerätevorbereitung und -bereinigung nach 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 die Tradefed-Anmerkung, um dieses Problem zu beheben.
- @BeforeClassWithInfo: Wird vor @BeforeClass-Annotationen ausgeführt
- @AfterClassWithInfo: Wird nach @AfterClass-Anmerkungen 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 entweder im statischen oder nicht statischen Umfang verwendet werden können. 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>