На этой странице описано, как написать тест устройства в стиле 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
and @AfterClass
are only applicable to static methods, which makes it impossible to use the #getDevice()
handler to do some device-specific, one-time, per-class setup or clean up. Чтобы решить эту проблему, используйте аннотацию 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>