简体   繁体   English

在JMeter groovy脚本中包括形成groovy文件的功能代码段

[英]Including function code snippet form a groovy file in JMeter groovy script

I have a big Groovy script in JMeter and I want few methods to be re-used in different places of my script. 我在JMeter中有一个很大的Groovy脚本,我希望在脚本的不同位置重用一些方法。 Below is what I tried. 下面是我尝试过的。

This is a groovy script where I have written a function that I want to call from Jmeter. 这是一个时髦的脚本,其中编写了要从Jmeter调用的函数。

Tools.groovy Tools.groovy

public void AssertValuesF(float Expected, float Actual, String PassMessage, String FailureMessage){
        if(Expected==Actual){
                log.info("****Assertion Successful****");
                log.info("Actual: "+Actual+" Expected: "+Expected +"\n");
                log.info(PassMessage);

        }
        else{
              vars.put("AssertionFailure","true");             
            AssertionResult.setFailure(true);
            vars.put("FailureMsg",vars.get("FailureMsg") + "\n****ASSERTION FAILURE****** \n"+FailureMessage + " ||  EXPECTED: "+ Expected + " || ACTUAL: "+Actual + "\n"); 

          log.info("****ASSERTION FAILURE******");
         // AssertionResult.setFailureMessage("****Assertion Failure****** "+FailureMessage + " Expected: "+ Expected + " Actual: "+Actual+"\n");
           log.info(FailureMessage);               
            log.info("Actual: "+Actual+"Expected: "+Expected);
        }
    } 

Below is my JMeter Groovy code where I am calling the function. 以下是我在其中调用该函数的JMeter Groovy代码。

    File sourceFile = new File("D://TestScript//Tools.groovy");
    Class groovyClass = new GroovyClassLoader(getClass().getClassLoader()).parseClass(sourceFile);
    GroovyObject myObject = (GroovyObject) groovyClass.newInstance();
myObject.AssertValues("s","s","asdf","asdf");

The output gives this error, javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: log for class: Tools 输出给出此错误, javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: log for class: Tools

This is probably because of 'log' object not available from Groovy. 这可能是因为Groovy无法使用'log'对象。 How can I solve this issue? 我该如何解决这个问题?

log shorthand is available only for JSR223 Elements , in order to be able to use it you need to define it manually like it's done in JSR223TestElement class log速记仅适用于JSR223 Elements ,为了能够使用它,您需要像在JSR223TestElement类中一样手动定义它

So amend your code to look like: 因此,将代码修改为:

import org.slf4j.Logger
import org.slf4j.LoggerFactory

public void AssertValuesF(float Expected, float Actual, String PassMessage, String FailureMessage) {
    final Logger log = LoggerFactory.getLogger(getClass());

    if (Expected == Actual) {
        log.info("****Assertion Successful****");
        log.info("Actual: " + Actual + " Expected: " + Expected + "\n");
        log.info(PassMessage);

    } else {
        vars.put("AssertionFailure", "true");
        AssertionResult.setFailure(true);
        vars.put("FailureMsg", vars.get("FailureMsg") + "\n****ASSERTION FAILURE****** \n" + FailureMessage + " ||  EXPECTED: " + Expected + " || ACTUAL: " + Actual + "\n");

        log.info("****ASSERTION FAILURE******");
        // AssertionResult.setFailureMessage("****Assertion Failure****** "+FailureMessage + " Expected: "+ Expected + " Actual: "+Actual+"\n");
        log.info(FailureMessage);
        log.info("Actual: " + Actual + "Expected: " + Expected);
    }
}

And you will be able to use it from Groovy scripts your way: 您将可以通过Groovy脚本使用它:

JMeter Groovy自定义声明

Also be aware that there is groovy.utilities property which can be used to re-use your custom scripts in __groovy() function , you will need either add the next line to user.properties file: 另请注意,在__groovy()函数中有groovy.utilities属性可用于重复使用自定义脚本,您需要将下一行添加到user.properties文件中:

groovy.utilities=D:/TestScript/Tools.groovy

or pass it via -J command-line argument like: 或通过-J命令行参数传递它,例如:

jmeter -Jgroovy.utilities=D:/TestScript/Tools.groovy -n -t test.jmx -l result.jtl

References: 参考文献:

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM