cmake CTest:并行运行单个flakey测试,直到失败

rekjcdws  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(146)

我想并行运行一个测试,直到它在CTest中失败。我该如何实现这一点?
我们可以假设测试大约每10000次失败一次,并且机器上有100个以上的内核来回答这个问题。
此外,我们还可以假设测试本身有一些内部等待,即使在单个内核上,您也可以并行运行10个测试,从而使总运行时间可能缩短1000倍。
这里的问题是并行运行CTest的正常方式是用途:

ctest . --repeat until-fail:100 -j100 -R tests_

字符串
这在运行成百上千个测试时非常有效。当你想要并行运行一个单一的测试时,我还没能做到。

ctest . --repeat until-fail:10000 -j100 -R a_specific_test


然后,该测试连续运行10000次,大约需要3小时。也不可能再现片状,因为许多片状测试需要系统处于一定的负载下。

pbgvytdp

pbgvytdp1#

创建1000次相同的测试

我不知道该如何优雅地解决这个问题。但这里有一个可能的解决方案。
基本上做相同的测试X次,并只是正则表达式。

foreach(loopVar RANGE 0 1000 1)
    add_test(NAME flaky-${loopVar} COMMAND ...)
endforeach()

字符串
您要测试的主要内容是COMMAND,它对于所有flaky测试都是常数。
然后,只需运行ctest和flaky的正则表达式。

> ctest ... -R flaky -j 100
          Start    1: flaky-0
   1/1001 Test    #1: flaky-0 ..........................   Passed    0.00 sec
          Start    2: flaky-1
   2/1001 Test    #2: flaky-1 ..........................   Passed    0.00 sec
          Start    3: flaky-2
   3/1001 Test    #3: flaky-2 ..........................   Passed    0.00 sec
          Start    4: flaky-3

....

 996/1001 Test  #713: flaky-712 ........................   Passed    0.01 sec
 997/1001 Test  #686: flaky-685 ........................   Passed    0.01 sec
 998/1001 Test  #803: flaky-802 ........................   Passed    0.01 sec
 999/1001 Test  #554: flaky-553 ........................   Passed    0.01 sec
1000/1001 Test  #464: flaky-463 ........................   Passed    0.01 sec
1001/1001 Test  #216: flaky-215 ........................   Passed    0.01 sec

100% tests passed, 0 tests failed out of 1001

相关问题