Напишите тест, управляемый хостом, в торговой федерации

На этой странице описывается, как написать тест устройства в стиле JUnit4, управляемый хостом. Это означает, что хост-сторона привязи будет запускать действия против устройства.

Обратите внимание, что мы считаем, что тесты на стороне хоста и тесты на хосте немного отличаются:

  • Хост-управляемый тест: это тест, запущенный на хосте, который взаимодействует с одним или несколькими устройствами. Тестируемая система (SUT) не находится на самом хосте, а тестируется с хоста.
  • Тест на стороне хоста: это тест, который выполняется исключительно на хосте и тестирует что-то только на хосте, например модульные тесты.

Зачем создавать тест, управляемый хостом, а не инструментальный тест?

Некоторые тесты могут потребовать от вас повлиять на общее состояние устройства, например, выполнить команду перезагрузки. В тестовом случае инструментария перезагрузка приведет к его уничтожению, тест не может быть продолжен, и результаты будут недоступны.

Тесты, управляемые хостом, также могут включать дополнительные шаги настройки, требующие взаимодействия с внешними устройствами, от которых зависит тест.

Тест, управляемый хостом, может обрабатывать эти варианты использования и обеспечивать расширенное тестирование устройства с большим количеством сценариев. Если вы находитесь в такой ситуации, лучше всего будет написать тест, управляемый хостом.

Как тесты, управляемые хостом, написаны в TF?

Вот образец:

@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());
    }
}

Принимающие управляемые испытания в Торговой Федерации приводятся в DeviceJUnit4ClassRunner тест бегун JUnit4. Общая структура тестового класса такая же, как у обычного теста JUnit4:

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

Расширение BaseHostJunit4Test способ наследовать полезное тестирование утилиты API , такие как:

  • installPackage : Позволяет установить APK на целевом устройстве.
  • installPackageAsUser : Позволяет установить APK , как пользователь на целевом устройстве.
  • uninstallPackage : Позволяет деинсталлировать APK.
  • isPackageInstalled : Проверьте, установлен ли пакет или нет.
  • hasDeviceFeature : поддерживает ли устройство Проверьте функцию или нет. ( pm list features )
  • runDeviceTests(DeviceTestRunOptions options) : Выполнить тест приборного против целевого устройства с помощью DeviceTestRunOptions обрабатывать все возможные варианты.

Также предоставьте доступ к объекту устройства Tradefed:

  • getDevice() : Возвращает объект устройства TF для манипулирования устройства.
  • getBuild() : Возвращает объект информации TF сборки , чтобы получить информацию о сборке.
  • getAbi() : Возвращает ABI тест работает против.

Поддержка Tradefed: подготовка и очистка устройства для каждого класса

JUnit4 @BeforeClass и @AfterClass применимы только к статическим методам, что делает невозможным использование #getDevice() обработчика , чтобы сделать некоторые устройства специфичными, разово, в-класс установки или очистки. Чтобы решить эту проблему, воспользуйтесь аннотацией Tradefed.

  • @BeforeClassWithInfo: запускается перед аннотациями @BeforeClass
  • @AfterClassWithInfo: запускается после аннотаций @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 позволяет использовать свойство устройства и хранения , которые могут быть использованы либо в статической или нестатической сфере. BaseHostJUnit4Test поддерживает получение в TestInformation в нестатическом объеме с помощью #getTestInformation() .

Если вы не распространяющие BaseHostJUnit4Test , вы можете реализовать ITestInformationReceiver для того , чтобы получить TestInformation объект.

Как настроить тест через хост в Tradefed?

В конфигурационном файле XML Tradefed, хост - управляемые тесты проходят через HostTest бегуна.

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