JMeter 压测Http接口

news2024/11/24 8:41:22

前言

今天产品在会议上吐槽说我们的服务接口连一点点压力都扛不住,用户稍微用下翻译功能,就报错 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,当然你要倒反天罡也随你:

  • zip包:https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.zip
  • tgz包:https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1986540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在生成式AI里使用 Ray Data 进行大规模 RAG 应用的 Embedding Inference

检索增强生成 (RAG) 是企业级生成式 AI&#xff08;GenAI&#xff09;应用的热门案例之一。多数 RAG 教程演示了如何利用 OpenAI API 结合 Embedding 模型和大语言模型&#xff08;LLM&#xff09;来进行推理&#xff08;Inference&#xff09;。然而&#xff0c;在开发过程中&…

【第16章】Spring Cloud之Gateway全局过滤器(安全认证)

文章目录 前言一、公共模块1. 引入依赖2. 工具类 二、用户服务1. 新建模块2. 引入依赖3. 启动类4. 基本配置5. 登录接口 三、网关服务1. 引入依赖2. 应用配置3. 自定义过滤器 四、单元测试1.介绍2. 登录接口3. 提供者接口3.1 无token3.2 有token 总结 前言 我们已经接入了网关…

构造散列表以及处理冲突问题

目录 一. 散列表的基本概念 二. 散列表的冲突问题 三. 构造散列函数 四. 处理冲突 一. 散列表的基本概念 散列表简而言之就是一个根据一个对应关系&#xff08;这个对应关系也叫散列函数&#xff09;来存储关键码&#xff08;关键字&#xff09;的一个表。 例如&#xff0c;…

SSM电子商务系统-计算机毕业设计源码68470

基于SSM框架的电子商务系统的设计与实现 摘 要 随着电子商务的迅猛发展和计算机信息技术的全面跃升&#xff0c;网上购物系统由于其迎合了人们诉求和期望而渗入社会生活各个层面和角落。本文设计并实现了一个基于SSM框架的电子商务系统。该系统旨在为用户提供一个舒适且快捷的…

创建第一个Spring MVC项目

上篇文章&#xff0c;我们围绕什么是Spring MVC进行讲述了&#xff0c;这篇&#xff0c;我们将在IDEA创建我们的第一个Spring MVC项目。 创建我们的第一个Spring MVC项目 创建项目模块 如果你出现上面小图这样的&#xff0c;代表你就成功创建成功了一个Web项目&#xff0c;当…

商品购物网页的设计

系统名称&#xff1a; 基于TCP网络通信及数据库的网页查询系统 文档作者&#xff1a;清馨 创作时间&#xff1a;2024-8-3 最新修改时间&#xff1a;2024-8-6 最新版本号&#xff1a; 1.0 1.背景描述&#xff1a; 该系统为创建网络并发服务器&#xff0c;通过HTTP超文本网络…

【ML】 如何训练transform model, 模型训练实现细节

【ML】 如何训练transform model, 模型训练实现细节 1. transform 训练 原理2. transform 训练TIPS2.1 copy mechanism![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/69fb84a73d0240cc9042e17ae10bbef7.jpeg) 2. bean search束搜索的工作原理&#xff1a;束搜索的特…

部署DR模式集群

一、配置实验环境 每台主机的防火墙和SELinux都要关掉 systemctl stop firewalld setenforce 0 1、client(eth0为nat模式) 配置好网卡IP和网关IP&#xff0c;然后重启网卡 nmcli connection reload nmcli connection up eth0 [rootclient ~]# cat /etc/NetworkManager/syst…

500Kg载重履带式无人车技术详解

本款500Kg载重履带式无人车&#xff0c;专为复杂环境与多样化任务设计&#xff0c;具备卓越的机动性和承载能力。其基础参数如下&#xff1a; 最大载重量&#xff1a;500Kg&#xff0c;适用于运输装备、物资或执行特定作业任务。 整车重量&#xff1a;根据具体配置有所不同&am…

解决RDP远程计算机收到非预期的证书的问题

打开证书管理 查看远程桌面证书删除 然后搜索别的同名证书&#xff0c;如果在受信任的根证书里面&#xff0c;也删除。

差旅平台如何为企业降本30%?事前管控是关键

在多员工、业务跨地域的众多企业中&#xff0c;差旅成本常常成为一项巨大负担。为了有效解决这一问题&#xff0c;许多企业开始寻求可以显著降低企业差旅成本的差旅平台。本次&#xff0c;我们将集中拆解上市公司中智药业集团是如何通过差旅平台分贝通实现差旅成本减少30%效果的…

微信小程序教程011-3:京西购物商城实战之Home页实现

文章目录 3、首页3.0 创建home分支3.1 配置网络请求3.2 轮播图区域3.2.1 请求轮播图的数据3.2.2 渲染轮播图的UI结构3.2.3 配置小程序分包3.2.4 点击轮播图跳转到商品详情页3.2.5 封装 uni.$showMsg() 方法3.3 分类导航区域3.3.1 获取分类导航的数据3.3.2 渲染分类导航的UI结构…

通过Sui Gas Pool扩展赞助交易gas费

Mysten Labs正在向Sui开发者社区开源Sui Gas Pool功能。这项创新服务旨在大规模赞助Sui上交易的gas费&#xff0c;解决高并发需求应用的用户入驻问题。 Sui的原生功能赞助交易&#xff0c;允许交易使用与发送者地址不同的gas coin支付gas费。这一功能允许服务补贴用户的交易成…

如何评估并选择最佳的国内项目管理软件?

国内外主流的10款国内项目管理软件对比&#xff1a;PingCode、Worktile、Jira 、Basecamp、Trello、Asana 、Wrike、Tower 、禅道、Teambition 。 在选择适合自己企业的项目管理软件时&#xff0c;很多人会感到无从下手&#xff0c;担心无法找到既符合预算又能满足团队需求的解…

【优秀python案例】基于百度贴吧的数据采集与文本分析设计与实现

数据采集实现&#xff1a; 对百度贴吧帖子数据的采集。首先&#xff0c;使用requests库发送HTTP请求&#xff0c;通过设置请求头模拟浏览器访问&#xff0c;获取网页的HTML内容。然后&#xff0c;利用BeautifulSoup库对HTML内容进行解析&#xff0c;以便提取所需的信息。 在循…

AI回答:C#项目编译后生成部分文件的主要职责

【引入】以ConsoleApp1为例&#xff0c;请问C#编译之后以下文件有啥用 1.bin\runtimes 文件夹存放什么&#xff0c;有什么用&#xff1f; bin\runtimes 文件夹存放了项目的运行时相关文件&#xff0c;这些文件包括了各种目标平台的运行时库。 2.bin\生成的exe文件可以在别的电脑…

(这是让文心一言生成的文心一言指令博客)3分钟学会写文心一言指令:解锁AI创作新境界

3分钟学会写文心一言指令&#xff1a;解锁AI创作新境界 在这个AI技术日新月异的时代&#xff0c;文心一言作为领先的智能语言模型&#xff0c;正逐步改变着我们的创作与交流方式。无论是撰写文章、创作诗歌&#xff0c;还是进行日常对话&#xff0c;文心一言都能凭借其强大的语…

记忆化搜索——1

目录 1.斐波那契数 2.不同路径 3.最长递增子序列 4.猜数字大小2 5.矩阵中的最长递增路径 1.斐波那契数 该题规律很明显&#xff0c;就直接放记忆化搜索的版本了 class Solution { public:int dfs(int n){if(n0||n1)//递归出口{return n;}if(f[n-1]-1)//检查是否已经记忆过…

计算机网络中拥塞控制的门限值怎么设置

拥塞避免的门限值设置主要涉及到加权随机早期检测&#xff08;‌WRED&#xff09;‌技术&#xff0c;‌这是一种拥塞避免机制&#xff0c;‌通过为每个队列设定一对低门限和高门限值来实现。‌具体来说&#xff0c;‌当队列长度小于低门限时&#xff0c;‌不丢弃报文&#xff0…

64 lambda 表达式

lambda 表达式常用来声明匿名函数&#xff0c;即没有函数名字的临时使用的小函数&#xff0c;常用在临时需要一个类似于函数的功能但又不想定义函数的场合。 lambda 表达式只可以包含一个表达式&#xff0c;不允许包含其他复杂的语句&#xff0c;但在表达式中可以调用其他函数…