本页介绍如何编写由主机驱动的 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
支持通过#getTestInformation()
在非静态范围内获取TestInformation
。
如果您不扩展BaseHostJUnit4Test
,则可以实现ITestInformationReceiver
以接收TestInformation
对象。
如何在 Tradefed 中配置主机驱动测试?
在 Tradefed XML 配置文件中,主机驱动的测试通过HostTest运行程序运行。
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>