jmeter中xml响应中第1行和col 1处的非法字符

时间:2019-03-25 15:41:08

标签: jmeter

我正在尝试使用JMETER验证来自REST API的xml响应。我正在使用xml模式断言来验证使用xsd的响应。

我在XML模式声明上遇到以下错误

Assertion error: true
Assertion failure: false
Assertion failure message: fatal: line=1 col=1 Content is not allowed in prolog.

当我看到收到的响应时,看到在响应xml的开头添加了一些非法字符。

enter image description here

我试图修改jmeter.properties文件并更改了以下值

jmeter.save.saveservice.output_format=xml
jmeter.save.saveservice.data_type=true
jmeter.save.saveservice.label=true
jmeter.save.saveservice.response_code=true
jmeter.save.saveservice.successful=true
jmeter.save.saveservice.thread_name=true

请帮助我理解如何删除响应中的非法字符并允许xsd验证通过。

1 个答案:

答案 0 :(得分:1)

这些字符表示Byte Order Mark,因此您可以使用BOMInputStream中的JSR223 PostProcessor以便从响应中将其删除,并用“经过消毒的” XML替换响应数据。

  1. 在要删除此BOM的HTTP Request采样器的子级中添加JSR223 PostProcessor
  2. 将以下代码放入“脚本”区域:

    def is = new ByteArrayInputStream(prev.getResponseData())
    def bOMInputStream = new org.apache.commons.io.input.BOMInputStream(is)
    def bom = bOMInputStream.getBOM()
    def charsetName = bom == null ? 'UTF-8' : bom.getCharsetName()
    def reader = new InputStreamReader(new BufferedInputStream(bOMInputStream), charsetName)
    prev.setResponseData(org.apache.commons.io.IOUtils.toByteArray(reader, 'UTF-8'))
    
  3. 就是这样,您的主张不应再失败了。

有关JMeter中Groovy脚本的更多信息:Apache Groovy - Why and How You Should Use It