让 CMake 设置 CTtest 以在单个测试的输出周围打印 header 和页脚
Let CMake setup CTtest to print header and footer around the output from single tests
有没有一种方法,最好是从 CMakeLists.txt
开始,将 ctest
设置为
- 在 运行 个人测试之前打印一个 header,
- 在 运行 个人测试后打印页脚,
- 使页脚取决于测试是否全部成功?
页脚应显示在默认输出下方
The following tests FAILED:
76 - MyHardTest
Errors while running CTest
这具体化并概括了一个开放了 2 年多 (CMakeLists.txt: How to print a message if ctest fails?) 的有点不清楚的问题。因此,我担心没有简单的解决方案。
因此,另一个问题是:CDash
能否实现所需的行为?
在我的研究过程中,我发现集成这样的东西非常困难。我不完全确定,但我相信您可以在 CTestScript 中执行此操作,然后创建一个 add_custom_target
以始终允许该脚本使用 ctest
执行。例如,命令 make check
现在将 运行 ctest
与您制作的 CTestScript... 工作量太大?
我能为您的应用程序想到的最简单方法是在顶部和底部添加两个空测试作为页眉和页脚的占位符。 Ctest 在最后已经有一个 "The following tests FAILED:" 类型的输出,所以你可能不必担心它。任何类型的条件逻辑 IF TEST FAILED DO THIS
,你目前不能在 ctest 中执行。
add_test(NAME HEADER_GOES_HERE)
add_test(NAME ACTUAL_TEST COMMAND test)
add_test(NAME FOOTER_GOES_HERE)
也许有人可以给你更好的答案,但这是我能想到的最简单(一点也不好)的实现方式。
是的,CTest 确实有宏来实现这一点 [1]:
CTEST_CUSTOM_PRE_TEST
在任何测试之前执行的命令 运行 在测试阶段
CTEST_CUSTOM_POST_TEST
在测试阶段 运行 任何测试后执行的命令
要从 cmake
激活这些宏以供 ctest
使用,它们必须以某种方式放入 build 目录中。看来,需要两步:
(1) 在源代码树的某处有一个脚本scriptdir/CTestCustom.cmake.in
,其中包含
set(CTEST_CUSTOM_POST_TEST "echo AFTER_THE_TEST")
或任何命令而不是 "echo"
(2) 让CMakeLists.txt
调用
configure_file("scriptdir/CTestCustom.cmake.in" ${CMAKE_BINARY_DIR}/CTestCustom.cmake)
以便在配置阶段将 CTest 配置文件放置在 build 目录中的首选名称 [2] CTestCustom.cmake
下。
[1] https://cmake.org/Wiki/CMake/Testing_With_CTest
[2] https://blog.kitware.com/ctest-performance-tip-use-ctestcustom-cmake-not-ctest/
有没有一种方法,最好是从 CMakeLists.txt
开始,将 ctest
设置为
- 在 运行 个人测试之前打印一个 header,
- 在 运行 个人测试后打印页脚,
- 使页脚取决于测试是否全部成功?
页脚应显示在默认输出下方
The following tests FAILED:
76 - MyHardTest
Errors while running CTest
这具体化并概括了一个开放了 2 年多 (CMakeLists.txt: How to print a message if ctest fails?) 的有点不清楚的问题。因此,我担心没有简单的解决方案。
因此,另一个问题是:CDash
能否实现所需的行为?
在我的研究过程中,我发现集成这样的东西非常困难。我不完全确定,但我相信您可以在 CTestScript 中执行此操作,然后创建一个 add_custom_target
以始终允许该脚本使用 ctest
执行。例如,命令 make check
现在将 运行 ctest
与您制作的 CTestScript... 工作量太大?
我能为您的应用程序想到的最简单方法是在顶部和底部添加两个空测试作为页眉和页脚的占位符。 Ctest 在最后已经有一个 "The following tests FAILED:" 类型的输出,所以你可能不必担心它。任何类型的条件逻辑 IF TEST FAILED DO THIS
,你目前不能在 ctest 中执行。
add_test(NAME HEADER_GOES_HERE)
add_test(NAME ACTUAL_TEST COMMAND test)
add_test(NAME FOOTER_GOES_HERE)
也许有人可以给你更好的答案,但这是我能想到的最简单(一点也不好)的实现方式。
是的,CTest 确实有宏来实现这一点 [1]:
CTEST_CUSTOM_PRE_TEST
在任何测试之前执行的命令 运行 在测试阶段CTEST_CUSTOM_POST_TEST
在测试阶段 运行 任何测试后执行的命令
要从 cmake
激活这些宏以供 ctest
使用,它们必须以某种方式放入 build 目录中。看来,需要两步:
(1) 在源代码树的某处有一个脚本scriptdir/CTestCustom.cmake.in
,其中包含
set(CTEST_CUSTOM_POST_TEST "echo AFTER_THE_TEST")
或任何命令而不是 "echo"
(2) 让CMakeLists.txt
调用
configure_file("scriptdir/CTestCustom.cmake.in" ${CMAKE_BINARY_DIR}/CTestCustom.cmake)
以便在配置阶段将 CTest 配置文件放置在 build 目录中的首选名称 [2] CTestCustom.cmake
下。
[1] https://cmake.org/Wiki/CMake/Testing_With_CTest [2] https://blog.kitware.com/ctest-performance-tip-use-ctestcustom-cmake-not-ctest/