JMeter 压测Http接口

886 篇文章 2 订阅
830 篇文章 0 订阅

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

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

压测需要什么?

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

那必定是 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,它会打开命令行和一个图形应用

提供一个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、先创建测试计划

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

3、配置线程组参数

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

4、添加HTTP接口配置

添加一个HTTP 请求

写上接口参数

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

5、查看结果

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

6、开始压测

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

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

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

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

7、导出压测报告

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

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

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

在这里插入图片描述

  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值