如何在GitHub Actions中获取Qt Test的完整测试输出
GitHub Actions 中获取 Qt Test 详细测试输出的配置方法
Qt Test 默认输出逻辑针对 Qt Creator 做了适配,CI 环境下如果未指定正确的输出参数、或测试执行工具未透传标准输出,就只会留存进程退出码,无法看到逐用例的执行详情,可通过以下方式配置出和 Qt Creator 一致粒度的输出:
方案1:直接为Qt测试可执行文件指定输出参数(最简便)
Qt Test 原生支持通过命令行参数控制日志格式与输出位置,运行测试时追加对应参数,即可将全量测试详情打印到标准输出,直接被GitHub Actions日志捕获,常用参数组合为-v2 -o -,txt:
-v2:开启最高级别详细输出,展示每个测试函数、每个测试数据行的进入/退出状态、断言校验结果、执行耗时,和Qt Creator测试面板的展示粒度完全一致-o -,txt:指定将纯文本格式的日志定向到标准输出流(参数中-即代表stdout),避免日志默认写入本地文件导致CI无法捕获
Workflow配置示例:
- name: Run Qt Test executable run: ./build/your_qt_test_binary -v2 -o -,txt
执行后日志会直接展示所有用例的执行过程,失败断言会明确标注所在文件、行号、期望值与实际值。
方案2:通过CTest执行测试时开启输出透传
如果是通过CMake的add_test()将Qt测试注册到CTest统一执行,需要给CTest追加参数,让它把测试程序的输出透传到CI日志,而不是仅在测试全部跑完后汇总退出码:
- 追加
--output-on-failure参数:测试失败时自动打印对应失败用例的全量输出,适合不需要看成功用例详情的场景 - 追加
-V(Verbose)参数:无论测试成功失败,透传所有测试程序的全量输出,和本地执行的日志表现一致
Workflow配置示例:
- name: Build CMake project run: cmake --build build - name: Run all tests with CTest working-directory: build run: ctest --output-on-failure -V
注意:使用CTest时,需要在add_test()命令中提前给Qt测试程序加上前述的日志参数,否则测试程序本身输出过于简略,即使CTest透传输出也无法拿到有效信息,CMake配置示例:
add_test(NAME YourQtTest COMMAND your_qt_test_binary -v2 -o -,txt)
方案3:适配GitHub Actions日志注解(可选优化)
如果需要让测试失败信息直接展示在GitHub的代码注解、PR检查摘要中,不需要翻找长日志,可以让Qt测试额外输出xunitxml格式的结果,通过简单脚本解析后调用GitHub Actions的工作流命令生成错误注解:
- 运行测试时同时输出纯文本日志和xml结果:
./your_qt_test_binary -v2 -o -,txt -o test_result.xml,xunitxml - 编写简单脚本解析xml中的失败用例信息,调用
::error工作流命令标注失败位置,即可实现和本地IDE类似的错误跳转提示。
常见配置误区
- 遗漏
-o -,txt参数:部分Qt版本默认不会将详细日志输出到标准输出,而是写入当前工作目录下的独立日志文件,CI流程不主动读取该文件就无法获取输出内容 - 误用
-silent参数:该参数会关闭所有正常运行日志,仅返回进程退出码,不少旧配置模板会误加该参数导致无输出 - 注册CTest时未给测试程序传参:即使CTest开启了全量输出,若Qt测试程序本身未开启详细日志,依然无法拿到有效信息
内容的提问来源于stack exchange,提问作者user686368
相关产品推荐
相关产品推荐

