Pisanie testu prowadzonego przez hosta w federacji handlowej

Na tej stronie dowiesz się, jak napisać test urządzenia w stylu JUnit4 uruchamiany przez hosta. Oznacza to, że strona hosta będzie wywoływać działania przeciwko urządzenia.

Pamiętaj, że strona jest uznawana za stronę „po stronie hosta”. z testami i hostem testy powinny być różne:

  • test oparty na hoście: to test działający na hoście, który współdziała z jednym lub więcej urządzeń. Testowany system nie znajduje się na hoście, ale jest które są testowane przez hosta.
  • test po stronie hosta: test przeprowadzany tylko na hoście i testujący coś tylko na hoście, na przykład do testów jednostkowych.

Dlaczego lepiej utworzyć test oparty na hoście zamiast testu z instrumentacją?

Niektóre testy mogą wymagać wpływu na ogólny stan urządzenia, np. wydania polecenia ponownego uruchomienia. W przypadku testowania instrumentacji ponowne uruchomienie spowodowałoby wyłączenie narzędzia, test nie mógł być kontynuowany i nie były dostępne żadne wyniki.

Testy prowadzone przez hosta mogą też wymagać wykonywania dodatkowych czynności konfiguracyjnych, które wymagają interakcji z urządzeniami zewnętrznymi, od których zależy wynik testu.

Test oparty na hoście obsługuje te przypadki użycia i umożliwia zaawansowane testowanie w większej liczbie sytuacji. Jeśli jesteś w takiej sytuacji, napisz jest najsensowniejszy.

W jaki sposób testy oparte na hoście są zapisywane w TF?

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 prowadzone przez hosta w federacji handlu są oparte na: DeviceJUnit4ClassRunner Uruchamiający testy JUnit4. Ogólna struktura klasy testowej jest taka sama jak zwykły test JUnit4:

  • @BeforeClass
  • @Before
  • @Test
  • @After
  • @AfterClass
  • Assume, Assert

Przedłużam BaseHostJunit4Test to sposób dziedziczenia interfejsu API narzędzi testowych, takich jak:

  • installPackage: umożliwia instalowanie pakietu APK na urządzeniu docelowym.
  • installPackageAsUser: umożliwia instalowanie pliku APK jako użytkownik w środowisku docelowym. urządzenia.
  • uninstallPackage: umożliwia odinstalowanie pakietu APK.
  • isPackageInstalled: sprawdź, czy jest zainstalowany pakiet.
  • hasDeviceFeature: sprawdź, czy urządzenie obsługuje daną funkcję. (pm list features)
  • runDeviceTests(DeviceTestRunOptions options): uruchamianie instrumentacji wykonaj test na urządzeniu docelowym za pomocą DeviceTestRunOptions aby zapoznać się z wszystkimi możliwymi opcjami.

Udziel też dostępu do obiektu urządzenia Tradefed:

  • getDevice(): zwraca obiekt urządzenia TF służący do manipulowania urządzeniem.
  • getBuild(): zwraca obiekt TF z informacjami o kompilacji, aby uzyskać informacje o tworzyć.
  • getAbi(): zwraca interfejs ABI używany przez test.

Pomoc techniczna Tradefed: przygotowywanie i czyszczenie urządzeń w zależności od klasy

JUnit4 @BeforeClass i @AfterClass mają zastosowanie tylko do metod statycznych, co uniemożliwia użycie modułu obsługi #getDevice() do wykonywania jednorazowa konfiguracja dla danej klasy lub rozwiązanie do czyszczenia urządzenia. Aby rozwiązać ten problem, użyj funkcji z 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 przechowywania właściwości, których można w zakresie statycznym lub niestatycznym. BaseHostJUnit4Test obsługuje pobieranie danych TestInformation w zakresie niestatycznym za pomocą #getTestInformation().

Jeśli nie rozszerzasz rozszerzenia BaseHostJUnit4Test, możesz zaimplementować ITestInformationReceiver, aby otrzymać obiekt TestInformation.

Jak skonfigurować test oparty na hoście w Tradefed?

W pliku konfiguracji XML Tradefed testy oparte na hoście są uruchamiane przez Test Host biegacz.

<test class="com.android.tradefed.testtype.HostTest" >
    <option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>