如何在Jmeter的jar文件中执行java类

时间:2017-07-28 01:40:43

标签: java jmeter beanshell

我在Jmeter中更新鲜我创建了两个类

*package test;
public class Urlmap {
    static String turl=null;
    public String display(){
        String url="/xyz";
        Test2 t=new Test2(url);
        turl=t.x;
        return "/xyz";

    }
}
package test;
public class Test2 {
static String x=null;
Test2(String x){
    this.x=x;
}   
}*

我导入了jar然后尝试在Jmeter

的BeanShell Sampler中执行该类
import test.Urlmap;
Urlmap u =new Urlmap();
log.info("xxxxxxxxxxxx :----"+u.display());
log.info("turl :----"+u.turl);

它给了我错误 - 错误调用bsh方法:eval源文件:内联评估:import test.Urlmap; Urlmap u =new Urlmap(); log.info("xxxxxxxxxxxx :----"+u.di . . . '' : Cannot access field: turl, on object: test.Urlmap@16ec122a 2017/07/28 06:44:56 WARN - jmeter.protocol.java.sampler.BeanShellSampler: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: import test.Urlmap; Urlmap u = new Urlmap(); log.info(“xxxxxxxxxxxx:----”+ u.di ...'':无法访问字段:turl,对象:test.Urlmap@16ec122a

但它在Eclipse中运行良好。 Jmeter是否可以一次访问一个类值而不是嵌套的类值。

3 个答案:

答案 0 :(得分:2)

请记住, Beanshell!= Java 。此外,它不是最好的脚本选项,因为Beanshell解释器已知性能问题。

所以我强烈建议切换到JSR223 SamplerGroovy language,因为Groovy的Java兼容性要高得多,而且Groovy引擎具有更好的性能,因为它能够将行为良好的脚本编译成字节码并缓存编译脚本以加速连续执行。有关详细信息,请参阅Apache Groovy - Why and How You Should Use It

使用Groovy,您将能够“按原样”使用您的代码

JMeter Groovy Example

但是,通过实例引用访问静态字段不是Java的好习惯,所以我建议修改代码

import test.Urlmap;
Urlmap u =new Urlmap();
log.info("xxxxxxxxxxxx :----"+u.display());
log.info("turl :----"+Urlmap.turl); 

答案 1 :(得分:0)

问题是,您的turl字段具有受保护的范围:它仅在包test中可见,但不在JMeter的包中。

解决方案:将static替换为public

答案 2 :(得分:0)

如果您希望turl保持静态,只需添加public即可通过Jmeter访问

 public static String turl = null;

还应使用类名调用静态字段,使用:

 Urlmap.turl