从 CLI 测试后如何获取 gcloud Firebase 测试实验室 Android Espresso 结果?
How to fetch gcloud Firebase test lab Android Espresso results after testing from CLI?
我们将 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
这一切都可以很好地执行测试,并在 Google 云存储桶中打印两个指向原始结果的链接,其中包含一些 运行dom 链接和一些日志,如下所示:
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.
最后它打印出我最感兴趣的内容:
┌─────────┬───────────────────────────┬──────────────────────┐
│ OUTCOME │ TEST_AXIS_VALUE │ TEST_DETAILS │
├─────────┼───────────────────────────┼──────────────────────┤
│ Passed │ hammerhead-22-en-portrait │ 60 test cases passed │
└─────────┴───────────────────────────┴──────────────────────┘
但是我无法从中得到一个好的、可行的、快速的结果总结。
我觉得只能这样了:
Grep/awk/sed/whatever 它在输出中打印的桶 url。但是 url 有一些 运行dom ID 等等。然后从 Travis 中的 bash 脚本以某种方式尝试下载该存储桶中的 xml 文件。但是所有测试结果 xml 都在各自的文件夹中,这些文件夹以测试 运行 所用的设备命名。例如 hammerhead-22-en-portrait
。这么麻烦只是为了得到一个简单的测试总结。我只需要上面打印的 table 中的信息。
是否缺少任何 gcloud
命令选项?文档太可怕了。我希望有选项可以立即下载正确的 xml 文件,或者用正确的信息或其他东西设置环境变量。
或者有没有一种方法可以轻松地从 table 中提取值?
编辑:
我刚刚发现 Android Studio 支持设置 运行 配置,自动构建、上传 apk 并在 Firebase 测试实验室矩阵上执行测试。然后,您会在 Android Studio 的 'Run' 选项卡中获得一份不错的测试报告。从这里您可以将这些测试结果导出到 HTML 或 XML。那个 XML 正是我想要的。有人知道 Android Studio 使用什么工具来执行此操作,或者我如何使用命令行工具来执行此操作?
这里有一些小贴士,应该对您的尝试有所帮助。
关于结果路径中的默认随机 ID:您可以使用 --results-dir=my/results/path
标志对该路径进行更多控制(只需确保为每个测试选择一个唯一值 运行 ).您还可以指定 --results-bucket=gs://my-bucket
来控制存储测试结果的顶级存储桶。请注意,如果您使用 --results-bucket,您需要一个 GCP 计费帐户,并且会为您的结果产生云存储费用;您可以免费使用提供的默认存储桶,并且它的路径应该保留 stable 用于脚本。
gcloud firebase test android run
命令的所有标志选项都是 documented here 或通过 CLI 将 --help 添加到任何 gcloud 命令或命令片段。
使用这些标志,您应该能够使用 gsutil cp <src> <dst>
命令直接从原始结果中获取 junit.xml 文件。
如果你想直接解析 gcloud 输出,知道测试结果 table 被打印到 stdout 而所有状态更新被打印到 stderr 是很有用的。因此,您可以通过在命令中添加 1>results.out
来隔离结果。您还可以通过 --format=<format>
标志控制输出 table 的格式(适用于所有 gcloud 命令)。例如,如果您将 --format=json 1>results.out
添加到上面的命令中,输出将如下所示:
[
{
"axis_value": "hammerhead-21-en-portrait",
"outcome": "Failed",
"test_details": "5 test cases failed, 187 passed"
}
]
您可以通过 运行ning gcloud topic formats
了解有关 gcloud 格式的更多信息。
我们将 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
这一切都可以很好地执行测试,并在 Google 云存储桶中打印两个指向原始结果的链接,其中包含一些 运行dom 链接和一些日志,如下所示:
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.
最后它打印出我最感兴趣的内容:
┌─────────┬───────────────────────────┬──────────────────────┐
│ OUTCOME │ TEST_AXIS_VALUE │ TEST_DETAILS │
├─────────┼───────────────────────────┼──────────────────────┤
│ Passed │ hammerhead-22-en-portrait │ 60 test cases passed │
└─────────┴───────────────────────────┴──────────────────────┘
但是我无法从中得到一个好的、可行的、快速的结果总结。
我觉得只能这样了:
Grep/awk/sed/whatever 它在输出中打印的桶 url。但是 url 有一些 运行dom ID 等等。然后从 Travis 中的 bash 脚本以某种方式尝试下载该存储桶中的 xml 文件。但是所有测试结果 xml 都在各自的文件夹中,这些文件夹以测试 运行 所用的设备命名。例如 hammerhead-22-en-portrait
。这么麻烦只是为了得到一个简单的测试总结。我只需要上面打印的 table 中的信息。
是否缺少任何 gcloud
命令选项?文档太可怕了。我希望有选项可以立即下载正确的 xml 文件,或者用正确的信息或其他东西设置环境变量。
或者有没有一种方法可以轻松地从 table 中提取值?
编辑: 我刚刚发现 Android Studio 支持设置 运行 配置,自动构建、上传 apk 并在 Firebase 测试实验室矩阵上执行测试。然后,您会在 Android Studio 的 'Run' 选项卡中获得一份不错的测试报告。从这里您可以将这些测试结果导出到 HTML 或 XML。那个 XML 正是我想要的。有人知道 Android Studio 使用什么工具来执行此操作,或者我如何使用命令行工具来执行此操作?
这里有一些小贴士,应该对您的尝试有所帮助。
关于结果路径中的默认随机 ID:您可以使用 --results-dir=my/results/path
标志对该路径进行更多控制(只需确保为每个测试选择一个唯一值 运行 ).您还可以指定 --results-bucket=gs://my-bucket
来控制存储测试结果的顶级存储桶。请注意,如果您使用 --results-bucket,您需要一个 GCP 计费帐户,并且会为您的结果产生云存储费用;您可以免费使用提供的默认存储桶,并且它的路径应该保留 stable 用于脚本。
gcloud firebase test android run
命令的所有标志选项都是 documented here 或通过 CLI 将 --help 添加到任何 gcloud 命令或命令片段。
使用这些标志,您应该能够使用 gsutil cp <src> <dst>
命令直接从原始结果中获取 junit.xml 文件。
如果你想直接解析 gcloud 输出,知道测试结果 table 被打印到 stdout 而所有状态更新被打印到 stderr 是很有用的。因此,您可以通过在命令中添加 1>results.out
来隔离结果。您还可以通过 --format=<format>
标志控制输出 table 的格式(适用于所有 gcloud 命令)。例如,如果您将 --format=json 1>results.out
添加到上面的命令中,输出将如下所示:
[
{
"axis_value": "hammerhead-21-en-portrait",
"outcome": "Failed",
"test_details": "5 test cases failed, 187 passed"
}
]
您可以通过 运行ning gcloud topic formats
了解有关 gcloud 格式的更多信息。