Android Studio 使用“adb shell am仪器”时如何检索测试结果

w1jd8yoj  于 2023-06-24  发布在  Android
关注(0)|答案(4)|浏览(171)

我在我的Android设备上使用以下命令执行一些测试:
adb shell am instrument -w package.name/android.test.runner.AndroidJUnitRunner
我可以通过STDOUT看到测试进度和简单的结果。但是,这个过程是否也会在设备内部生成结果文件(xml,html等)?如果是,储存在哪里?
谢谢

smdncfj3

smdncfj31#

但是,这个过程是否也会在设备内部生成结果文件(xml,html等)?
不,不是的。
报告生成通常在比“am instrument”更高的层处理。如果您使用Gradle运行测试,它应该会为您生成报告。我相信这也是Android Studio所依赖的。
如果必须从测试本身生成报告,则可以使用自定义测试运行器。看看这个答案的一种方法:http://www.stackoverflow.com/a/5574418/1999084

olmpazwi

olmpazwi2#

我也遇到过类似的问题(当我的Jenkins在设备上运行仪器测试时,我想为它提供xml测试报告)。我通过实现“android-xml-run-listener”(https://github.com/schroepf/TestLab/tree/master/android)解决了这个问题。
要使用它,只需添加:

androidTestCompile 'de.schroepf:android-xml-run-listener:0.1.3'

到你的build.gradle(注意androidTest前缀-这不会向你的生产应用添加代码!).
要使用它,请添加:

-e listener de.schroepf.androidxmlrunlistener.XmlRunListener

到你的AM仪器命令。
要检索XML报告文件,请用途:

adb pull /storage/emulated/0/Android/data/<your-app-package-name>/files/report.xml
z3yyvxxp

z3yyvxxp3#

如果您使用AndroidTestOrchestrator执行测试,则生成XML测试结果并将其存储在devices storage/emulated/0/odo/目录中。因此,可以使用以下方式访问它们:
adb pull storage/emulated/0/odo/
我不知道为什么文档中没有提到这一点。这条路径对于真实的设备可能是不同的,我相信结果是在SDCARD的某个地方输出的。

pepwfjgg

pepwfjgg4#

我也遇到了类似的情况,发现https://docs.marathonlabs.io/非常适合我的用例。我研究过的其他选项:

  • https://docs.marathonlabs.io/是一个类似于spoon的努力,但似乎更新得更多,维护得更好。它还提供了漂亮的HTML报告,并提供了额外的功能,如测试批处理,重试和屏幕记录。
  • https://github.com/square/spoon是adb shell am instrument之上的测试运行器 Package 器,它首先运行-e log true以获得可用Espresso测试的列表,然后使用-r标志逐个运行每个测试用例,以便我们可以从原始文本输出以及每个测试用例级别的运行时获得XML测试结果。我没有走这条路,因为这会使我们的测试执行时间长得多。
  • 使用https://github.com/jamesknowsbest/Instrumentationpretty解析仪器测试的输出原始日志(-r)标志。我们将能够生成一个包含所有信息的XMLJUnit测试结果,除了测试用例级别的测试执行时间。
  • 使用adb shell am instrument -f <proto_file>将插装结果存储在protobuf文件中,读入并转换为junit xml文件。查看am/instrument.java的Android仪器源代码,当我们使用-f而不是-r运行它时,测试级运行时似乎保留了。但这意味着我们必须创建自己的protobuf解析器文件来自己生成Junit风格的XML文件。
  • https://github.com/schroepf/TestLab/tree/master/android是另一个开源工具,用于在应用程序中添加插装数据(与上面的客户端/运行器端方法相反)。它应该在Android模拟器中创建一个JUnit风格的XML结果,然后我们可以使用adb pull将其从模拟器中提取出来。

相关问题