Napisz test sterowany przez hosta w Federacji Handlowej

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>