Na tej stronie opisano, jak napisać test urządzenia w stylu JUnit4 sterowany przez hosta. Oznacza to, że strona hosta wiązki uruchomi działania przeciwko urządzeniu.
Zauważ, że uważamy, że testy „po stronie hosta” i „sterowane przez hosta” są nieco inne:
- test sterowany przez hosta: to 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 samym hoście, ale jest testowany z poziomu hosta.
- test po stronie hosta: jest testem uruchamianym wyłącznie na hoście i testującym coś tylko na hoście, na przykład testy jednostkowe.
Po co tworzyć test oparty na hoście, a nie test oprzyrządowania?
Niektóre testy mogą wymagać zmiany ogólnego stanu urządzenia, na przykład wydania polecenia ponownego uruchomienia. W przypadku testu oprzyrządowania ponowne uruchomienie spowodowałoby uszkodzenie oprzyrządowania, test nie mógł być kontynuowany i nie byłyby dostępne żadne wyniki.
Testy sterowane przez hosta mogą również obejmować dodatkowe etapy konfiguracji, które wymagają interakcji z urządzeniami zewnętrznymi, od których zależy test.
Test sterowany przez hosta może obsłużyć te przypadki użycia i umożliwić zaawansowane testowanie urządzenia przy użyciu większej liczby scenariuszy. Jeśli jesteś w takiej sytuacji, napisanie testu sterowanego przez hosta ma największy sens.
W jaki sposób testy sterowane hostem są zapisywane w TF?
Oto próbka:
@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 Federacji Handlowej są obsługiwane przez moduł uruchamiający testy DeviceJUnit4ClassRunner JUnit4. Ogólna struktura klasy testowej jest taka sama jak zwykłego testu JUnit4:
-
@BeforeClass
-
@Before
-
@Test
-
@After
-
@AfterClass
-
Assume
,Assert
Rozszerzanie BaseHostJunit4Test to sposób na dziedziczenie przydatnych 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
: Sprawdź, czy pakiet jest zainstalowany, czy nie. -
hasDeviceFeature
: Sprawdź, czy urządzenie obsługuje daną funkcję, czy nie. (pm list features
) -
runDeviceTests(DeviceTestRunOptions options)
: Uruchom test oprzyrządowania na urządzeniu docelowym przy użyciu DeviceTestRunOptions , aby obsłużyć wszystkie możliwe opcje.
Zapewnij także 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 ABI, na podstawie którego działa test.
Wsparcie Tradefed: przygotowanie i czyszczenie urządzeń dla poszczególnych klas
JUnit4 @BeforeClass
i @AfterClass
mają zastosowanie tylko do metod statycznych, co uniemożliwia użycie procedury obsługi #getDevice()
do wykonania jednorazowej konfiguracji lub czyszczenia specyficznej dla urządzenia dla każdej klasy. 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 właściwości urządzenia i przechowywania, których można używać 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
w celu otrzymania obiektu TestInformation
.
Jak skonfigurować test sterowany hostem w Tradefed?
W pliku konfiguracyjnym Tradefed XML testy sterowane przez hosta są uruchamiane za pomocą modułu uruchamiającego HostTest .
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>