如何从CLI测试后获取gcloud Firebase测试实验室Android Espresso结果?

use*_*109 4 android travis-ci firebase gcloud firebase-test-lab

我们将Travis CI与Fastlane结合使用,进行自动构建和夜间UI Espresso测试.对于仪器测试,我们尝试使用gcloud命令行工具使用Firebase测试实验室.

我试图让测试结果易于使用格式,以便我可以在内部向Slack报告,例如通过或失败的测试数量以及哪些测试失败.

./google-cloud-sdk/bin/gcloud beta firebase test android run \
--type instrumentation \
--app ourapp/app/build/outputs/apk/mock/debug/app-mock-debug-local.apk \
--test ourapp/app/build/outputs/apk/androidTest/mock/debug/ourapp-mock-debug-androidTest.apk \
--device-ids hammerhead \
--os-version-ids 22 \
--locales en \
--orientations portrait \
--project ourappgoogleprojectid \
--timeout 15m
Run Code Online (Sandbox Code Playgroud)

这一切都可以很好地执行测试并打印两个指向Google云存储桶中原始结果的链接,其中包含一些随机链接以及一些这样的日志:

Raw results will be stored in your GCS bucket at [https://console.developers.google.com/storage/browser/test-lab-vx5ak1y4tt3sw-yrzyhxjh4r1r6/]

13:25:59 Test is Pending
13:26:06 Starting attempt 1
13:26:06 Test is Running
13:26:46 Logging into the device
13:26:53 Installing APK: com.ourcompany.ourapp.debug
13:27:13 Installing APK: com.ourcompany.ourapp.test
13:27:33 Running instrumentation test. Package: com.ourcompany.ourapp.test testrunner: android.support.test.runner.AndroidJUnitRunner orchestrator: false options: []
13:34:34 Instrumentation test has finished
13:34:34 Generating video
13:34:41 Retrieving performance samples
13:35:00 Retrieving test artifacts
13:35:13 Retrieving any crash results
13:35:20 Retrieving logcat
13:35:53 Done. Test time=416 (secs)
13:36:00 Test is Finished

Instrumentation testing complete.
Run Code Online (Sandbox Code Playgroud)

最后它打印出我最感兴趣的内容:

??????????????????????????????????????????????????????????????
? OUTCOME ?      TEST_AXIS_VALUE      ?     TEST_DETAILS     ?
??????????????????????????????????????????????????????????????
? Passed  ? hammerhead-22-en-portrait ? 60 test cases passed ?
??????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

但是,除此之外,我无法从中获得结果的良好,可行,快速的总结.

我想我只能通过以下方式做到:

grep/awk/sed /它在输出中输出的桶url.但是这个网址有一些随机ID和诸如此类的东西.然后从Travis的bash脚本中尝试下载该存储桶中的xml文件.但是所有测试结果xml都在各自的文件夹中,这些文件夹以测试运行的设备命名.例如hammerhead-22-en-portrait.这样的麻烦只是为了得到一个简单的测试总结.我只需要在上面打印的表中的信息.

有没有gcloud我缺少的命令选项?文档太可怕了.我希望可以选择立即下载正确的xml文件,或者用它来设置具有正确信息的环境变量.

或者有没有办法轻松从该表中提取值?

编辑:我刚刚发现Android Studio支持设置运行配置,自动构建,上传apk并在Firebase测试实验室矩阵上执行测试.然后,您可以在Android Studio的"运行"选项卡中获得一个不错的测试报告.从这里,您可以将这些测试结果导出为HTML或XML.XML正是我想要的.有人知道Android Studio使用哪些工具来执行此操作,或者我如何使用命令行工具执行相同操作?

小智 8

以下是一些有助于您尝试做的提示.

关于结果路径中的默认随机ID:您可以使用该--results-dir=my/results/path标志对该路径进行更多控制(只需确保为您运行的每个测试选择一个唯一值).您还可以指定--results-bucket=gs://my-bucket控制存储测试结果的顶级存储桶.请注意,如果您使用--results-bucket,则需要使用GCP结算帐户,并且会对结果产生云存储费用; 您可以免费使用提供的默认存储桶,并且它的路径应该保持稳定以便编写脚本.

gcloud firebase test android run命令的所有标志选项都记录在这里,或通过CLI将-help添加到任何gcloud命令或命令片段中.

使用这些标志,您应该能够使用gsutil cp <src> <dst>命令直接从原始结果中获取junit.xml文件.

如果要直接解析gcloud输出,知道在将所有状态更新打印到stderr时将测试结果表打印到stdout是很有用的.因此,您可以通过添加1>results.out到命令来仅隔离结果.您还可以通过--format=<format>标志控制输出表的格式(在所有gcloud命令上都可用).例如,如果添加--format=json 1>results.out到上面的命令,输出将如下所示:

[
  {
    "axis_value": "hammerhead-21-en-portrait",
    "outcome": "Failed",
    "test_details": "5 test cases failed, 187 passed"
  }
]
Run Code Online (Sandbox Code Playgroud)

您可以通过运行了解有关gcloud格式的更多信息gcloud topic formats.