Auf dieser Seite wird beschrieben, wie Sie einen hostgesteuerten Gerätetest im JUnit4-Stil schreiben. Das bedeutet, dass auf der Hostseite des Kabelbaums Aktionen für das Gerät ausgelöst werden.
„Hostseitige“ und „hostgesteuerte“ Tests sind nicht ganz dasselbe:
- Hostgesteuerter Test: Ein Test, der auf dem Host ausgeführt wird und mit einem oder mehreren Geräten interagiert. Das zu testende System (System under Test, SUT) befindet sich nicht auf dem Host selbst, sondern wird vom Host aus getestet.
- Hostseitiger Test: Ein Test, der ausschließlich auf dem Host ausgeführt wird und nur etwas auf dem Host testet, z. B. Einheitentests.
Warum sollte ich einen hostgesteuerten Test anstelle eines Instrumentierungstests erstellen?
Bei einigen Tests müssen Sie möglicherweise den Gerätestatus insgesamt beeinflussen, z. B. durch Ausführen eines Neustartbefehls. Im Instrumentierungstestfall 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 auslösen, die eine Interaktion mit externen Geräten erfordern, von denen der Test abhängt.
Mit einem hostgesteuerten Test können diese Anwendungsfälle abgedeckt werden und das Gerät kann in mehr Szenarien getestet werden. In diesem Fall ist es am sinnvollsten, einen hostgesteuerten Test zu schreiben.
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 JUnit4-Test-Runner DeviceJUnit4ClassRunner ausgeführt. Die Gesamtstruktur der Testklasse ist dieselbe wie bei einem regulären JUnit4-Test:
@BeforeClass
@Before
@Test
@After
@AfterClass
Assume
,Assert
Durch Erweitern von BaseHostJunit4Test können Sie nützliche API-Testdienstprogramme erben, z. B.:
installPackage
: Ermöglicht die Installation einer APK-Datei auf dem Zielgerät.installPackageAsUser
: Ermöglicht die Installation eines APK als Nutzer auf dem Zielgerät.uninstallPackage
: Ermöglicht die Deinstallation eines APK.isPackageInstalled
: Prüft, ob ein Paket installiert ist.hasDeviceFeature
: Prüft, ob ein Gerät eine Funktion unterstützt. (pm list features
)runDeviceTests(DeviceTestRunOptions options)
: Führen Sie einen Instrumentationstest für ein Zielgerät mit DeviceTestRunOptions aus, um alle möglichen Optionen zu verarbeiten.
Gewähren Sie auch Zugriff auf das Tradefed-Geräteobjekt:
getDevice()
: Gibt ein TF-Geräteobjekt zum Bearbeiten des Geräts zurück.getBuild()
: Gibt ein TF-Objekt mit Build-Informationen zurück, um Informationen zum Build zu erhalten.getAbi()
: Gibt die ABI zurück, für die der Test ausgeführt wird.
Tradefed-Unterstützung: Gerätevorbereitung und ‑bereinigung pro Klasse
JUnit4 @BeforeClass
und @AfterClass
gelten nur für statische Methoden. Daher ist es nicht möglich, den #getDevice()
-Handler für gerätespezifische, einmalige Einrichtungs- oder Bereinigungsaufgaben pro Klasse zu verwenden. Verwenden Sie die Tradefed-Annotation, um dieses Problem zu beheben.
- @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");
}
TestInformation
ermöglicht es Ihnen, das Gerät zu verwenden und Eigenschaften zu speichern, die entweder im statischen oder nicht statischen Bereich verwendet werden können. BaseHostJUnit4Test
unterstützt das Abrufen von TestInformation
in einem nicht statischen Bereich über #getTestInformation()
.
Wenn Sie BaseHostJUnit4Test
nicht erweitern, können Sie ITestInformationReceiver
implementieren, um das TestInformation
-Objekt zu erhalten.
Hostgesteuerte Tests in Tradefed konfigurieren
In der Tradefed-XML-Konfigurationsdatei werden hostgesteuerte Tests über den Runner HostTest ausgeführt.
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>