Napisz test sterowany przez hosta w Federacji Handlowej

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>