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

生成Allure测试报告时出现Sax Parser Exception的问题求助

解决Allure生成XML文件时的Sax Parser Exception问题

这种问题我之前帮好几个开发者排查过,核心原因就是Allure被误导去处理非XML格式的内容了,咱们一步步来解决:

1. 定位问题来源:检查Attachment注解的使用

大概率是你在测试代码里用Allure的@Attachment注解保存API响应时,没指定正确的内容类型,导致Allure默认把它当成XML来处理。比如直接把JSON/HTML字符串返回给Attachment,却没声明类型,Allure就会尝试将其封装成XML节点,而非法的XML字符(比如JSON里的大括号、HTML里的标签)就会触发Sax解析异常。

解决方法:给@Attachment指定正确的type参数:

  • 保存JSON响应:
@Attachment(value = "REST API Response", type = "application/json")
public String saveJsonResponse(String jsonResponse) {
    return jsonResponse;
}
  • 保存HTML响应:
@Attachment(value = "HTML Response", type = "text/html")
public String saveHtmlResponse(String htmlResponse) {
    return htmlResponse;
}

这样Allure会直接将内容保存为对应格式的附件,不会再强行转成XML,自然就不会触发解析错误。

2. 排查自定义的Allure结果生成逻辑

如果你的测试框架里有自定义的代码来生成Allure的测试结果(比如手动写入results目录的XML文件),要检查是不是不小心把API响应的内容写入了XML节点中。比如有些开发者会把API响应作为测试步骤的描述写入XML,这时候如果内容包含XML特殊字符(如<、>、&),也会导致解析异常。

解决方法:如果必须把响应内容写入XML,要先对特殊字符进行转义,比如把<换成&lt;,>换成&gt;。不过更推荐的还是用Attachment来保存这类内容,而不是写入XML结构里。

3. 检查Allure与Jenkins插件的版本兼容性

有时候Jenkins上的Allure插件版本和你本地测试用的Allure版本不匹配,也可能导致解析逻辑出现问题。比如本地用Allure 2.21.0,而Jenkins插件还是2.18.1,就可能出现对新格式的处理异常。

解决方法:

  • 确保本地allure-maven-plugin的版本和Jenkins上Allure插件的版本一致。
  • 在pom.xml里明确指定Allure Maven插件的版本:
<plugin>
    <groupId>io.qameta.allure</groupId>
    <artifactId>allure-maven</artifactId>
    <version>2.21.0</version> <!-- 和Jenkins插件版本保持一致 -->
</plugin>

4. 过滤Allure结果目录中的非有效XML文件

如果上面的方法都没解决,可能是某些第三方工具或测试框架自动生成了非标准的XML文件到Allure的results目录里。这时候可以在生成报告前,先过滤掉这些无效文件。

比如在Maven的测试阶段后添加一个步骤,删除results目录里不是Allure标准XML的文件(Allure的结果XML文件名通常是uuid-result.xml格式)。可以用Maven的exec-maven-plugin执行脚本删除:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <phase>post-integration-test</phase>
            <goals>
                <goal>exec</goal>
            </goals>
            <configuration>
                <!-- Linux/macOS 下删除非result.xml结尾的文件 -->
                <executable>bash</executable>
                <arguments>
                    <argument>-c</argument>
                    <argument>rm -f target/allure-results/*.xml !(*-result.xml)</argument>
                </arguments>
                <!-- Windows 下可以用del命令,自行调整 -->
            </configuration>
        </execution>
    </executions>
</plugin>

按这个顺序排查下来,基本就能解决Sax Parser Exception的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:23:44