【问题标题】:jMeter JSR223PostProcessor - running file with script - relative pathjMeter JSR223PostProcessor - 使用脚本运行文件 - 相对路径
【发布时间】: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 = [&quot;Prague&quot;, &quot;Brno&quot;, &quot;Ostrava&quot;, &quot;Berlin&quot;, &quot;Minsk&quot;, &quot;Warsaw&quot;] as Set

responseData = prev.getResponseData();
responseDataParsedJson = new groovy.json.JsonSlurper().parse(responseData);
actualCities = responseDataParsedJson as Set

log.info(&quot;actualCities: {}&quot;, actualCities);

// Assert may not work.
assert actualCities == expectedCities;

if (actualCities != expectedCities) {
    AssertionResult.setFailure(true)
    AssertionResult.setFailureMessage(&quot;actualCities are not equal to expectedCities. actualCities:  $actualCities, expectedCountries: $expectedCities&quot;)
}

            </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=truejMeter variables=true 等设置调试元素,但没有帮助(我没有找到变量或参数指出到测试文件夹的位置)。


一些想法

事实证明 https://stackoverflow.com/a/31164646/1839360 我可以在开头有一个脚本来解析 jmx 文件的位置并存储到一个变量中。然后我可以使用这个变量作为脚本位置的起点。不过看起来有点复杂:我想从 GUI 和命令行运行 jmeter,因此我必须解析 GUI modenon GUI mode

【问题讨论】:

    标签: groovy jmeter


    【解决方案1】:

    根据answer,它也适用于非 GUI 和 GUI 模式 - 在 jMeter UI 和 docker 中进行了测试。

    1. 在用户变量中,我添加了

    JMETER_SCRIPTS_DIRECTORY=${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}

    1. 在 groovy 文件名之前,我放了${JMETER_SCRIPTS_DIRECTORY}

    例如,JMETER_SCRIPTS_DIRECTORY/ScriptName.groovy

    【讨论】:

      【解决方案2】:
      1. 你可以从你的脚本路径中删除./,所以它只是groovy/CitiesAssertion.groovy,这样脚本位置将相对于JMeter的基本目录

      2. 如果您想继续使用脚本方法,请考虑迁移到 __groovy() 函数

      3. JSR223 PostProcessor 中没有AssertionResult 简写,您可能想切换到JSR223 Assertion

      【讨论】:

      • 它在 GUI 中对我不起作用。我在日志中有一个异常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
      • 我明白了,它可能会起作用,如果您的脚本文件与 jmeter 的根文件夹相同。例如,您在本地安装了 jMeter,并将 jmeter 项目文件和脚本文件夹(groovy)放在 jMeter 的本地安装中。或者我错过了什么......
      猜你喜欢
      • 1970-01-01
      • 2019-03-10
      • 2022-10-21
      • 2016-05-19
      • 1970-01-01
      • 2014-04-24
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      相关资源
      最近更新 更多