На этой странице описывается, как написать тест устройства в стиле 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 запускаются с помощью класса JUnit4 Test Runner — 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()
: возвращает объект устройства 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>