Jmeter无缝支持java语言,使其在市场上有很高的占有率,一些公司还专门对JMenter进行二次开发,使其成为公司级压测平台。

本次介绍JMenter的一些入门级使用,方便大家继续深入探索。

1、启动Jmeter

java实现压测模式随机生成数据上传至服务器_jmeter

2、压测简单http接口

 添加线程组

java实现压测模式随机生成数据上传至服务器_apache_02

 线程数:代表本次压测要使用多少个线程

ramp-up period(in seconds):代表"ramp-up period"(逐渐增加负载时间)是指在测试开始时,JMeter将逐渐增加并达到所需的并发用户数或线程数的时间段。它表示在多长时间内启动所有的并发用户或线程。

假设你希望模拟100个并发用户在5秒内访问你的应用程序。在这种情况下,你可以将ramp-up period设置为5秒。这意味着JMeter将在5秒内逐渐启动100个并发用户,每秒启动20个用户。

逐渐增加负载时间的设置对于模拟真实的用户行为和逐渐增加负载的场景非常有用。它可以避免突然的并发访问对应用程序造成的压力冲击。同时,它还可以帮助你观察应用程序在逐渐增加负载时的性能表现。

循环次数:分永远和期望的次数,永远代表线程会一直循环执行,不会主动退出,设置次数则每个线程执行相应的时间后主动退出

java实现压测模式随机生成数据上传至服务器_java_03

 添加HTTP请求

java实现压测模式随机生成数据上传至服务器_java_04

 服务器名称或IP:代表请求域名或IP地址

端口号:代表请求端口,http请求默认是80,https默认是443

implementation选非java

协议为http或https

Content encoding一般是UTF-8

路径为请求资源路径

如果请求是表单形式即key value形式则勾选上use multipart/form-data for post在Parameters中添加请求key value 

如果是请求体在body中,就在Body Data中填写请求体

java实现压测模式随机生成数据上传至服务器_jmeter_05

添加Cookie

如果请求需要带Cookie则添加如下取样器

java实现压测模式随机生成数据上传至服务器_jmeter_06

 添加请求头

如果请求需要必要头部信息,则加此取样器

java实现压测模式随机生成数据上传至服务器_jmeter_07

 添加断言

java实现压测模式随机生成数据上传至服务器_ide_08

 3、执行

添加结果树和聚合报告

java实现压测模式随机生成数据上传至服务器_ide_09

执行

可以通过右上角的叹号查看代码执行遇到的问题

java实现压测模式随机生成数据上传至服务器_ide_10

4、执行java接口 

编写java代码

在pom中添加如下依赖

<!-- 添加 JMeter 依赖 -->
        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_core</artifactId>
            <version>5.4.1</version> <!-- 使用你希望的 JMeter 版本 -->
        </dependency>
        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_http</artifactId>
            <version>5.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_java</artifactId>
            <version>5.4.1</version>
        </dependency>

继承AbstractJavaSamplerClient类重写runTest方法

package jmeter;

import com.jd.coffeeframework.common.adapter.export.dto.ExportRequest;
import com.jd.coffeeframework.common.adapter.export.dto.ExportResponse;
import com.jd.jr.cbp.bmall.api.AccessFacade;
import com.jd.jr.cbp.bmall.api.CouponFacade;
import com.jd.jr.cbp.bmall.api.TradeFacade;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import utils.JsfUtils;

public class TestJmeter extends AbstractJavaSamplerClient {

    private String jsfConfigPath = "/jsf-consumer.xml";
    private AccessFacade accessFacade;
    private CouponFacade couponFacade;
    private TradeFacade tradeFacade;

    @Override
    public void setupTest(JavaSamplerContext var1) {
        ClassPathXmlApplicationContext context = JsfUtils.getAllServices(jsfConfigPath);
        accessFacade = (AccessFacade)context.getBean("accessFacade");
        couponFacade = (CouponFacade)context.getBean("couponFacade");
        tradeFacade = (TradeFacade)context.getBean("tradeFacade");
    }

    @Override
    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        ExportRequest<String> stringExportRequest = new ExportRequest<>();
        stringExportRequest.setReqNo("989786569870");
        stringExportRequest.setRequestTime("121333232");
        stringExportRequest.setData("4545454");
        ExportResponse<Boolean> booleanExportResponse =             
        accessFacade.queryFinancingOpenedStatus(stringExportRequest);
        return null;
    }

    @Override
    public void teardownTest(JavaSamplerContext var1) {
        super.teardownTest(var1);
    }

}

 将代码打成jar包,放到jmeter安装目录的lib\ext\目录下,重新打开jmeter,在java请求取样器中可以选择到继承了AbstractJavaSamplerClient的类,执行时会执行runTest方法。

将代码执行依赖的其他jar包放到lib目录下,重新打开jmeter,执行即可。

java实现压测模式随机生成数据上传至服务器_java_11

可以看到继承AbstractJavaSamplerClient的类。

java实现压测模式随机生成数据上传至服务器_jmeter_12