Получение контента не допускается в прологе при запуске в Java - PullRequest
0 голосов
/ 24 октября 2018

Я сталкиваюсь с Содержимое недопустимо в прологе исключение при запуске файла xxx.jmx из Java (Jmeter 5.0).

Я протестировал jmx в режиме графического интерфейса, и все работает нормально, а в Java я просто следую стандартному способу вызова файла jmx и его запуска.

У jmx просто нормальные вещи.Отправка HTTP-запроса и проверка ожидаемого и полученного XML (я использую этот фрагмент для проверки):

import org.apache.commons.io.FileUtils

expect = FileUtils.readFileToString(new File('some_path'))

XmlParser parser = new XmlParser()

expectedXML = new XmlSlurper().parseText(expect) 

actualXML = new XmlSlurper().parseText(prev.getResponseDataAsString()) 

if (expectedXML != actualXML) {
    AssertionResult.setFailure(true)
    AssertionResult.setFailureMessage('Mismatch between expected and actual XML \n'+ prev.getResponseDataAsString())

и трассировка стека:

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 : Проблема использования Response Assertion заключается в том, что он не может игнорировать пробел или табуляцию.Так что, если формат не совсем одинаковый, когда я использую равный, всегда не получитсяЛюбые идеи, как игнорировать эти вещи с помощью ответа ответа?

ОБНОВЛЕНИЕ 2 : Я обнаружил, что проблема не связана с спецификацией.Это происходит, если я запускаю jmx из моего Java-приложения:

 prev.getResponseDataAsString()

выше функция всегда возвращает:

${__FileToString(${inputFilePath},,)}

, но не фактический ответ.Эта функция взята из данных тела сэмплера HTTP Request !!!!!!Если я дам остаточное тело, то смогу запустить jmx ...... Любая идея, как обращаться с этими динамическими данными тела?

1 Ответ

0 голосов
/ 25 октября 2018

Это может быть случай, когда ваш «ожидаемый» XML-файл содержит BOM , и это вызывает ошибку вашего кода.

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 Templates для JMeter , чтобы узнать больше советов и приемов Groovy.


Также имейте в виду, что в большинстве случаев проще использовать Подтверждение ответа или когда дело доходит до XML - Подтверждение XPath , код Java будет работать быстреечем Groovy в любом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...