jmeter 二次开发使用
jmeter二次开发实现方法
使用maven依賴进行开发
-
导入jmeter的maven依赖,需要和你使用的jmeter版本一致。
java<!-- https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_core --> <dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_core</artifactId> <version>5.6.3</version> </dependency>
-
现在就可以直接二次开发了。
-
然后将你开发好的代码直接放入jmeter中就可以直接运行了。
使用jmeter的jar包进行开发
- jmeter自带jar包位于:jmeter安装目录/lib/ext目录中。
- 将jar包导入自己的项目就可以进行二次开发了。
- 然后将你开发好的代码直接放入jmeter中就可以直接运行了。
jmeter 二次开发使用方法
函数开发
-
需要创建一个类继承AbstractFunction实现里面的四个抽象方法,代码如下。
javapackage com.leisure.function; import com.leisure.utils.RSAUtil; import org.apache.jmeter.engine.util.CompoundVariable; import org.apache.jmeter.functions.AbstractFunction; import org.apache.jmeter.functions.InvalidVariableException; import org.apache.jmeter.samplers.SampleResult; import org.apache.jmeter.samplers.Sampler; import java.util.ArrayList; import java.util.Collection; import java.util.List; public class RSAFunction extends AbstractFunction { // 函数传入的参数,可以在setParameters 方法中设置这个值,如果有多个参数就设置多个变量。测试的时候可以用无参构造方法 private String data = ""; // 算法名必须要使用'__'双下划线开头,且不能使用中文命名 private static final String FUNCTION_NAME = "__RSAPublicEncryptFunction"; /** * 执行函数体 * @param sampleResult 代表了一个采样结果,即对一个特定请求的执行结果的所有信息记录。它包含了关于请求执行的各种详细信息 * @param sampler 是JMeter中的一个基本元素,它是向服务器发送请求并记录响应的核心组件。每个sampler代表了一次具体的请求操作,比如HTTP请求、TCP请求、JDBC请求等。 * @return 函数处理结果 * @throws InvalidVariableException 异常 */ @Override public String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException { return RSAUtil.encryptByPublicKey(data); } /** * 设置函数的参数 * @param collection 参数 * @throws InvalidVariableException 异常 */ @Override public void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException { // 检测传入的参数是否就是一个 checkParameterCount(collection, 1); // 获取出入的参数值 Object[] object = collection.toArray(); data = ((CompoundVariable)object[0]).execute(); } /** * 设置函数名 * @return 函数名 */ @Override public String getReferenceKey() { return FUNCTION_NAME; } /** * 设置参数说明 * @return 参数说明 */ @Override public List<String> getArgumentDesc() { List<String> list = new ArrayList<>(); list.add("需要加密的内容(必填): "); return list; } }
-
使用maven直接构建成一个jar包,获取这个jar包,将这个jar包放到jmeter的:D:\Program Files\apache-jmeter-5.6.3\lib\ext 目录下,重启jmter,然后在函数里面找自己定义的函数名就可以使用了。
-
注意:如果使用了第三方jar包就直接将第三方jar包放到:D:\Program Files\apache-jmeter-5.6.3\lib\ext 目录下就可以了。
-
注意:如果使用了特定文件直接使用我类构造器获取对应文件的InputStream流就可以直接读文件中的类容了。代码如下:
javapackage com.leisure.config; import org.w3c.tidy.Out; import java.io.*; import java.net.URL; import java.net.URLDecoder; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; import java.util.Objects; public class FilePathConfig { public static Map<String, Reader> paths; // 获取对应文件的Read public static Reader getFileReader(String filename){ paths = new HashMap<>(); // 类加载器 ClassLoader classLoader = FilePathConfig.class.getClassLoader(); // 添加获取对应文件的Read ,rsa/publicKeyStr.pem 这个文件的resource path ,在 idae中直接右键文件选择这个路径进行复制就行 InputStream publicKeyStr = classLoader.getResourceAsStream("rsa/publicKeyStr.pem"); assert publicKeyStr != null; Reader reader_publicKeyStr = new InputStreamReader(publicKeyStr, StandardCharsets.UTF_8); //将文件的Read存放得到Map中方便以后获取 paths.put("publicKeyStr", reader_publicKeyStr); return paths.get(filename); } public static void main(String[] args) { Reader publicKeyStr = getFileReader("publicKeyStr"); System.out.println(publicKeyStr); } }