程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)

Jmeter压力测试

一、创建测试计划

目标机器:127.0.0.1, 压测接口:

 http://127.0.0.1:32063/v1/auth/captcha?uuid=${uuid}

编写jmeter测试脚本,设置压力测试的标准为20个并发线程,在10秒内全部启动,持续压测时间1分钟,接着开始启动jemeter脚本进行测试。

1.1 前置

1.1.1 User Defined Variables

选中Test Plan,点击Add —>Config Element—> User Defined Variables

Name               value  
BASE_URL_0         127.0.0.1
threadNum          ${__P(loopNum,1)}
loopNum            ${__P(rampupTime,1)}
duration           ${__P(duration,60)}
1.1.2 Thread Group

这个就是我们通常使用的线程,一个线程组可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户,多个用户同时去执行相同的一批次任务。每个线程之间都是隔离的,互不影响的。一个线程的执行过程中,操作的变量,不会影响其他线程的变量值。

选中Test Plan,点击Add —>ThreadUsers)—> Thread Group

采样器失败后处理:

  • continue(继续):继续执行接下来的操作;
  • Start Next Thread Loop(启动下一进程循环):开始下一次循环;
  • stop Thread(停止线程):停止线程,退出该线程(不再执行此线程的操作);
  • stop Test(停止测试):等待当前执行的采样器结束后,结束整个测试;
  • Stop Test Now(立即停止测试):马上停止测试;

线程属性:

  • Number of Threads(users)(线程数):相当于模拟的用户数量;
  • Ramp-up Period(in seconds):达到指定线程需要的时间,例如线程数为20,时间设定为10s,那么就是10s加载20个线程,每秒启动的线程数=20/10=2
  • Loop Count(循环次数):如果填具体的数值,就是循环对应的次数;如果选择Forever,则一直执行下去,直到手动停止;
  • Delay Thread creation until needed:延迟线程创建,直到需要才创建。

调度器配置:

  • Duration(持续时间):设置测试计划的执行时间,单位是秒;
  • Startup delay(启动延迟):设置测试计划的启动延迟时间,以确保测试计划在指定的开始时间开始执行;

注意:

  • 注意:调度器一般在循环次数为Forever时配合使用,否则会按照具体的循环次数执行;
  • jmeter调度器只适用于jmeterGUI模式(即通过jmeter界面直接执行脚本),不适用于cli模式(即进入到jmeter目录下通过命令执行测试脚本);
  • CLI模式下,需要使用其他的方式来控制测试计划的执行时间和频率,例如使用脚本语言编写定时执行脚本来实现。

1.2 token处理

在某些情况下,我们压测的接口是需要进行身份认证的,这种情况下我们需要先登录。

1.2.1 Once Only Controller

即先选中Thread Group,点击Add —>Logic Controller —>Once Only Controller

(1) 选中Once Only Controller,点击Add —>Config Element—> Http Header Manager,并参考下文进行配置。

(2) 选中Once Only Controller,点击Add —>Sampler—> Http Request,并参考下文配置登录接口;

选中登录接口Http Request,点击Add —>Post Processors—>JSON Extractor;配置

  • Names of created variablesreponsetoken
  • JSON Path Expressions$.data.token

选中登录接口Http Request,点击Add —>Assertions—> Response Assertion;配置:

  • Field To Test:选择Text Response;
  • Pattern Matching Rules:配置成Contains
  • Patterns to Test:配置成响应成功的业务状态码,比如00000

如果登录用户名想从配置文件读取,可以选中登录接口Http Request,点击Add —>Config Element—> CSV Data SetConfig

1.2.2 Loop Controller

即先选中Thread Group,点击Add —>Logic Controller —>Loop Controller

接着将 Http Header ManagerHttp Request各种Listener等添加到Loop Controller下。

1.3 Config Element配置

1.3.1 Http Header Manager

选中Thread Group,点击Add —>Config Element—> Http Header Manager

设置请求头参数,比如:

Name               value  
Content-Type       application/json
Authorization      ${reponsetoken}

1.4 Sampler配置

1.4.1 Http Request

选中Thread Group,点击Add —>Sampler—> Http Request

进行如下设置:

  • Name:接口名称;

  • Web Server配置:

    • Protocol[http]http

    • Server Name or IP${BASE_URL_0}

    • Port Number32063

  • Http Request配置:配置请求接口,比如GET /v1/auth/captcha?uuid=${__UUID}

1.4.2 Response Assertion

选中Http Request,点击Add —>Assertions—> Response Assertion

配置:

- `Field To Test`:选择`Text Response;`
- `Pattern Matching Rules`:配置成`Contains`- `Patterns to Test`:配置成响应成功的业务状态码,比如`00000`

1.5 Listener配置

1.5.1 View Results Tree

选中Thread Group,点击Add —>Listener—> View Results Tree

View Result Tree可以查看Http Request结果。

1.5.2 Aggragate Report

选中Thread Group,点击Add —>Listener—> Aggragate Report

对于每个请求,Aggragate Report统计响应信息并提供请求数,平均值,最大,最小值,错误率,大约吞吐量(以请求数/秒为单位)和以kb/s为单位的吞吐量;

在这里我们主要解释每一个表项是什么意思。

  • Label:请求的名称,就是我们在进行测试的Http Request Sampler的名称;
  • Samples:总共发给服务器的请求数量,如果模拟20个用户,每个用户迭代60次,那么总的请求数为:20*60 =1200次;
  • Average:所有样本的平均响应时间;
  • Median:所有样本响应时间的中间值;
  • 90%Line:请求响应时间在97 ms的请求占比为90%
  • 95%Line:请求响应时间在115 ms的请求占比为95%
  • 99%Line:请求响应时间在180 ms的请求占比为99%
  • Min:最小的响应时间;
  • Max:最大的响应时间;需要注意留言一下是否存在Error,可能是jmeter连接重置错误导致这个值很大;
  • Error%:错误率=错误的请求的数量/请求的总数;
  • Throughput: 吞吐量即表示每秒完成的请求数;
  • KB/sec: 每秒从服务器端接收到的数据量。
1.5.3 Transactions per Second

选中Thread Group,点击Add —>Listener—> jp@gc - Transactions per Second

每秒事务数。性能测试中,最重要的2个指标之一。该插件的作用是在测试脚本执行过程中,监控查看服务器的TPS表现,比如整体趋势、实时平均值走向、稳定性等。

1.5.4 Response Times Over Time

选中Thread Group,点击Add —>Listener—> jp@gc - Response Times Over Time

事务响应时间。性能测试中,最重要的两个指标的另外一个。该插件的主要作用是在测试脚本执行过程中,监控查看响应时间的实时平均值、整体响应时间走向等。

1.5.5 Active Threads Over Time

选中Thread Group,点击Add —>Listener—> Active Threads Over Time

统计每秒活动的线程总数;

1.5.6 Response Times Percentiles

选中Thread Group,点击Add —>Listener—> Response Times Percentiles

统计响应时间百分比;

比如响应时间在200ms内的百分比为100%

1.6 Timer配置

1.6.1 Constant Throughput Timer

选中Thread Group,点击Add —>Timer—> Constant Throughput Timer

在测试环境进行压力测试时,我们可以把并发量设置的比较高,可以得出最大并发量。但是在生产环境下,有时候我们会根据客户的要求,可能只要求应用能满足用户使用就可以,且压测时要保证不系统正常、不崩溃。这时我们用到jmeter的限频。

Constant Throughput Timer(常数吞吐量定时器):常数吞吐量定时器可以让jmeter以指定数字的吞吐量(即指定TPS,只是这里要求指定每分钟的执行数,而不是每秒)执行。

吞吐量计算的范围可以为指定为当前线程、当前线程组、所有线程组,并且计算吞吐量的依据可以是最近一次线程的执行时延。

假设目标TPS20,则设置Target Throughput (in samples per minute)参数为20*60=1200

二、服务器压测

2.1 安装jmeter

在安装jmter之前默认你已经安装了jdk8。将jmeter上传到服务器/home/jmeter目录,将编写好的测试计划上传到的/home/jmeter/apache-jmeter-5.4.3/testplan目录。

配置Jmeter环境变量;

vi /etc/profile

export JMETER_HOME=/home/jmeter/apache-jmeter-5.4.3
exportCLASSPATH=${JMETER_HOME}/lib/ext/ApacheJMeter_core.jar:${JMETER_HOME}/lib/jorphan.jar:${CLASSPATH}
export PATH=${JMETER_HOME}/bin:$PATH

让配置文件立马生效:

source /etc/profile

查看是否安装成功,执行命令:

亲爱的读者和支持者们,自动博客加入了打赏功能,陆陆续续收到了各位老铁的打赏。在此,我想由衷地感谢每一位对我们博客的支持和打赏。你们的慷慨与支持,是我们前行的动力与源泉。

日期姓名金额
2023-09-06*源19
2023-09-11*朝科88
2023-09-21*号5
2023-09-16*真60
2023-10-26*通9.9
2023-11-04*慎0.66
2023-11-24*恩0.01
2023-12-30I*B1
2024-01-28*兴20
2024-02-01QYing20
2024-02-11*督6
2024-02-18一*x1
2024-02-20c*l18.88
2024-01-01*I5
2024-04-08*程150
2024-04-18*超20
2024-04-26.*V30
2024-05-08D*W5
2024-05-29*辉20
2024-05-30*雄10
2024-06-08*:10
2024-06-23小狮子666
2024-06-28*s6.66
2024-06-29*炼1
2024-06-30*!1
2024-07-08*方20
2024-07-18A*16.66
2024-07-31*北12
2024-08-13*基1
2024-08-23n*s2
2024-09-02*源50
2024-09-04*J2
2024-09-06*强8.8
2024-09-09*波1
2024-09-10*口1
2024-09-10*波1
2024-09-12*波10
2024-09-18*明1.68
2024-09-26B*h10
2024-09-3010
2024-10-02M*i1
2024-10-14*朋10
2024-10-22*海10
2024-10-23*南10
2024-10-26*节6.66
2024-10-27*o5
2024-10-28W*F6.66
2024-10-29R*n6.66
2024-11-02*球6
2024-11-021*鑫6.66
2024-11-25*沙5
2024-11-29C*n2.88
posted @   大奥特曼打小怪兽  阅读(128)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
如果有任何技术小问题,欢迎大家交流沟通,共同进步

公告 & 打赏

>>

欢迎打赏支持我 ^_^

最新公告

程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)。

了解更多

点击右上角即可分享
微信分享提示