如何指定在BUILD文件中运行测试的次数

时间:2018-06-15 14:47:59

标签: googletest bazel

我有一个单元测试,它测试一些多线程的代码。在我编写此代码时,我多次使用以下命令

bazel test //xyz:my_test --runs_per_test 1000

这暴露了我现在修复的一些并发问题。我想在我的BUILD文件中将此--runs_per_test值添加到我的测试定义中,以便夜间构建(jenkins)多次运行此测试。我该怎么做?

3 个答案:

答案 0 :(得分:1)

这是一个更好的黑客。

因为我的测试是C ++ google tests;谷歌测试接受标志--gtest_repeat重复运行测试;我可以通过args属性

中的bazel BUILD文件将此标志传递给测试
cc_test(
    size = "small",
    name = "my_test",
    srcs = [".."],
    deps = [".."],
    args = ["--gtest_repeat=10"],
)

这种方法的问题是bazel会将所有运行视为单个测试,因此运行时间将是所有运行的累积。如果这超过了测试大小的时间限制(在此示例中为small),那么bazel将终止测试!

答案 1 :(得分:0)

你做不到。 我建议在https://github.com/bazelbuild/bazel/issues

提交功能请求

答案 2 :(得分:0)

这是一个使用sh_test包装器的hacky变通方法,假设您有一个cc_test目标。我使用Bazel自己的//examples/cpp/作为例子:

# Test to run multiple times
cc_test(
    name = "hello-fail_test",
    srcs = ["hello-fail.cc"],
    deps = [":hello-lib"],
)

# Wrapper to run test multiple times
sh_test(
    name = "repeated_hello-fail_test",
    srcs = ["hello-fail.sh"],
    data = [":hello-fail_test"],
)

hello-fail.sh中,在for循环中运行测试并确定您希望在测试失败时执行的操作:

#!/bin/bash

WORKSPACE="$TEST_SRCDIR/io_bazel"

# Or count the number of successes/fails
# SUCCESS_COUNT=0
# FAIL_COUNT=0

for i in {1..3} # set the number of runs
do
    $WORKSPACE/examples/cpp/hello-fail_test
    if [ $? = 1 ]; then
        exit 1 # fail immediately, or increment test failure count
    fi
done

exit 0