Jmeter扩展组件开发

一、创建java工程

1、安装maven

image-20200205111637027

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

image-20200205111759813

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

image-20200205111932907

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

image-20200205112254102

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

然后确定。

image-20200205112356399

image-20200205112650207

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

image-20200205113253258

2、创建maven项目

image-20200205104944749

image-20200205105000783

3、检查项目配置

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

image-20200205105054136

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

image-20200205105105208

image-20200205105113520

4、引入依赖包

注意,包的版本要对应本地jmeter版本,本地安装的jmeter版本为5.1.1。

image-20200205104715215

<?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

image-20200205113757138

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

image-20200205114541158

2、打开jmeter

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

image-20200205114834205

3、自定义参数

image-20200205135715879

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");
    }
}

image-20200205135757040

4、初始化方法的使用

image-20200205141147860

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");
    }



}

image-20200205141110437

5、结果显示在查看结果树

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

image-20200205154711486

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");
    }



}

image-20200205154733270

6、自定义java请求开发

image-20200205162740993

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");
    }



}

image-20200205162917782

7、自动打包配置

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

image-20200205202529140

<?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>

image-20200205202223059

posted @ 2020-02-25 20:57  xyztank  阅读(335)  评论(0)    收藏  举报