CTest生成JUnit XML,XUnit为何仅能以GoogleTest模式识别?
问题原因及解决办法
核心原因
- XUnit插件的CTest解析器仅支持CTest原生的测试结果XML格式,你通过
--output-junit生成的是JUnit兼容格式的XML,两者结构完全不同,因此CTest解析器无法识别其中的测试用例。 - 当执行
ctest -T test时,CTest会在项目根目录的Testing子目录下生成一套原生格式的测试XML(比如YYYYMMDD-HHMM/Test.xml),这才是XUnit的CTest工具预期解析的文件类型。 - CTest的
--output-junit参数生成的XML,结构和GoogleTest直接输出的JUnit格式XML高度一致,因此XUnit的GoogleTest解析器可以正确识别并解析其中的测试数据。
两种解决方式
方式1:改用CTest原生XML适配XUnit的CTest解析器
修改流水线中的CTest命令,移除--output-junit参数:
ctest arguments: ''' -T test --no-compress-output ''',
然后在XUnit插件配置中选择CTest工具,指定扫描路径为**/Testing/**/Test.xml,让插件自动识别CTest生成的原生测试结果文件。
方式2:继续使用JUnit格式XML,保留GoogleTest解析器
既然当前通过GoogleTest解析器可以正常生成正确的测试报告,完全可以继续沿用这种配置——本质是利用了CTest和GoogleTest在JUnit格式XML上的结构兼容性,无需额外调整命令。
内容的提问来源于stack exchange,提问作者MarkbCodes
相关产品推荐
相关产品推荐

