使用cmake/ctest对单元测试进行随机化



我管理着一个相当大的开源项目,其中有许多单元测试(约200个文件(,通过所有测试对于持续集成来说相当耗时。我们使用cmake/ctest/Catch2作为单元测试框架。

有没有办法告诉cmake/ctest只构建和运行单元测试的随机子集(例如,只有30%(?

当对给定功能的代码进行多次提交迭代时,所有测试都被检查的概率往往是一次,但每次提交都会更快。

显然,在准备PR或发布时,此比率将设置为100%。

ALTETNATIVE

最后,我提出了一个cmake解决方案,只需创建一个新的add_test()函数,即可在随机测试中激活测试:

函数(my_add_test_file(#optional_avoid_add_test字符串(随机长度2字母"0123456789"_RANDOM(if(${_random}减去${THRESHOLD_random_TESTING}(add_executable(${test_file}${test_file}.cpp(add_test(${test_file}${testfiles}(endif((endfunction((

在我的主cmake中,我有全局变量(可以在cmakeCLI/GUI中设置(

SET(THRESHOLD_RANDOM_TESTING "100" CACHE INTERNAL "~% of unit tests to build and run.")

每次我重新生成项目时,都会构建一个新的随机选择。

有没有办法告诉cmake/ctest

是。获得所有测试,洗牌,获得30%的测试,并将其传给ctest。

看起来很有趣,在linux shell中只是:

ctest -N | sed -n 's/  Test #[0-9]+: //p' | { tmp=$(cat); cnt=$(wc -l <<<"$tmp"); shuf -n "$((cnt * 30 / 100))" <<<"$tmp"; }

我的意思是自动做到这一点。

不,没有。

相关内容

  • 没有找到相关文章

最新更新