Jmeter扩展组件开发
一、创建java工程
1、安装maven

- 配置环境变量:把下载包解压后,右键桌面“此电脑”,然后点击“属性”。

然后,在弹出的新界面中,在系统变量部分单击“新建”

在弹出的新建变量窗口中新建变量,变量名“MAVEN_HOME”,变量值“E:\apache-maven-3.6.3\bin”

在系统变量部分,找到"Path"变量,点“编辑”,然后在编辑窗口点“新建”,添加“%MAVEN_HOME%\bin”
然后确定。


命令检查maven是否安装成功。

2、创建maven项目


3、检查项目配置
第一次引入项目时,有可能ideal无法识别出源代码,此时需要检查项目配置是否有问题

如果点击java时,ideal会对应选中Sources;如果点击resources时,ideal会对应选中Resources;那么项目配置没有问题。


4、引入依赖包
注意,包的版本要对应本地jmeter版本,本地安装的jmeter版本为5.1.1。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>mydemo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>5.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>5.1.1</version>
</dependency>
</dependencies>
</project>
二、开发扩展组件示例
1、maven打包
java项目开发完毕后,进行打包。打包完毕后,项目路劲中将会自动生成target文件夹,找到其中的mydemo-1.0-SNAPSHOT.jar文件。
mvn clean package

将mydemo-1.0-SNAPSHOT.jar放至jmeter安装目录中的\lib\ext下:

2、打开jmeter
创建线程组,创建一个java请求,在Classname中就可以看到刚打包的扩展组件,执行后可以看到输出的结果。

3、自定义参数

package com.mydemo;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
public class Second implements JavaSamplerClient {
//URLNAME就是jmeter图形化界面中显示的变量名称
private static final String URLNAME="URL";
//设置界面中显示的变量值
private static final String DEFAULTURL="http://www.baidu.com";
/**显示哪些属性
* @return arguments
*/
public Arguments getDefaultParameters() {
System.out.println("run getDefaultParameters");
Arguments arguments = new Arguments();
arguments.addArgument(URLNAME,DEFAULTURL);
return arguments;
}
/**初始化程序
* @param javaSamplerContext
*/
public void setupTest(JavaSamplerContext javaSamplerContext) {
System.out.println("run setupTest");
}
/**执行程序
* @param javaSamplerContext
* @return
*/
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
System.out.println("running");
return null;
}
/**释放程序资源
* @param javaSamplerContext
*/
public void teardownTest(JavaSamplerContext javaSamplerContext) {
System.out.println("run teardown");
}
}

4、初始化方法的使用

package com.mydemo;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
public class Second implements JavaSamplerClient {
//URLNAME就是jmeter图形化界面中显示的变量名称
private static final String URLNAME="URL";
//设置界面中显示的变量值
private static final String DEFAULTURL="http://www.baidu.com";
/**显示哪些属性
* @return arguments
*/
public Arguments getDefaultParameters() {
System.out.println("run getDefaultParameters");
Arguments arguments = new Arguments();
arguments.addArgument(URLNAME,DEFAULTURL);
return arguments;
}
private String inputUrl;
/**初始化程序
* @param javaSamplerContext
*/
public void setupTest(JavaSamplerContext javaSamplerContext) {
inputUrl = javaSamplerContext.getParameter(URLNAME,DEFAULTURL);
System.out.println("run setupTest");
System.out.println("用户输入的URL地址是:"+inputUrl);
}
/**执行程序
* @param javaSamplerContext
* @return
*/
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
System.out.println("running");
return null;
}
/**释放程序资源
* @param javaSamplerContext
*/
public void teardownTest(JavaSamplerContext javaSamplerContext) {
System.out.println("run teardown");
}
}

5、结果显示在查看结果树
注意,在result.setSuccessful(true)设置为TRUE时,jmeter的结果树中会显示为绿色正确。

package com.mydemo;
import org.apache.commons.lang.ObjectUtils;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
public class Second implements JavaSamplerClient {
//URLNAME就是jmeter图形化界面中显示的变量名称
private static final String URLNAME="URL";
//设置界面中显示的变量值
private static final String DEFAULTURL="http://www.baidu.com";
/**显示哪些属性
* @return arguments
*/
public Arguments getDefaultParameters() {
System.out.println("run getDefaultParameters");
Arguments arguments = new Arguments();
arguments.addArgument(URLNAME,DEFAULTURL);
return arguments;
}
private String inputUrl;
/**初始化程序
* @param javaSamplerContext
*/
public void setupTest(JavaSamplerContext javaSamplerContext) {
inputUrl = javaSamplerContext.getParameter(URLNAME,DEFAULTURL);
System.out.println("run setupTest");
System.out.println("用户输入的URL地址是:"+inputUrl);
}
private String resultData;
/**执行程序
* @param javaSamplerContext
* @return
*/
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
SampleResult result = new SampleResult();
System.out.println("running");
resultData = "这是结果";
result.setSuccessful(true);
result.setResponseData(resultData,null);
result.setDataType(SampleResult.TEXT);
result.setDataEncoding("UTF-8");
return result;
}
/**释放程序资源
* @param javaSamplerContext
*/
public void teardownTest(JavaSamplerContext javaSamplerContext) {
System.out.println("run teardown");
}
}

6、自定义java请求开发

package com.mydemo;
import org.apache.commons.lang.ObjectUtils;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
public class Second implements JavaSamplerClient {
//URLNAME就是jmeter图形化界面中显示的变量名称
private static final String URLNAME="URL";
//设置界面中显示的变量值
private static final String DEFAULTURL="http://www.baidu.com";
/**显示哪些属性
* @return arguments
*/
public Arguments getDefaultParameters() {
System.out.println("run getDefaultParameters");
Arguments arguments = new Arguments();
arguments.addArgument(URLNAME,DEFAULTURL);
return arguments;
}
private String inputUrl;
/**初始化程序
* @param javaSamplerContext
*/
public void setupTest(JavaSamplerContext javaSamplerContext) {
inputUrl = javaSamplerContext.getParameter(URLNAME,DEFAULTURL);
System.out.println("run setupTest");
System.out.println("用户输入的URL地址是:"+inputUrl);
}
private String resultData;
/**执行程序
* @param javaSamplerContext
* @return
*/
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
SampleResult result = new SampleResult();
System.out.println("running");
StringBuffer sb = new StringBuffer();
try {
URL url = new URL(inputUrl);
URLConnection conn = url.openConnection();
byte[] buffer = new byte[1024];
int len;
result.sampleStart();
InputStream in = conn.getInputStream();
while ((len=in.read(buffer))!=-1){
resultData = new String(buffer,"UTF-8");
sb.append(resultData);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//resultData = "这是结果";
result.setSuccessful(true);
result.setResponseData(resultData,null);
result.setDataType(SampleResult.TEXT);
result.setDataEncoding("UTF-8");
return result;
}
/**释放程序资源
* @param javaSamplerContext
*/
public void teardownTest(JavaSamplerContext javaSamplerContext) {
System.out.println("run teardown");
}
}

7、自动打包配置
配置自动打包后,打包生成的jar包会自动拷贝至jmeter安装目录下E:\jmeter-5.2.1\lib\ext,而不用每次手动复制。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>mydemo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>5.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>5.1.1</version>
</dependency>
</dependencies>
<build>
<finalName>mydemo-1.0-SNAPSHOT</finalName>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<configuration>
<tasks>
<copy todir="E:\jmeter-5.2.1\lib\ext">
<fileset dir="${project.build.directory}">
<include name="mydemo-1.0-SNAPSHOT.jar" />
</fileset>
</copy>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>


浙公网安备 33010602011771号