【发布时间】:2020-08-10 12:45:04
【问题描述】:
我有一个解析和验证响应的 jMeter JSR223PostProcessor 脚本。
<JSR223PostProcessor guiclass="TestBeanGUI" testclass="JSR223PostProcessor" testname="CitiesAssertion" enabled="true">
<stringProp name="TestPlan.comments">Asserts that actual cities are equal to expected cities</stringProp>
<stringProp name="cacheKey">true</stringProp>
<stringProp name="filename"></stringProp>
<stringProp name="parameters"></stringProp>
<stringProp name="script">
expectedCities = ["Prague", "Brno", "Ostrava", "Berlin", "Minsk", "Warsaw"] as Set
responseData = prev.getResponseData();
responseDataParsedJson = new groovy.json.JsonSlurper().parse(responseData);
actualCities = responseDataParsedJson as Set
log.info("actualCities: {}", actualCities);
// Assert may not work.
assert actualCities == expectedCities;
if (actualCities != expectedCities) {
AssertionResult.setFailure(true)
AssertionResult.setFailureMessage("actualCities are not equal to expectedCities. actualCities: $actualCities, expectedCountries: $expectedCities")
}
</stringProp>
<stringProp name="scriptLanguage">groovy</stringProp>
</JSR223PostProcessor>
我想将此脚本的代码移动到一个单独的文件中,并从 jMeter 步骤中调用它。
现在,它说找不到脚本文件。
020-08-10 14:31:50,969 ERROR o.a.j.e.JSR223PostProcessor: Problem in JSR223 script, CitiesAssertion
javax.script.ScriptException: Script file 'C:\Users\johndoe\Desktop\apache-jmeter-5.3\bin\.\groovy\CitiesAssertion.groovy' does not exist or is unreadable for element:CitiesAssertion
at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:205) ~[ApacheJMeter_core.jar:5.3]
at org.apache.jmeter.extractor.JSR223PostProcessor.process(JSR223PostProcessor.java:45) [ApacheJMeter_components.jar:5.3]
at org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:940) [ApacheJMeter_core.jar:5.3]
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:572) [ApacheJMeter_core.jar:5.3]
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:489) [ApacheJMeter_core.jar:5.3]
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256) [ApacheJMeter_core.jar:5.3]
at java.lang.Thread.run(Thread.java:834) [?:?]
当我通过 jMeter UI 打开这个脚本时,它会生成脚本文件/文件名绝对路径,这是我不想要的。
How to get the absolute folder location of a Jmeter .jmx project file from within itself?
它说明了如何在脚本中查找脚本位置。我认为会有一个变量或参数指向脚本位置。我尝试使用 jMeter properties=true 和 jMeter variables=true 等设置调试元素,但没有帮助(我没有找到变量或参数指出到测试文件夹的位置)。
一些想法
事实证明
https://stackoverflow.com/a/31164646/1839360
我可以在开头有一个脚本来解析 jmx 文件的位置并存储到一个变量中。然后我可以使用这个变量作为脚本位置的起点。不过看起来有点复杂:我想从 GUI 和命令行运行 jmeter,因此我必须解析 GUI mode 或 non GUI mode。
【问题讨论】: