You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins运行TestNG报错 testng-results.xml含不可解析标签原因咨询

问题根因与触发路径

你遇到的两类异常内容来源完全独立,其中只有Git冲突标记是导致XML解析报错的直接原因,节点为TestNG原生合法输出,具体说明如下:

1. 文件头部Git合并冲突标记来源

  • 核心原因:TestNG生成的结果文件被错误纳入Git版本控制,Jenkins构建拉取代码时发生自动合并冲突,冲突标记被写入结果文件后未被TestNG的写入逻辑完全覆盖
  • 完整触发链路:
    • 项目配置遗漏,未将TestNG默认结果输出目录test-output/加入.gitignore规则,历史提交中已将生成的testng-results.xml纳入Git版本跟踪
    • Jenkins任务未配置构建前清空工作区逻辑,上一次构建完成后,工作区留存了上次运行生成的、与仓库存储版本内容不一致的旧testng-results.xml
    • 构建启动后首先执行Git拉取步骤:Git检测到工作区中被跟踪的testng-results.xml与本地HEAD版本、远端最新版本均存在内容差异,自动合并失败,直接在文件中插入<<<<<<< HEAD、=======、>>>>>>> 分支版本信息这类标准冲突标记。你看到的三层重复HEAD标记,是连续三次构建都触发冲突、标记逐层叠加导致的
    • 拉取代码完成后TestNG开始执行测试,写入新结果时采用「从文件起始位置覆盖写入、但不提前截断旧文件」的逻辑,仅覆盖本次新生成的XML声明、起始标签等内容,旧文件中未被覆盖的多层冲突标记全部残留在文件中
    • 测试结束后Jenkins的TestNG解析插件读取文件时,碰到不符合XML语法的冲突标记,直接抛出org.xmlpull.v1.XmlPullParserException异常

2. 非预期标签来源

  • 核心原因:该标签是TestNG默认报告生成器的原生输出,不属于异常写入内容,不会触发XML语法错误
  • 触发逻辑:
    • 测试执行过程中,只要调用Reporter.log()打印自定义日志、使用@DataProvider实现参数化测试记录参数值、或者断言时输出了自定义错误信息,TestNG默认的XML报告生成器就会把这些文本内容用CDATA块包裹,写入节点,挂载到对应测试方法的结果节点下
    • 该节点被判定为“非预期”,通常是因为Jenkins的TestNG Results插件版本过低,未适配该节点的解析规则,但节点本身完全符合TestNG报告的格式规范,与本次解析报错无关联
修复方案
  • 清理Git仓库冗余跟踪文件:将test-output/目录(若自定义了TestNG结果输出路径则替换为对应路径)加入项目根目录的.gitignore,执行git rm --cached test-output/* -r删除仓库中已跟踪的所有测试结果生成文件,提交变更到远端
  • 调整Jenkins任务配置:增加构建前清空工作区步骤,每次构建启动前自动删除工作区所有旧文件,从根源避免旧生成文件残留导致的Git合并冲突
  • 针对节点:如果不需要将测试日志写入XML结果,可升级TestNG到7.5+版本,或自定义报告监听器关闭日志写入逻辑;如果需要保留日志,直接升级Jenkins的TestNG Results插件到最新版本即可正常解析,无需修改测试代码

内容的提问来源于stack exchange,提问作者Kuroosa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 06:54:31