当前位置:   article > 正文

Jmeter自定义Java请求_jmeter 自定义java

jmeter 自定义java

一、需求背景

在日常压测过程中,有些请求逻辑比较复杂的时候,Jmeter 中自带的sample取样器不够灵活,或者性能就会比较低了,这个时候就可以自己写java代码实现自己的请求。

二、准备工作

1、创建Maven工程

在这里插入图片描述

2、引入Jmeter相关Jar包

在这里插入图片描述
其中ApacheJMeter_core和ApacheJMeter_java2个jar是自定义Jmeter请求的核心开发包,两个jar包的版本需要和你本地jmeter版本保持一致,防止因为版本不一致出现问题,unirest-java该jar包主要用于发送get、post请求

相关jar可以去 https://mvnrepository.com/ 查询引用

3、配置maven打包插件

 <build>

        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-compiler-plugin</artifactId>

                <version>3.8.1</version>

                <configuration>

                    <source>1.8</source>

                    <target>1.8</target>

                </configuration>

            </plugin>


            <plugin>
                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>

                <configuration>

                    <descriptorRefs>

                        <descriptorRef>jar-with-dependencies</descriptorRef>

                    </descriptorRefs>

                </configuration>

                <executions>

                    <execution>

                        <id>make-assembly</id>

                        <phase>package</phase>

                        <goals>

                            <goal>single</goal>

                        </goals>

                    </execution>

                </executions>

            </plugin>

        </plugins>

    </build>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61

三、开始

1、创建Java测试类

新建一个类,类名为任意取,遵循Java命名规范即可,该类继承AbstractJavaSamplerClient类,AbstractJavaSamplerClient存在于ApacheJMeter_java.jar这个JAR包中,引用即可调用。

常用的4个方法如下:
setupTest(): 初始化方法,用于初始化性能测试时的每个线程;

getDefaultParameters(): 主要用于设置传入的参数;

runTest(): 为性能测试时的线程运行体;该方法在测试类继承AbstractJavaSamplerClient类时,必须实现的方法

teardownTest(): 测试结束方法,用于结束性能测试中的每个线程。

package com.apache.jmeter.functions;

import kong.unirest.HttpResponse;
import kong.unirest.JsonNode;
import kong.unirest.Unirest;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;

import java.io.Serializable;
import java.util.HashMap;

/**
 * Created by YangWeiMin on 2021/12/6
 */
public class PageQuery extends AbstractJavaSamplerClient implements Serializable {

    // 该部分主要设置一些静态变量,可以是接口请求参数或者其他变量
    private static final String env = "xxxxx";
    private static final String creatorUserCode = "xxxxxx";
    private static final Integer offset = xxxxx;
    private static final String releaseTimeFrom = "xxxxxxx";
    private static final String releaseTimeTo = "xxxxxx";
    private static final Integer size = xxxxxx;
    private static final String dynamicInfoCode = null;
    private static final String url = env + "/api/xxxxx/query";
    private static final String token = null;


    // 该部分代码主要设置Unirest连接池配置
    static {
        Unirest.config().concurrency(1000, 100);
    }

    
    // 该部分代码主要是用于设置参数显示,此处设置的参数可以在jmeter中展示
    @Override
    public Arguments getDefaultParameters() {
        Arguments arguments = new Arguments();
        arguments.addArgument("env", env);
        arguments.addArgument("creatorUserCode", creatorUserCode);
        arguments.addArgument("offset", String.valueOf(offset));
        arguments.addArgument("releaseTimeFrom", releaseTimeFrom);
        arguments.addArgument("releaseTimeTo", releaseTimeTo);
        arguments.addArgument("size", String.valueOf(size));
        arguments.addArgument("dynamicInfoCode", dynamicInfoCode);
        arguments.addArgument("token", token);
        return arguments;
    }

    /**
     * 执行测试,测试的逻辑写在此处
     *
     * @param context 请求参数
     * @return 请求结果
     */
    @Override
    public SampleResult runTest(JavaSamplerContext context) {
        SampleResult sampleResult = new SampleResult();
        sampleResult.sampleStart();  // 开启计时
        HashMap<String, Object> data = new HashMap<>();
        HashMap<String, String> headers = new HashMap<>();
        try {
            data.put("creatorUserCode", context.getParameter("creatorUserCode")); // context.getParameter功能是获取jmeter中填写的参数
            data.put("dynamicInfoCode", context.getParameter("dynamicInfoCode"));
            data.put("offset", context.getParameter("offset"));
            data.put("releaseTimeFrom", context.getParameter("releaseTimeFrom"));
            data.put("releaseTimeTo", context.getParameter("releaseTimeTo"));
            data.put("size", size);
            headers.put("Content-Type", "application/json");
            headers.put("Authorization", context.getParameter("token"));
            HttpResponse<JsonNode> response = Unirest.post(url)
                    .headers(headers)
                    .body(data)
                    .asJson();
            if (response.getStatus() != 200) {
                sampleResult.setSuccessful(false);
            }
            sampleResult.setResponseData(response.getBody().toPrettyString(), "utf-8");
            sampleResult.setResponseCodeOK();
            System.out.println("Response data==> " + response.getBody().toPrettyString());
            sampleResult.setSuccessful(true);

        } catch (Exception e) {
            System.out.println("请求失败:" + e.getMessage());
            sampleResult.setSuccessful(false);
        } finally {
            sampleResult.sampleEnd();  // 结束计时
        }
        return sampleResult;

    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94

四、Jmeter运行

1、编译打包

相关代码编写完成后,使用Idea工具自带的Maven工具进行打包
在这里插入图片描述
打包成功后在相关jar在target目录下,将打好的jar包放到jmeter安装目录lib/ext目录下
在这里插入图片描述

2、Jmeter如何使用

在这里插入图片描述
此时,按照正常Jmeter使用流程,点击运行按钮,即可正常进行压测

五、小结

Jmeter是用java语言开发的,所以我们可以用java开发出代码,可以直接使用,希望大家可以学习到知识。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/717396
推荐阅读
相关标签
  

闽ICP备14008679号