Ta strona opisuje, jak napisać test urządzenia w stylu JUnit4 sterowany przez hosta. Oznacza to, że strona hosta uprzęży będzie wyzwalać działania przeciwko urządzeniu.
Zauważ, że uważamy, że testy „po stronie hosta” i testy „sterowane przez hosta” są nieco inne:
- Test sterowany przez hosta: jest to test uruchomiony na hoście, który współdziała z co najmniej jednym urządzeniem. Testowany system (SUT) nie znajduje się na samym hoście, ale jest testowany z hosta.
- test po stronie hosta: jest to test działający wyłącznie na hoście i testujący coś tylko na hoście, na przykład testy jednostkowe.
Po co tworzyć test sterowany przez hosta, a nie test instrumentacji?
Niektóre testy mogą wymagać zmiany ogólnego stanu urządzenia, na przykład wydania polecenia ponownego uruchomienia. W przypadku testowym oprzyrządowania ponowne uruchomienie zabiłoby oprzyrządowanie, test nie mógł być kontynuowany i żadne wyniki nie byłyby dostępne.
Testy sterowane przez hosta mogą również prowadzić do 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łużyć te przypadki użycia i umożliwić zaawansowane testowanie urządzenia z większą liczbą scenariuszy. Jeśli jesteś w takiej sytuacji, najbardziej sensowne jest napisanie testu sterowanego przez hosta.
Jak pisane są testy sterowane przez hosta 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ą prowadzone przez program 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
Rozszerzenie BaseHostJunit4Test to sposób na odziedziczenie przydatnych narzędzi testowych API, takich jak:
-
installPackage
: Umożliwia zainstalowanie pakietu APK na urządzeniu docelowym. -
installPackageAsUser
: umożliwia zainstalowanie pakietu APK jako użytkownik na urządzeniu docelowym. -
uninstallPackage
: Pozwala odinstalować pakiet 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 instrumentacji na urządzeniu docelowym przy użyciu DeviceTestRunOptions do obsługi wszystkich możliwych opcji.
Zapewnij również dostęp do obiektu urządzenia Tradefed:
-
getDevice()
: Zwraca obiekt urządzenia TF do manipulowania urządzeniem. -
getBuild()
: Zwraca obiekt TF informacji o kompilacji, aby uzyskać informacje o kompilacji. -
getAbi()
: Zwraca ABI, na którym działa test.
Wsparcie Tradefed: Przygotowanie i czyszczenie urządzeń według klasy
JUnit4 @BeforeClass
i @AfterClass
mają zastosowanie tylko do metod statycznych, co uniemożliwia użycie procedury obsługi #getDevice()
do wykonania pewnych, jednorazowych, specyficznych dla urządzenia konfiguracji lub czyszczenia 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 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 niestatycznym zakresie za pośrednictwem #getTestInformation()
.
Jeśli nie rozszerzasz BaseHostJUnit4Test
, możesz zaimplementować ITestInformationReceiver
w celu otrzymania obiektu TestInformation
.
Jak skonfigurować test host-driven w Tradefed?
W pliku konfiguracyjnym Tradefed XML testy sterowane przez hosta są uruchamiane przez program uruchamiający HostTest .
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>