Na tej stronie opisano, jak napisać test urządzenia w stylu JUnit4 sterowany przez hosta. Oznacza to, że strona hosta w uprzęży będzie uruchamiać działania dotyczące urządzenia.
Pamiętaj, że testy „po stronie hosta” i „sterowane przez hosta” różnią się od siebie w następujący sposób:
- test sterowany przez hosta: test uruchamiany na hoście, który wchodzi w interakcję z jednym lub większą liczbą urządzeń; Testowany system (SUT) nie znajduje się na hoście, ale jest testowany z jego poziomu.
- test po stronie hosta: test wykonywany wyłącznie na hoście i sprawdzający tylko hosta, np. testy jednostkowe;
Dlaczego warto utworzyć test host-driven zamiast testu z instrumentacją?
Niektóre testy mogą wymagać wpływu na ogólny stan urządzenia, na przykład wydania polecenia ponownego uruchamiania. W przypadku testowania instrumentacji ponowne uruchomienie skutkowało zamknięciem instrumentu, kontynuacją testu i brakiem dostępnych wyników.
Testy hosta mogą też wymagać dodatkowych kroków konfiguracji, które wymagają interakcji z urządzeniami zewnętrznymi, od których zależy test.
Test sterowany przez hosta może obsługiwać te przypadki użycia i umożliwiać zaawansowane testowanie urządzenia w większej liczbie scenariuszy. W takiej sytuacji najlepiej napisać test przeprowadzany przez hosta.
W jaki sposób testy oparte na hoście są zapisywane w TF?
Oto przykład:
@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());
}
}
Testy hostowane w ramach federacji wymiany danych są uruchamiane przez DeviceJUnit4ClassRunner, czyli testujący JUnit4. Ogólna struktura klasy testowej jest taka sama jak zwykły test JUnit4:
@BeforeClass
@Before
@Test
@After
@AfterClass
Assume
,Assert
Rozszerzenie BaseHostJunit4Test to sposób na dziedziczenie przydatnych interfejsów API narzędzi do testowania, takich jak:
installPackage
: umożliwia instalowanie pakietu APK na urządzeniu docelowym.installPackageAsUser
: umożliwia instalację pliku APK jako użytkownika na urządzeniu docelowym.uninstallPackage
: umożliwia odinstalowanie pliku APK.isPackageInstalled
: sprawdzanie, czy pakiet jest zainstalowany.hasDeviceFeature
: sprawdź, czy urządzenie obsługuje daną funkcję. (pm list features
)runDeviceTests(DeviceTestRunOptions options)
: przeprowadź test instrumentacji na urządzeniu docelowym, używając opcji DeviceTestRunOptions, aby obsłużyć wszystkie możliwe opcje.
Udzielaj też dostępu do obiektu urządzenia Tradefed:
getDevice()
: zwraca obiekt urządzenia TF do manipulowania urządzeniem.getBuild()
: zwraca obiekt TF z informacjami o kompilacji, aby uzyskać o niej informacje.getAbi()
: zwraca interfejs ABI, na którym jest wykonywany test.
Obsługa Tradefed: przygotowanie i czyszczenie urządzeń w poszczególnych klasach
JUnit4 @BeforeClass
i @AfterClass
są stosowane tylko do metod statycznych, co uniemożliwia użycie #getDevice()
do jednorazowego konfigurowania lub czyszczenia na urządzeniu w ramach danej klasy. Aby rozwiązać ten problem, użyj adnotacji Tradefed.
- @BeforeClassWithInfo: działa przed adnotacjami @BeforeClass
- @AfterClassWithInfo: działa po adnotacjach @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
umożliwia korzystanie z właściwości urządzenia i sklepu, które można stosować w zakresie statycznym lub niestatycznym. BaseHostJUnit4Test
obsługuje pobieranie TestInformation
w zakresie niestatycznym za pomocą #getTestInformation()
.
Jeśli nie rozszerzasz interfejsu BaseHostJUnit4Test
, możesz zaimplementować interfejs ITestInformationReceiver
, aby otrzymać obiekt TestInformation
.
Jak skonfigurować test host-driven w Tradefed?
W pliku konfiguracji XML Tradefed testy oparte na hoście są uruchamiane przez uruchomienie testu HostTest.
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>