我正在尝试使用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的开头添加了一些非法字符。
我试图修改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验证通过。
答案 0 :(得分:1)
这些字符表示Byte Order Mark,因此您可以使用BOMInputStream中的JSR223 PostProcessor以便从响应中将其删除,并用“经过消毒的” XML替换响应数据。
将以下代码放入“脚本”区域:
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'))
有关JMeter中Groovy脚本的更多信息:Apache Groovy - Why and How You Should Use It