生成 allure 结果时的 sax 解析器异常
sax parser exception while generating allure results
我正在使用 Allure 框架生成测试报告。
在测试框架中用作maven依赖。
虽然 运行 在 jenkins 中进行测试,但 Allure 按预期创建了报告,但是在控制台中对于 allure 生成的 xml 文件几乎没有异常。
Allure 正在根据测试信息创建 xml 文件,但是它会根据 API 格式的 xml 响应生成 xml 文件,因为它不是有效的 [=82] =] 文件,抛出 Sax Parser 异常。
我无法理解如何解决这些异常。
以下是异常片段
[致命错误] da669b14-4d30-4260-8815-eab1f720661b-attachment.xml:1:1:序言中不允许包含内容。
无法解析文件 /home/jenkins/workspace/xxx_trunk-H4U6TKVVIR44VYBZR7Q53HWUDRP5C3JJEEVZOEYQTCQK53LROIJA/.ci-reports/allure-results/da669b14-4d30-4260-8815-eab1f720661b-attachment.xml: {}
org.xml.sax.SAXParseException; systemId: 文件:/home/jenkins/workspace/amp-adengine_trunk-H4U6TKVVIR44VYBZR7Q53HWUDRP5C3JJEEVZOEYQTCQK53LROIJA/.ci-reports/allure-results/da669b14-4d30-4260-8815-eab1f720661b-attachment.xml;行号:1;列数:1;序言中不能有内容。
在 com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)
在 com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
在 javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:205)
在 io.qameta.allure.junitxml.JunitXmlPlugin.parseRootElement(JunitXmlPlugin.java:97)
在 io.qameta.allure.junitxml.JunitXmlPlugin.lambda$readResults$0(JunitXmlPlugin.java:87)
在 java.util.ArrayList.forEach(ArrayList.java:1249)
在 io.qameta.allure.junitxml.JunitXmlPlugin.readResults(JunitXmlPlugin.java:87)
在 io.qameta.allure.ReportGenerator.lambda$readResults$0(ReportGenerator.java:32)
在 java.util.ArrayList.forEach(ArrayList.java:1249)
在 io.qameta.allure.ReportGenerator.readResults(ReportGenerator.java:32)
在 java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
在 java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
在 java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
在 java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
在 java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
在 java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
在 java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
在 java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
在 io.qameta.allure.ReportGenerator.generate(ReportGenerator.java:54)
在 io.qameta.allure.ReportGenerator.generate(ReportGenerator.java:43)
在 io.qameta.allure.Commands.generate(Commands.java:89)
在 io.qameta.allure.CommandLine.run(CommandLine.java:129)
在 java.util.Optional.orElseGet(Optional.java:267)
在 io.qameta.allure.CommandLine.main(CommandLine.java:72)
来自 API 的响应将始终是 HTML/JSON 而永远不会是 xml 响应。
有人可以指导我解决这些异常吗?
答案实际上取决于您如何使用 Allure 保存附件。一般情况下,保存附件时可以指定MIME类型和文件扩展名
@Attachment(value = "API response", type = "application/json", fileExtension = ".json")
public String requestAPI() {
...
return response;
}
我正在使用 Allure 框架生成测试报告。 在测试框架中用作maven依赖。
虽然 运行 在 jenkins 中进行测试,但 Allure 按预期创建了报告,但是在控制台中对于 allure 生成的 xml 文件几乎没有异常。 Allure 正在根据测试信息创建 xml 文件,但是它会根据 API 格式的 xml 响应生成 xml 文件,因为它不是有效的 [=82] =] 文件,抛出 Sax Parser 异常。
我无法理解如何解决这些异常。
以下是异常片段 [致命错误] da669b14-4d30-4260-8815-eab1f720661b-attachment.xml:1:1:序言中不允许包含内容。 无法解析文件 /home/jenkins/workspace/xxx_trunk-H4U6TKVVIR44VYBZR7Q53HWUDRP5C3JJEEVZOEYQTCQK53LROIJA/.ci-reports/allure-results/da669b14-4d30-4260-8815-eab1f720661b-attachment.xml: {} org.xml.sax.SAXParseException; systemId: 文件:/home/jenkins/workspace/amp-adengine_trunk-H4U6TKVVIR44VYBZR7Q53HWUDRP5C3JJEEVZOEYQTCQK53LROIJA/.ci-reports/allure-results/da669b14-4d30-4260-8815-eab1f720661b-attachment.xml;行号:1;列数:1;序言中不能有内容。 在 com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257) 在 com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339) 在 javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:205) 在 io.qameta.allure.junitxml.JunitXmlPlugin.parseRootElement(JunitXmlPlugin.java:97) 在 io.qameta.allure.junitxml.JunitXmlPlugin.lambda$readResults$0(JunitXmlPlugin.java:87) 在 java.util.ArrayList.forEach(ArrayList.java:1249) 在 io.qameta.allure.junitxml.JunitXmlPlugin.readResults(JunitXmlPlugin.java:87) 在 io.qameta.allure.ReportGenerator.lambda$readResults$0(ReportGenerator.java:32) 在 java.util.ArrayList.forEach(ArrayList.java:1249) 在 io.qameta.allure.ReportGenerator.readResults(ReportGenerator.java:32) 在 java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) 在 java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) 在 java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374) 在 java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) 在 java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) 在 java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) 在 java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 在 java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) 在 io.qameta.allure.ReportGenerator.generate(ReportGenerator.java:54) 在 io.qameta.allure.ReportGenerator.generate(ReportGenerator.java:43) 在 io.qameta.allure.Commands.generate(Commands.java:89) 在 io.qameta.allure.CommandLine.run(CommandLine.java:129) 在 java.util.Optional.orElseGet(Optional.java:267) 在 io.qameta.allure.CommandLine.main(CommandLine.java:72)
来自 API 的响应将始终是 HTML/JSON 而永远不会是 xml 响应。 有人可以指导我解决这些异常吗?
答案实际上取决于您如何使用 Allure 保存附件。一般情况下,保存附件时可以指定MIME类型和文件扩展名
@Attachment(value = "API response", type = "application/json", fileExtension = ".json")
public String requestAPI() {
...
return response;
}