Jmeter本身功能不满足测试需求时,我们可以自己编写相应代码,然后通过BeanShell调用java方法。通常情况下,Jmeter的每个线程都会初始化一次相应的类,但某些特殊场景要求我们的类仅能初始化一次,可以通过单例模式解决。
举个例子,调用一个登录的接口,要求对密码进行hmac计算进行加密,所以要在BeanShell PreProcessor中调用加密类的hmac接口。但是该加密类尤其耗费内存,一般初始化超过3次就会报OOM错误。所以我们在测试时,只能初始化一次,所有线程共用一个加密类实例。
Java类编写:
public class TestSingleton {
private static Provider instance = null;
private static Provider getInstance(String env){
if(instance == null){
// 初始化
instance = new Provider(env);
}
return instance;
}
public static String getHac(String env, String passwd){
Provider provider = TestSingleton.getInstance(env);
String result = provider.doFinal(passwd);
return result;
}
}
Jmeter调用:
String hmac = TestSingle.getHac("env", "123456");
单例模式还有很多种实现方法,饿汉式、懒汉式、内部类等,详解可参见(一)单例模式详解_左潇龙的博客-CSDN博客。