Напишите управляемый хостом тест в Trade Federation.

На этой странице описано, как написать тест устройства в стиле 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());
    }
}

Управляемые хостом тесты в Trade Federation выполняются средством выполнения тестов 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?

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

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