草庐IT

2、企业级Jmeter压力测试方法及报告模板

小白de成长之路 2023-04-08 原文

关于XXXX生产环境压测报告

文章目录

修订历史
所属部门版本号编制修改原因人员修改日期
XXXXX001创建XXXXXXXXX年XX月XX日
XXXXX002修订XXXXXXXXX年XX月XX日
XXXXX003修订XXXXXXXXX年XX月XX日
XXXXX004修订XXXXXXXXX年XX月XX日
XXXXX005评审XXXXXXXXX年XX月XX日

目录

一、测试内容

二、测试方法

1.测试方式描述。

2、 简述测试步骤。

2.1设置请求默认地址:图示设置默认路径为 XXXXX

2.2设置请求XXXX路径及相关参数

2.3设置响应事件结果图

2.4设置表格展示结果

3、测试指标提取:

三、测试目标

四、测试环境

1.测试客户端配置

2.网络环境

3.测试时间

五、系统部署

六、测试说明

七、测试统计及分析

1)50个线程组并发

2)100个线程组并发

3)200个线程组并发

4)500个线程组并发

5)1000个线程组并发

6)2000个线程组并发

7)3000个线程组并发

8)4000个线程组并发

八、结果

九、结论及建议

一、测试内容

本次测试是针对XXXXX系统服务进行的压力测试,本次压测主要提取XXXXX进行压力测试。

二、测试方法

1.测试方式描述。

本次采用apache的开源测试工具Jmeter,采用Jmeter代理服务器录制脚本生成http请求脚本,并通过http协议post方式发送访问请求,收集服务器响应速度等情况。

2、简述测试步骤。

安装启动JMeter,分别对以上页面进行压力测试分别测试50、100、500、1000、2000、3000、4000个线程,即模拟这些数目的用户并发; Ramp-up period(inseconds)的值设为1(即1s启动50、100、500、1000、2000、3000、4000并发访问),并发持续运行为5分钟。

2.1设置请求默认地址:图示设置默认路径为XXXXX

2.2设置请求XXXX路径及相关参数

图示请求无消息体内容(下面是展示消息体Json格式):

{"orderNo": "AAAA",

​    "areaId": 123456,

​    "updatetDate": "2022-10-14",

​    "createDate": "null",

​    "mobile": "12345678911",

​    "userId": 2,

​    "address":{"city":330300,

​        "street":"aaaa"}

  }

2.3设置响应事件结果图

2.4设置表格展示结果

3、测试指标提取:

测试项并发数持续运行时间响应时间最小响应时间最大平均响应时间成功率总请求量吞吐量
系统入口505min<1s<2min<20s100%>80000>200.0/sec
1005min<1s<2min<20s100%>80000>200.0/sec
2005min<1s<2min<20s100%>80000>200.0/sec
5005min<1s<2min<20s100%>80000>200.0/sec
10005min<1s<2min<20s100%>80000>200.0/sec
20005min<1s<2min<20s100%>80000>200.0/sec
30005min<1s<2min<20s100%>80000>200.0/sec
40005min<1s<2min<20s100%>80000>200.0/sec

三、测试目标

XXXX服务服务器器极限值

四、测试环境

1.测试客户端配置

主机用途机型/OS台数CPU/台内存容量/台
模拟用户请求Windows2816G

2.网络环境

本次测试是在公网中进行的测试,更能模拟用户操作环境,可以会对压测造成影响。

3.测试时间

压测环境测试人测试时间
XXXX生产环境XXXX2022年10月14日

五、系统部署

系统已经经过开发人员部署在虚机上,无需另外再次进行系统部署。

六、测试说明

名词定义(时间的单位均为ms):

样本----本次场景中一共完成了多少个线程

平均值----平均响应时间

中位数----50%请求的响应时间

90%百分位----90%请求响应时间

95%百分位----95%请求响应时间

99%百分位----99%请求的响应时间

最小值----最小的响应时间

最大值----最大的响应时间

异常%----错误率=错误的请求的数量/请求的总数

吞吐量----吞吐量即表示每秒完成的请求数

接收 KB/sec----每秒从服务器端接收到的数据量

发送 KB/sec----每秒从客户端发送的请求的数量

七、测试统计及分析

压测场景:

1.输入URL:XXXXX

1)50个线程组并发

聚合报告

并发50个用户,持续运行5分钟,完成71036次访问请求,最小响应速度为37ms,最大为2815ms,平均响应速度为210ms,与预期的快,访问成功率100%,符合预期的需求。

从下图可以看出从开始压测,并持续运行5分钟到结束,总共处理请求71036个,几乎所有请求的响应时间都在1秒左右,符合预期。

2)100个线程组并发

聚合报告

并发100个用户,持续运行5分钟,完成89001次访问请求,最小响应速度为36ms,最大为2050ms,平均响应速度为336ms,吞吐量在293.5/sec,比预期的快,访问成功率100%,符合预期的需求。

从下图可以看出从开始压测,并持续运行5分钟到结束,总共处理请求89001个,几乎所有请求的响应时间都在1秒左右,符合预期。

3)200个线程组并发

聚合报告

并发200个用户,持续运行5分钟,完成95803次访问请求,最小响应速度为55ms,平均响应速度在1秒内,与预期的快,访问成功率100%,符合预期的需求。

从下图可以看出从开始压测,并持续运行5分钟到结束,总共处理请求95803个,几乎所有请求的响应时间都在2秒内,符合预期。

4)500个线程组并发

聚合报告

并发500个用户,持续运行5分钟,完成102473次访问请求,最小响应速度为88ms,最大为5188ms,平均响应速度为1462ms,并且吞吐量达到为340.7/sec,比预期的快,访问成功率100%,符合预期的需求。

从下图可以看出从开始压测,并持续运行5分钟到结束,总共处理请求102473个,几乎所有请求的响应时间都在3秒左右,符合预期。

5)1000个线程组并发

聚合报告

并发1000个用户,持续运行5分钟,完成17871次访问请求,最小响应速度为173ms,最大在15秒以内,平均响应速度为3290ms,与预期的快,访问成功率100%,符合预期的需求。

从下图可以看出从开始压测,并持续运行5分钟到结束,总共处理请求91420个,百分之90的请求响应时间在5秒以内,符合预期。

6)2000个线程组并发

聚合报告

并发2000个用户,持续运行5分钟,完成92777次访问请求,最小响应速度为365ms,最大在30秒以内,平均响应速度为6.5秒,与预期的快,访问成功率100%,符合预期的需求。

从下图可以看出从开始压测,并持续运行5分钟到结束,总共处理请求92777个,百分之95的请求在10秒左右响应,符合预期。

7)3000个线程组并发

聚合报告

并发3000个用户,持续运行5分钟,完成91124次访问请求,最小响应速度为809ms,平均响应速度在10秒内,吞吐量为298.0/sec与预期的快,访问成功率100%,符合预期的需求。

从下图可以看出从开始压测,并持续运行5分钟到结束,总共处理请求91124个,百分之90的请求在15秒左右响应,符合预期。

8)4000个线程组并发

聚合报告

并发4000个用户,持续运行5分钟,完成80037次访问请求,最小响应速度为311ms,平均响应速度在15秒左右,百分之90的请求在30秒以内响应,比预期的快,访问成功率97.67%,符合预期的需求。

从下图可以看出从开始压测,并持续运行5分钟到结束,总共处理请求80037个,在开始一分钟时达到第一个峰值,表示请求挤压一定的时间,系统处理请求变得缓慢,此时jmeter发送的请求也变少,系统将积压的请求处理完成,到开始两分钟节点时,第二个峰值到来,响应时间由于系统一直处理高压事态,当jmeter发送请求略微变快,系统开始报错,但是百分之90的请求在30秒以内响应,符合预期。

八、结果

压测结果:

测试项并发数持续运行时间响应时间最小响应时间最大平均响应时间成功率总请求量吞吐量是否符合预期
预期结果50-40005min<1s<2min<20s100%>80000>200.0/sec*
系统XXXX实际结果505min37ms2815ms210ms100%71036236.7/sec符合预期
系统XXXX实际结果1005min36ms2050ms336ms100%89001296.5/sec符合预期
系统XXXX实际结果2005min55ms9632ms625ms100%95803319.0/sec符合预期
系统XXXX实际结果5005min88ms5188ms1462ms100%102473340.7/sec符合预期
系统XXXX实际结果10005min173ms14390ms3290ms100%91420302.7/sec符合预期
系统XXXX实际结果20005min365ms27540ms6474ms100%92777306.6/sec符合预期
系统XXXX实际结果30005min809ms113810ms9975ms100%91124298.0/sec符合预期
系统XXXX实际结果40005min311ms347362ms15489ms97.67%80037165.9/sec不符合预期

九、结论及建议

1.结论:

并发50-3000之间,持续时间5min,响应最小时间在一秒以内,平均时间在20秒以内,成功率100%,总请求在80000以上,吞吐量大于200/sec。压测发现硬件CPU及内存存在不足,并发数在2000时,请求的平均响应时间为30秒以内,平均每秒处理306个请求,但是当并发增加到了3000个时,服务器的平均响应速度变得很慢,但是每秒依旧处理将近300个请求,但是当并发到达4000个时,系统大量请求挤压,响应时间最长达5分钟,并且出现异常,系统每秒处理的请求数量也急剧下降到165个请求,如果此时大量请求持续进来,系统将宕机。

PS:该服务器还有一些其他服务运行这占有一定的CPU及内存对数据结果是存在一定的影响的。所以此数据只能作为参考值来看。

2.建议:

依照目前生产服务情况达到每秒3000并发,每秒吞吐量298.0将是极限,建议增加CPU及内存或作负载均衡,方可维护服务的稳定。

有关2、企业级Jmeter压力测试方法及报告模板的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  6. Ruby 方法() 方法 - 2

    我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby​​-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco

  7. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  8. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  9. ruby - Highline 询问方法不会使用同一行 - 2

    设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案

  10. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

随机推荐