На этой странице описывается, как написать тест устройства в стиле 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?
В XML-файле конфигурации Tradefed тесты, управляемые хостом, запускаются через средство запуска HostTest .
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>