我查看了 CTS 中可用的已知失败测试计划,其中排除了已知失败的 CTS 测试。从那里我很清楚,您可以使用此 XML 选项排除测试:
.....
<option name="compatibility:exclude-filter" value="CtsAppSecurityHostTestCases android.appsecurity.cts.DocumentsTest#testCreateNew" />
<option name="compatibility:exclude-filter" value="CtsAppSecurityHostTestCases android.appsecurity.cts.DocumentsTest#testCreateWebLink" />
<option name="compatibility:exclude-filter" value="CtsAppSecurityHostTestCases android.appsecurity.cts.DocumentsTest#testEject" />
.....
因此,我创建了一个my-known-failures.xml,其中包含大约 100 个要排除的测试。并像这样将我的 my-known-failures.xml包含在 cts-suite.xml 中。
<configuration description="Runs CTS as a suite">
...
<include name="my-known-failures" />
当我运行 cts-suite.xml 时,我使用以下命令启动它:
./${CTS_BIN} run commandAndExit cts-suite-automated --logcat-on-failure --bugreport-on-failure --screenshot-on-failure --log-level-display debug
该报告表明 cts-tradefed 框架已获取我的配置:
Excludes:[ .... CtsAppSecurityHostTestCases android.appsecurity.cts.DocumentsTest#testCreateNew, CtsAppSecurityHostTestCases android.appsecurity.cts.DocumentsTest#testCreateWebLink, CtsAppSecurityHostTestCases android.appsecurity.cts.DocumentsTest#testEject ... ]
但是,看起来这些测试确实已经执行了,因为在 test_result.xml 中我们看到测试用例已给出“失败”结果,并且包含堆栈跟踪:
<Test result="fail" name="testEjected">
<Failure message="java.lang.AssertionError: Devices that claim to support adoptable storage must have adoptable media inserted during CTS to verify correct behavior">
<StackTrace>java.lang.AssertionError: Devices that claim to support adoptable storage must have adoptable media inserted during CTS to verify correct behavior
at android.appsecurity.cts.AdoptableHostTest.getAdoptionDisk(AdoptableHostTest.java:311)
at android.appsecurity.cts.AdoptableHostTest.testEjected(AdoptableHostTest.java:251)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at junit.framework.TestCase.runTest(TestCase.java:176)
at junit.framework.TestCase.runBare(TestCase.java:141)
at com.android.tradefed.testtype.DeviceTestResult$1.protect(DeviceTestResult.java:90)
at com.android.tradefed.testtype.DeviceTestResult.runProtected(DeviceTestResult.java:65)
at com.android.tradefed.testtype.DeviceTestResult.run(DeviceTestResult.java:94)
at junit.framework.TestCase.run(TestCase.java:129)
at com.android.tradefed.testtype.DeviceTestCase.run(DeviceTestCase.java:183)
at com.android.tradefed.testtype.JUnitRunUtil.runTest(JUnitRunUtil.java:55)
at com.android.tradefed.testtype.JUnitRunUtil.runTest(JUnitRunUtil.java:38)
at com.android.tradefed.testtype.DeviceTestCase.run(DeviceTestCase.java:148)
at com.android.tradefed.testtype.HostTest.runRemoteTest(HostTest.java:463)
at com.android.tradefed.testtype.HostTest.runTestClasses(HostTest.java:406)
at com.android.tradefed.testtype.HostTest.run(HostTest.java:397)
at com.android.compatibility.common.tradefed.testtype.JarHostTest.run(JarHostTest.java:142)
at com.android.tradefed.testtype.suite.ModuleDefinition.run(ModuleDefinition.java:278)
at com.android.tradefed.testtype.suite.ITestSuite.runSingleModule(ITestSuite.java:276)
at com.android.tradefed.testtype.suite.ITestSuite.run(ITestSuite.java:225)
at com.android.tradefed.invoker.TestInvocation.runTests(TestInvocation.java:793)
at com.android.tradefed.invoker.TestInvocation.prepareAndRun(TestInvocation.java:476)
at com.android.tradefed.invoker.TestInvocation.performInvocation(TestInvocation.java:330)
at com.android.tradefed.invoker.TestInvocation.invoke(TestInvocation.java:921)
at com.android.tradefed.command.CommandScheduler$InvocationThread.run(CommandScheduler.java:555)
</StackTrace>
</Failure>
所以我很困惑。我知道 cts-tradefed 框架确实排除了一些带有已知失败计划的测试,但是当我尝试做同样的事情时,它并没有按预期工作。
是否可以对 cts-suite.xml 进行排除测试的测试计划?
谢谢!