Jmeter 在Java中运行时,prolog中不允许获取内容

Jmeter 在Java中运行时,prolog中不允许获取内容,jmeter,Jmeter,当我从Java(Jmeter 5.0)运行xxx.jmx文件时,prolog中不允许出现内容异常 我在GUI模式下测试了jmx,一切正常,在Java中,我只是按照标准方法调用jmx文件并执行它 jmx只有一些普通的东西。发送HTTP请求并验证预期的和接收到的XML(我使用此截图进行验证): 和堆栈跟踪: 2018/10/24 15:18:03,386 12675 [ERROR ] [Thread Group 1-1] (JSR223Assertion.java:52) – Problem in

当我从Java(Jmeter 5.0)运行xxx.jmx文件时,prolog中不允许出现内容异常

我在GUI模式下测试了jmx,一切正常,在Java中,我只是按照标准方法调用jmx文件并执行它

jmx只有一些普通的东西。发送HTTP请求并验证预期的和接收到的XML(我使用此截图进行验证):

和堆栈跟踪:

2018/10/24 15:18:03,386 12675 [ERROR ] [Thread Group 1-1] (JSR223Assertion.java:52) – Problem in JSR223 script: Validate resposne
javax.script.ScriptException: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:320)
    at org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:72)
    at javax.script.CompiledScript.eval(CompiledScript.java:92)
    at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:221)
    at org.apache.jmeter.assertions.JSR223Assertion.getResult(JSR223Assertion.java:49)
    at org.apache.jmeter.threads.JMeterThread.processAssertion(JMeterThread.java:901)
    at org.apache.jmeter.threads.JMeterThread.checkAssertions(JMeterThread.java:892)
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:565)
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486)
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at groovy.util.XmlSlurper.parse(XmlSlurper.java:207)
    at groovy.util.XmlSlurper.parse(XmlSlurper.java:260)
    at groovy.util.XmlSlurper.parseText(XmlSlurper.java:286)
    at groovy.util.XmlSlurper$parseText.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
    at Script1.run(Script1.groovy:9)
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:317)
    ... 10 more
更新1: 使用响应断言的问题在于它不能忽略空格或制表符。因此,如果在使用equal时格式不完全相同,则将始终失败。你知道如何使用响应断言来忽略这些事情吗

更新2: 我发现问题与物料清单无关。如果我从Java应用程序运行jmx:

 prev.getResponseDataAsString()
上述函数始终返回:

${__FileToString(${inputFilePath},,)}
但不是实际的反应。此函数来自HTTP请求采样器的主体数据!!!!!!如果我把acutal身体放在那里,那么我就可以运行jmx。。。。。。你知道如何处理这种动态正文数据吗?

可能是“预期”XML文件包含的情况,它会导致代码失败

BOM基本上是前3个字节,因此您可以使用如下代码删除它们:

def expect = FileUtils.readFileToString(new File('some_path')).getBytes().flatten()

1.upto(3) {
    expect.remove(0)
}

XmlParser parser = new XmlParser()

def expectedXML = parser.parseText(new String(expect.toArray(new Byte[0])))
代码的其余部分应该可以正常工作

查看文章以了解更多Groovy技巧和窍门



还要注意的是,在大多数情况下,它更易于使用,或者当涉及到XML时,Java代码在任何情况下都比Groovy工作得更快

显示XML Received的第1行使用响应断言的问题是它不能忽略空格或制表符。因此,如果在使用equal时格式不完全相同,则将始终失败。获取此异常的原因是prev.getResponseDataAsString()在从Java应用程序运行时始终返回${uu FileToString(${inputFilePath},,)},而不是实际响应。与BOM无关。你知道吗?我想我的pom中缺少了一些Jmeter依赖项。您需要添加到项目依赖项/类路径中。
def expect = FileUtils.readFileToString(new File('some_path')).getBytes().flatten()

1.upto(3) {
    expect.remove(0)
}

XmlParser parser = new XmlParser()

def expectedXML = parser.parseText(new String(expect.toArray(new Byte[0])))