Na tej stronie opisujemy, jak napisać test urządzenia w stylu JUnit4 sterowany przez hosta. Oznacza to, że strona hosta wiązki będzie wywoływać działania na urządzeniu.
Pamiętaj, że testy „po stronie hosta” i testy „sterowane przez hosta” nieco się od siebie różnią:
- test sterowany przez hosta: test uruchomiony na hoście, który wchodzi w interakcję z co najmniej jednym urządzeniem; Testowany system (SUT) nie znajduje się na hoście, ale jest testowany z jego poziomu.
- test po stronie hosta: test przeprowadzany wyłącznie na hoście, który testuje coś tylko na hoście, np. testy jednostkowe.
Dlaczego warto utworzyć test sterowany przez hosta zamiast testu z instrumentacją?
Niektóre testy mogą wymagać zmiany ogólnego stanu urządzenia, np. wydania polecenia ponownego uruchomienia. W przypadku testu instrumentacyjnego ponowne uruchomienie spowodowałoby przerwanie instrumentacji, test nie mógłby być kontynuowany i nie byłyby dostępne żadne wyniki.
Testy sterowane przez 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 jest napisać test oparty na hoście.
Jak w TF pisze się testy sterowane przez hosta?
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 sterowane przez hosta w Trade Federation są przeprowadzane przez moduł uruchamiający testy JUnit4 DeviceJUnit4ClassRunner. Ogólna struktura klasy testowej jest taka sama jak w przypadku zwykłego testu JUnit4:
@BeforeClass
@Before
@Test
@After
@AfterClass
Assume
,Assert
Rozszerzenie klasy BaseHostJunit4Test umożliwia dziedziczenie przydatnych interfejsów API narzędzi testowych, takich jak:
installPackage
: umożliwia zainstalowanie pakietu APK na urządzeniu docelowym.installPackageAsUser
: umożliwia zainstalowanie pliku APK jako użytkownik na urządzeniu docelowym.uninstallPackage
: umożliwia odinstalowanie pakietu APK.isPackageInstalled
: sprawdzanie, czy pakiet jest zainstalowany.hasDeviceFeature
: sprawdza, czy urządzenie obsługuje daną funkcję. (pm list features
)runDeviceTests(DeviceTestRunOptions options)
: przeprowadź test instrumentacji na urządzeniu docelowym za pomocą klasy DeviceTestRunOptions, aby obsłużyć wszystkie możliwe opcje.
Zapewnij też dostęp 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ć informacje o kompilacji.getAbi()
: zwraca interfejs ABI, w którym jest przeprowadzany test.
Obsługa Tradefed: przygotowywanie i czyszczenie urządzenia w przypadku poszczególnych klas
JUnit4 @BeforeClass
i @AfterClass
mają zastosowanie tylko do metod statycznych, co uniemożliwia użycie modułu obsługi #getDevice()
do jednorazowej konfiguracji lub czyszczenia specyficznego dla urządzenia w przypadku poszczególnych klas. Aby rozwiązać ten problem, użyj adnotacji Tradefed.
- @BeforeClassWithInfo: uruchamia się przed adnotacjami @BeforeClass.
- @AfterClassWithInfo: uruchamia się 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 urządzenia i przechowywanie właściwości, które mogą być używane w zakresie statycznym lub niestatycznym. BaseHostJUnit4Test
obsługuje pobieranie TestInformation
w zakresie niestatycznym za pomocą #getTestInformation()
.
Jeśli nie rozszerzasz BaseHostJUnit4Test
, możesz zaimplementować ITestInformationReceiver
, aby otrzymać obiekt TestInformation
.
Jak skonfigurować test sterowany przez hosta w Tradefed?
W pliku konfiguracji XML Tradefed testy sterowane przez hosta są uruchamiane za pomocą narzędzia HostTest.
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>