首页 > 解决方案 > 后处理 bazel 测试命令生成的报告

问题描述

我在我的 CI 服务器上使用 Bazel 来构建和测试我的 C++ 库,但我无法检索生成的报告/日志文件。

我想知道是否有一种方法可以引用这些生成的文件以供在 a 中进一步使用,genrule这可以允许我对文件进行后处理(生成 HTML ...)?

巴泽尔执行:

$ bazel test //unit:tests
INFO: Analyzed 2 targets (21 packages loaded, 400 targets configured).
INFO: Found 2 test targets...
INFO: Elapsed time: 29,326s, Critical Path: 6,86s
INFO: 22 processes: 22 darwin-sandbox.
INFO: Build completed successfully, 29 total actions
//unit:tests_a                                                 PASSED in 0.7s
//unit:tests_b                                                 PASSED in 0.7s

Executed 2 out of 2 tests: 2 tests pass.
INFO: Build completed successfully, 29 total actions

生成的报告:

$ find bazel-out/ -name '*.xml' -or -name '*.log'
bazel-out//darwin-fastbuild/testlogs/unit/tests_a/test.log
bazel-out//darwin-fastbuild/testlogs/unit/tests_a/test.xml
bazel-out//darwin-fastbuild/testlogs/unit/tests_b/test.log
bazel-out//darwin-fastbuild/testlogs/unit/tests_b/test.xml

工作空间:

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "gtest",
    url = "https://github.com/google/googletest/archive/release-1.10.0.zip",
    sha256 = "94c634d499558a76fa649edb13721dce6e98fb1e7018dfaeba3cd7a083945e91",
    strip_prefix = "googletest-release-1.10.0",
)

单位/建造:

load("@rules_cc//cc:defs.bzl", "cc_test")
test_suite(name = "tests", tests = glob(["tests_*"]))
cc_test(name = "tests_a", srcs = ["ut.cc"], deps = ["@gtest//:gtest_main"])
cc_test(name = "tests_b", srcs = ["ut.cc"], deps = ["@gtest//:gtest_main"])

单位/ut.cc:

#include "gtest/gtest.h"
TEST(HelloTest, GetGreet) {
  EXPECT_EQ(1, 1);
}

标签: bazel

解决方案


我认为您可以通过环境变量指示的 PATH 通过 bazel 测试保存报告生成:TEST_UNDECLARED_OUTPUTS_DIR。bazel 测试会将您的报告保存在 bazel-out/k8-fastbuild/testlogs////<test_binary_targrt>/test.outputs/outputs 中。 zip 看看这个:https ://docs.bazel.build/versions/master/test-encyclopedia.html#initial-conditions


推荐阅读