接口压力测试 jmeter--入门篇(一)

news/2024/10/18 18:26:42/

压力测试的目的

  • 评估系统的能力
  • 识别系统的弱点:瓶颈/弱点
  • 检查系统的隐藏的问题
  • 检验系统的稳定性和可靠性

二 性能测试指标以及测算

  • 【虚拟用户数】:线程=用户
  • 【并发数】:指在某一时间,一定数量的虚拟用户同时对系统的某个功能进行交互。一般通过集合点实现。
  • 【事务】:一个接口可以是事务,多个接口也可以是事务,一个流程可以是事务,事务代表一个完整的功能。由测试人员决定。
  • 【场景】:性能测试的用例
  • 【响应时间】:Response Time

平均响应时间:

  中位数:从小到大排序,选择第50个。

  90%:100 个,从小到大排序,选择第90个。

  95%:从小到大排序,选择第95个。

  99%:从小到大排序,选择第99个。

  基准测试:1个用户请求接口。200-500MS

  压力测试:N个用户并发请求接口,2秒

  • 【TPS】TPS是系统的重要性能指标,用于衡量系统在一定时间内能够处理的事务数(交易数)。(一般在银行中经常看到 TPS)

每秒完成的事务数:Transactions per sencond

如果是一个接口的话,TPS=吞吐量。(多个接口的话不同)

计算公式:总的事务数/总的运行时间

比如1:某一系统1分钟处理1000个事务,那么 TPS=1000/60=16.7

比如2:按去年的经营数据,2022年最高的一天有10万笔交易。预测2023年TPS需要多少合格?

总事务数=10万,时间=24*60*60=86,400秒

理论上TPS = 100000/86400=1.2

(1)没有更详细的数据:根据二八定律(80%的事务在20%的时间完成)计算:

TPS = 100000*0.8 / 86400*0.2=80000/17280=4.6

(2)如果有更详细的数据:

  • 5万比交易是晚上的8-9点完成的。

         TPS=50000/3600=13.9

  • 业务的增长:30%

       TPS=(50000+50000*0.3)/3600=18

  • 【QPS】每一秒的查询率。

    TPS(每秒的事务数),QPS(一般是用于数据处理),RPS(每一秒的请求), HPS(每一秒的点击率)

         如果一个事务只有一个接口,那么TPS=QPS=RPS

  • 【吞吐量】衡量网络成功传输的数量量,单位Byte/S
  • 【资源利用率】服务器:CPU,内存,磁盘,网络。

三 性能测试流程

1. 需求分析以及需求确定(指标值,场景,环境,人员)

一般提性能需求的(以下是否合理?测试人员要有自己的分辨能力):

  • 客户:OA项目,1万员工,并发一万。
  • 产品经理:单台阿里云服务器。支撑1万并发。
  • 项目组领导:3年之后需要达到什么样的性能。

2. 性能测试计划和方案制定。

  • 基准测试
  • 负载测试
  • 压力测试
  • 稳定性测试
  • 其他:配置测试,极限测试,浪涌测试?

3. 性能测试准备阶段

人力,硬件,软件,环境折算(不是很准确)。

一个很重要的:干净(环境/版本等一致,和生产环境一模一样最好)

4. 测试执行阶段

  • 脚本生成和增强
  • 场景设计
  • 指标监控
  • 性能瓶颈定位和性能调优
  • php+nginx+mysql+centos

5. 测试报告和总结

四 脚本的生成(通过jmeter代理服务器录制脚本)

jmeter安装 mac版

jmeter安装windows版

1. 设置代理

  • windows设置客户端的代理

控制面板-->Internet选项-->连接-->局域网设置-->勾上代理输入,jmeter所在电脑的ip(通过cmd-ipconfig查询)和8888端口。(或其他端口也行,只要和 jmeter保持一致。8080/8889 等都可以)

端口占用情况:

netstat -a| findstr “端口号”
  • mac设置客户端代理(通过jmeter设置)

mac所在电脑的ip查询 ipconfig getifaddr en0

端口占用情况:

sudo lsof -i tcp:port  //查看占用情况
sudo kill -9 PID  //杀进程

系统设置--网络--高级--代理--网页代理

2. 设置 jmeter代理服务器

4.2.1 设置Requests Filtering

   接口url:

http://47.107.116.139/phpwind/

4.2.2 设置Test Plan Creation

3. 启动代理(导入证书)

a. 生成ApacheJMeterTemporaryRootCA.crt

点击“启动”出现下面的情况,ok会在jmeter/bin下生成ApacheJMeterTemporaryRootCA.crt

b. 导入jmeter安全证书

菜单选项--ssl管理器--导入上一步生成的证书

c.   浏览器导入证书

上述证书在 jmeter安装目录的bin中

4. 录制脚本

步骤一 访问首页

步骤二 登录-版块--新板块--发帖--回贴--退出

录制的脚本如下:

****然后就可以关闭代理了****

五 脚本的增强

1.查看结果树

添加--监听器--查看结果树

      运行所有的脚本


查看结果树中每个接口的响应是否正确,通过校验后,操作下面的步骤

2.正则表达式

访问接口增加正则表达式

token:一般用于鉴权

增加csrf_token

(用正则表达式),因为响应数据中的csrf_token在后续的登录中会用到

"csrf_token" value="031fda279957e9b2"

"csrf_token" value="(.*?)"

调用${csrf_token}

3. 函数助手对话框--urldecode

“3.登录接口”的响应数据中,有个网站不大理解,可以通过网址解析函数助手对话框--urldecode

http%3A%2F%2F47.107.116.139%2Fphpwind%2Findex.php%3Fm%3Du%26c%3Dlogin%26a%3Dwelcome%26_statu%3DTXRGbmJET0g0QnVIRkVidUphRURSQkxuMFVIZWk5MVV0SDFnWU4lMkJ3RjZ6SUdzalFsRyUyRlJvWTZlVWVQRjEwbXV3aTUzb25nJTJCb3hBJTNEfGh0dHA6Ly80Ny4xMDcuMTE2LjEzOS9waHB3aW5kL3w

由上图可以看出:

符号解析
%3A
%2F/
%2F%2F//
%3D=

_statu%3D(.*?)"

4. 函数助手对话框--增加随机内容

发帖时,为了不重复,增加随机内容

函数助手对话框--RandomString

5. unicode编码解析

登录 unicode解析网站

  

6.定时器

 注意:定时器尽量少用,会影响脚本的性能,影响脚本的响应时间

原因:  

 6.1 增加固定定时器

回贴接口右键--添加--定时器--固定定时器

6.2 统一随机定时器

添加--定时器--统一随机定时器

6.3 高斯随机定时器  

 添加--定时器-高斯随机定时器 

7. 给指定的帖子回贴

为了给自己发的贴回贴,则将发帖后的 tid用正则表达式提取出来

发帖后响应的内容:

提取tid

tid%(.*?)%

8. 删除不需要的端口

全部运行一遍:

检查都正常,删除有些不需要被禁用的端口,以及------------部分,重新编号,然后再次运行

9. HTTP请求默认值

线程组右键--添加--配置元件--HTTP请求默认值

然后,各接口的web服务器部分可以清除

10. 重定向

下面这种情况是重定向的情况,在接口中设置的是“跟随重定向”

如果不显示重定向,那么就设置“自动重定向”

运行结果:

跟随重定向和自定义重定向,不影响性能

11. HTTP请求头管理

每个接口都有请求头,太多了,可以先禁用掉,再运行,如果没有报错,那么就可以删掉,如果报错了,那么就需要保留。

12. 用户定义的变量

添加--配置原件--用户定义的变量

调用$(fid)

13. 响应时间设置

http请求默认值-高级--响应

设置后,响应时间超过 50ms的就会报错

14. 逻辑控制器

逻辑控制器:

  • 事务控制器
  • 仅一次控制器
  • 吞吐量控制器

14.1 事务控制器 

【事务】:一个接口可以是事务,多个接口也可以是事务,一个流程可以是事务,事务代表一个完整的功能。由测试人员决定。

  • 可以将“点击发帖”和“发帖”当做一个事务 

线程组右键--添加--逻辑控制器--事务控制器--将“点击发帖”和“发帖”拖拉到事务控制器中

运行后查看聚合报告:

事务控制器显示的数据是“点击发帖”和“发帖”何在一起的情况

如果“点击发帖”和“发帖”的结果数据不单独显示,可以在事务控制器中设置,将“Generate parent sample”☑️,然后再运行看结果

运行后,聚合报告结果

14.2 仅一次控制器

使用仅一次控制器的场景:

一般是登录情况下,比如我们正常一个用户,登录一次就不会一直再登录 

 例子:比如有 10个用户,每个用户循环 5次

把登录设置为:仅一次控制器

线程组右键--添加--逻辑控制器--仅一次控制器:将登录接口拖拉到“仅一次控制器”中

运行结果:

每个用户限制仅一次登录,所以 10 个用户,样本数为 10 

14.3 吞吐量控制器 

吞吐量控制器:混合压测中,控制流量的压测 

 使用吞吐量控制器稍微场景:

  •  正常发帖数只有回贴数的 20%,即一个发帖会有 5 个回贴,所以发帖可以设置吞吐量控制器
  • 电商网站,搜索商品的肯定比下单的多,所以下单可以设置吞吐量控制器

 线程组右键--添加--逻辑控制器--吞吐量控制器--将发帖拖进吞吐量控制器中

Based on:

Percent Executions (默认):按百分比分配流量;

Total Executions:代表总次数。

 Percent Executions : 20

运行结果:

Total Executions :10

运行结果: 

六 简单的性能测试

1. 非并发

设置线程属性

运行结果

上面的操作是没有并发的!!!!!

2. 并发(集合点)

集合点:jmeter中叫做“同步定时器”。用于实现并发。

比如:上课时间 9 点,但是,有的人 8:50 到,有的人 8:55 到,有的 9:05 到

设置:(模拟用户组的数量)人数 50 人;(超过时间)时间超时 2 分钟

执行:从 9 点开始,人数达到 50 人就上课;或者,时间到 9:02 就上课

2.1 同步定时器设置 

线程组--添加--定时器--Sychronizing Timer(同步定时器) 

2.2 线程组设置 

2.3 同时向服务器提交请求

模拟用户组的数量:30

超时时间以毫秒为单位: 20000

线程每秒增加2 个,即运行 15s后,才会达到 30 个模拟用户,所以达到 30 个才会向服务器提交请求, 在这之前的请求是 0。

如果数量比较少,没有达到 30 个用户,但是再等待20s后,也会集体向服务器提交请求。 

还没到 30 个,也没超过 20s时,运行情况如下:

2.4 运行效果

3. 线程组(简单压测)

3.1 线程组属性

线程数:虚拟用户数50

Ramp-UP:多久加载完虚拟用户数。25

循环次数:2

每个接口的总请求:50*2=100个。

 Same user on each iteration: 每次迭代用相同线程. (一般都是选中)

 3.2 调度器:一般用于稳定性压测

选中调度器的时候,一般循环次数选择“永远” ,“启动延迟”一般不设置

持续压测 5 分钟 


http://www.ppmy.cn/news/1427872.html

相关文章

《Java面试自救指南》(专题七)系统场景设计(含分布式、微服务)

文章目录 负载均衡如何实现,有哪几种方式谈谈你对微服务的理解SOA和微服务的区别CAP理论和BASE定理分布式系统需要考虑哪些问题分布式系统如何实现数据一致性如何实现分布式锁你的服务挂了怎么处理限流算法原理和应用分布式ID生成策略一致性算法(2/3pc, paxos, Raft, ZAB)淘…

(0)(0.2) 接近传感器

文章目录 前言 1 配置 2 测试 3 附加功能 前言 Copter/Rover 支持避开飞行器前方可能出现的障碍物。启用这些功能的第一步是安装一个正常工作的接近传感器。ArduPilot 最多支持 4 个传感器。 360 度激光雷达通常作为近距离传感器用于物体回避,但也可将多个测距…

过零可控硅光耦与随机可控硅光耦

无过零检测 推荐型号 MOC3021无过零检测 对应的数据手册 原理框图 工作电流 过零检测 推荐型号 MOC3061 原理框图 工作电流 注意事项 随机导通型是随时打开的。都是过零时关闭 也即是说:过零型打开的都是一个馒头波。 参考链接 过零可控硅光耦怎么用-电路知识干…

Linux中断——嵌入式Linux驱动开发

参考正点原子I.MX6U嵌入式Linux驱动开发指南 一、简介 先来简单了解一般中断的处理方法: ①、使能中断,初始化相应的寄存器。 ②、注册中断服务函数,也就是向 irqTable 数组的指定标号处写入中断服务函数 ③、中断发生以后进入 IRQ 中…

BaiChuan13B-GPTQ量化详解

知识要点: 1、按照网上搜索的一些代码,如使用auto_gptq原生库进行训练后量化,可能会正常量化,但是在线推理时会出现如找不到bin文件或者tf文件,即模型权重文件,所以和网上大部分代码不同的地方在于&#xf…

【Vue】Vue中使一个div铺满全屏

在Vue中实现div全屏铺满的方式与纯CSS实现类似&#xff0c;只是在Vue组件中应用CSS的方式略有不同。 最近在项目开发中&#xff0c;就遇到了这个问题&#xff0c;特此记录一下&#xff0c;方便大伙避坑。 有这么一段代码&#xff1a; <template><div class"fu…

常见面试算法题-数组二叉数

■ 题目描述 【数组二叉树】 二叉树也可以用数组来存储&#xff0c;给定一个数组&#xff0c;树的根节点的值存储在下标1&#xff0c;对于存储在下标N的节点&#xff0c;它的左子节点和右子节点分别存储在下标2*N和2*N1&#xff0c;并且我们用值-1代表一个节点为空。 给定一…

MapReduce分区机制(Hadoop)

在MapReduce中&#xff0c;分区&#xff08;Partitioning&#xff09;是将Map阶段输出的键值对根据某种规则分发到不同的Reduce任务上的过程。这个过程非常关键&#xff0c;因为它直接影响到了Reduce阶段的负载均衡和性能。 1. 哈希分区&#xff08;Hash Partitioning&#xf…