На этой странице описывается, как написать тест устройства в стиле JUnit4, управляемый хостом. Это означает, что хост-сторона тестового набора будет запускать действия над устройством.
Обратите внимание, что мы рассматриваем тесты, выполняемые на стороне хоста, и тесты, управляемые хостом, как несколько разные вещи:
- Тестирование, управляемое хостом: это тест, выполняемый на хосте и взаимодействующий с одним или несколькими устройствами. Тестируемая система (SUT) находится не на самом хосте, а тестируется с хоста.
- Тестирование на стороне хоста: это тест, который выполняется исключительно на хосте и проверяет что-либо только на хосте, например, модульные тесты.
Почему нужно создавать тест, управляемый хостом, а не инструментальный тест?
Для некоторых тестов может потребоваться изменение общего состояния устройства, например, отправка команды перезагрузки. В случае инструментального тестирования перезагрузка приведет к завершению работы инструментария, тест не сможет быть продолжен, и результаты будут недоступны.
Тесты, управляемые хостом, также могут включать дополнительные этапы настройки, требующие взаимодействия с внешними устройствами, от которых зависит тест.
Тестирование, управляемое хостом, может справиться с этими сценариями использования и позволить проводить расширенное тестирование устройства в большем количестве ситуаций. Если вы оказались в такой ситуации, написание теста, управляемого хостом, будет наиболее целесообразным.
Как пишутся тесты, управляемые хостом, в TensorFlow?
Вот пример:
@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 тесты, управляемые хостом, запускаются с помощью средства запуска тестов JUnit4 DeviceJUnit4ClassRunner . Общая структура тестового класса такая же, как и у обычного теста 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(): Возвращает объект устройства TensorFlow для управления устройством. -
getBuild(): Возвращает объект TensorFlow с информацией о сборке. -
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>