JMeter 压测Http接口

前言

今天产品在会议上吐槽说我们的服务接口连一点点压力都扛不住,用户稍微用下翻译功能,就报错 429。我一听 429 就觉得不对劲,明明4xx 的错误码应该找前端才对的,怎么能找我这个前端后端运维测试工程师呢?

image.png

如果是产品经理有意见,其实我们是可以单独解决的,麻烦就麻烦在当时老板在会上。不用多久我就会降职减薪,辞去码农,不写代码,喜提大礼包,走向人生低谷。血液中尚存的打工人因子立即觉醒了起来,我明白我不能坐以待毙。所以我只能祭出程序员的秘密武器 – 压测。
俗话说,压测至尊,负载屠龙,号令服务,莫敢不从,压力不出,谁与争锋!所以我们今天得来看看压测是怎么个事?

image.png

压测需要什么?

首当其冲的问题是用什么来压测?

那必定是 JMeter,有同学说 Apache benchApipost 这些也行啊。我只能说:啊,对对对,你说的对,那你用吧。

然后是压测什么?

压测产品经理(bushi),应该是压测产品经理说的那个 HTTP 接口。虽然我挺赞成解决不了问题就解决提出问题的人。但先别急,我们得先让老板看看我们的工作能力。到时候压测报告一甩,再狗叫一些高并发,高可用。总之狗叫权归我之时。就是我升级加薪,当上总经理,出任CEO,迎娶白富美,走上人生巅峰的时候了。

最后最重要的是什么?

当然是压测配置啊,压测时候你怼个1c1g的机器。压出来报告一甩,你还没狗叫完,老板就立即杀狗了。

这个程序员不行啊,搞个接口 qps 才到 200,这怎么支撑我的宏图大业?我将来可是要和苹果掰掰手腕的,指不定到时候还要收购他呢?这程序员水平不够啊,我们的同事都是国际一线的水平才能和苹果干呀,还好产品及时发现了。你最好主动离职,公司不追究你的责任。

所以压测最重要的是什么不用我说了吧?

安装JMeter

安装JMeter前需要先安装JDK,JDK 安装完成的标准就是运行这条命令能打印出Java版本号出来

PS C:\Users\Administrator> java --version
openjdk 21.0.4 2024-07-16 LTS
OpenJDK Runtime Environment Temurin-21.0.4+7 (build 21.0.4+7-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.4+7 (build 21.0.4+7-LTS, mixed mode,sharing)

到这个下载页面 Apache JMeter - Download Apache JMeter 选个包下下来,一般window就选择zip,其他系统选择tgz,当然你要倒反天罡也随你:

下载完之后解压,执行 jmeter.bat,它会打开命令行和一个图形应用

image.png

提供一个HTTP接口用于压测

这是个demo,如果你想直接对线上进行压测。我是十分鼓励的,不止能得到真实的数据,还能测试服务宕机后还能不能高可用。

import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RequestMethod;  
import org.springframework.web.bind.annotation.RestController;  
  
import java.util.concurrent.atomic.AtomicInteger;  
  
@RestController  
public class IndexController {  
  
    private final AtomicInteger counter = new AtomicInteger(0);  
    private long lastResetTime = System.currentTimeMillis();  
    private static final int LIMIT = 10;  
    private static final long ONE_SECOND = 1000;  
  
    @RequestMapping(value = "/test", method = RequestMethod.GET)  
    public String test() {  
        // 计数器,看不懂就算了。冤有头债有主你应该找GPT
        long currentTime = System.currentTimeMillis();  
        if (currentTime - lastResetTime >= ONE_SECOND) {  
            counter.set(0);  
            lastResetTime = currentTime;  
        }  
        int currentCount = counter.incrementAndGet();  
  
        String response = currentCount <= LIMIT 
        ? "我是接口,我要打"+LIMIT+"个" 
        : "你这个小伙子,不讲武德,给我蹭了一下";  
        
        System.out.println(currentCount + " " + response);  
        return response;  
    }  
}

curl 测试一下子,出现 我是接口,我要打10个 就是接口O了

$ curl localhost:8080/test
我是接口,我要打10个

接下来我们来压一下

配置 JMeter 压测 HTTP 接口

  1. 先创建测试计划

image.png

  1. 创建线程组
    线程组简单理解就是【线程】【组合】起来,说白了就是多个线程。因为 JMeter 是 Java 实现的,Java 要实现并发就是用的线程。

image.png

  1. 配置线程组参数

image.png

这个配置的意思很明显了,1s内30个人一起搞一个接口,搞3轮。如果把 Infinite 勾上,就是一直搞,直到接口顶不住。(这个叫接口的人真的太惨了)

  1. 添加HTTP接口配置

添加一个HTTP 请求

image.png

写上接口参数

image.png

如果需要添加请求头右键然后选这里再选这里最后选那里就可以了

image.png

image.png

  1. 查看结果

View Results Tree 是看每一次请求信息的
Summary Report 是看总体请求信息的,一般压测也是看这个
两个监听器都添加上

image.png

  1. 开始压测

我们要讲武德,上10个试试看

image.png

image.png

看起来打10个少了。我们不讲武德了,直接上100个

image.png

image.png

100个只是蹭了一下,接口还是生龙活虎的,我们彻底不讲武德了,上10000个

image.png

image.png

10000 太猛了,给接口干爆了。看吞吐量差不多可以处理880个,武林要以和为贵。

  1. 导出压测报告

image.png

先配置上中间结果存储的位置,配置好了之后再次运行,结果会被写入到文件中(不用打开看了,里面是一堆看不懂的记录,接着往下,把这些记录可视化)

image.png

image.png

最后把这份报告甩到群里。然后狗叫一声:我的接口支持高可用,高并发下接口表现优异,具体可查看压测报告。有了你这个报告,连老板都舍不得给你发大礼包了。

image.png

  • 26
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JMeter是一款开源的性能测试工具,可以用于对Web应用程序、接口和服务器进行压力测试。在JMeter中,可以通过组合多个接口来进行压测。 下面是一种常见的JMeter压测组合接口的方式: 1. 创建线程组:在JMeter中,首先需要创建一个线程组,用于模拟并发用户。可以设置线程数、循环次数等参数。 2. 添加HTTP请求:在线程组下添加HTTP请求,默认情况下,JMeter会发送一个HTTP GET请求。可以根据需要修改请求方法、URL、参数等。 3. 添加断言:可以在HTTP请求后添加断言,用于验证接口返回结果是否符合预期。常见的断言类型包括响应代码、响应消息、响应时间等。 4. 添加参数化:如果需要对接口进行参数化测试,可以使用JMeter提供的参数化功能。可以通过CSV文件、数据库等方式提供参数数据。 5. 添加监听器:可以添加监听器来收集和分析测试结果。常见的监听器包括查看结果树、聚合报告、图形结果等。 6. 添加逻辑控制器:如果需要对接口进行复杂的逻辑控制,可以使用JMeter提供的逻辑控制器。例如,循环控制器、条件控制器等。 7. 添加定时器:可以添加定时器来模拟用户的访问间隔。常见的定时器包括固定定时器、随机定时器等。 8. 运行测试计划:配置完成后,可以运行整个测试计划,JMeter会模拟并发用户发送请求,并收集测试结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值