【问题标题】:How do I pass the timeout setting of CTest to test binaries?如何通过 CTest 的超时设置来测试二进制文件?
【发布时间】:2021-04-18 11:50:22
【问题描述】:

当使用--timeout 120(或默认超时)运行 CTest 时,该数字是如何传递给测试二进制文件的?

我有一个 C/C++ 测试二进制文件,似乎超时既没有传递给它的命令行上的测试二进制文件,也没有传递给它的环境变量。是否有 CMake 技巧将魔术命令插入 CTestTestfile.cmake 以转发该设置?

【问题讨论】:

  • how is that number passed on to the test binary? 为什么会通过?这是测试执行的超时时间,而不是参数。
  • 为什么不以某种方式传递?测试可能想知道它。
  • Test may want to know about it 没错——因为它会影响测试。从我的角度来看,超时与测试本身无关。测试应该在相同的环境下运行,不管我是用--timeout 1 在我的本地机器上赶时间,还是用--timeout 2000 在我的gitlab-ci/cd 管道上执行测试。前任。如果我购买更快的 PC,因此我会通过更小的超时,测试应该不同吗?它应该是相同的测试,它应该测试相同的东西。测试应该保持不变,所以Tests may want to know about it 然后我看不出原因。

标签: cmake ctest


【解决方案1】:

如何通过 CTest 的超时设置来测试二进制文件?

你可以使用环境变量。

这个数字是如何传递给测试二进制文件的?

不是,我不知道。

有没有插入魔法的 CMake 技巧

我只会使用环境变量。

add_test(... COMMAND wrapper_script.sh the_executable args...)

然后在wrapper_script.sh 中(或者最好是具有可移植性的 cmake 脚本的类似代码,TODO):

#!/bin/sh
exec "$@" --the-timeout "${MY_TIMEOUT:-1500}"

然后当ctest 运行时,必须设置超时并将其导出到环境变量:

export MY_TIMEOUT=200 ; ctest --timeout "$MY_TIMEOUT" ...

通过这样的设计,如果测试可执行文件本身只读取环境变量MY_TIMEOUT,可能会更简单。

【讨论】:

    猜你喜欢
    • 2013-07-27
    • 2013-10-19
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 2010-11-02
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多