草庐IT

【性能测试】压力测试指标全解之TPS、响应时间

磨磨唧唧小蘑菇 2023-05-25 原文

hello,大家好!我是磨磨唧唧小蘑菇~  

接上期阐述了《TP50/90/99/999》的含义及计算方式,本期将阐述压力测试的其他指标,如TPS、响应时间等。

目录

一、TPS

二、响应时间

三、TPS与响应时间RT的关系

一、TPS

1、TPS的含义

Transactions Per Second的缩写,即每秒处理的事务数量(事务数/秒),它是软件测试结果的计量单位。

一个事务是指:客户端向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,在收到服务器响应结果后结束计时,以此来计算使用时间和完成的事务数,然后利用使用时间和事务数来计算TPS的值。即:TPS = 事务数/时间(单位:秒)

举个栗子:

一个单接口定义为一个事务,那么每个事务包含如下3个步骤:

  1. 客户端向服务器发送请求
  2. 服务器内部处理接收到的请求(包含应用服务器、数据库服务器等)
  3. 服务器处理完请求后返回结果给客户端

以上一个单接口的事务,三个步骤全部完成的话,每分钟能够完成6000次,那么TPS的计算就是:6000(事务数)/60(时间,单位为秒)= 100,即TPS = 100

2、TPS的作用:

  • 反映系统在同一时间内处理业务的最大能力,这个数据越高,说明处理能力越强(TPS会受到负载的影响,会随着负载增加而逐渐增加,当系统进入繁忙期后,TPS会有所下降)
  • 评价系统性能:以每秒钟完成的技术交易的数量来衡量,系统整体处理能力取决于处理能力最低模块的TPS值

二、响应时间

1、响应时间的含义

Response Time的缩写,简称为RT(响应时间)它是一个系统最重要的指标之一,它的数值大小直接反应了系统的快慢。那么何为响应时间呢?看下图说话:

从图中可以看出,在没有缓存的情况下,客户端发出请求后,需要经过网络传输、DNS解析等步骤才能到达服务器,服务器处理完之后,经由网络传输返回客户端,而客户端接收到以后,要进行解析渲染展示给用户。所以,可以总结出:

响应时间RT = 服务请求时间(网络传输时间) + 服务器处理时间(服务接口逻辑处理时间) + 网络响应返回时间(网络传输时间) + 页面前端解析渲染时间

 2、响应时间的指标确定

在进行性能测试时,“合理的响应时间”取决于用户的需求,而不能依据测试人员自己设想来决定。对于响应时间范围,有一个普遍的标准:早期是2/5/10秒原则,如今随着技术的发展,用户的要求也提高了,逐渐朝1/3/5秒原则演变。

1/3/5秒原则:

  • 在1s以内得到响应,用户会觉得系统响应很快,体验非常好
  • 1-3秒得到响应,用户可以接收,体验还不错
  • 3-5秒才响应,用户就感觉慢了,体验有点糟糕
  • 响应超过5秒,用户会认为是个失败的体验,选择离开或重新发起请求

实际上,对于不同的业务系统,用户可接受的响应时间是不一样的,需要针对自己的业务场景来做统计量化的工作。

总结一下,如何去确定响应时间:

  1. 确定系统功能和使用路径
  2. 收集性能目标(调查客户对响应时间的满意值)
  3. 量化性能目标(包括分解性能目标、量化各部分性能目标)
  4. 满足性能目标

综合以上,就可以去明确响应时间这个指标。

三、TPS与响应时间RT的关系

进行性能测试时,需要模拟用户向服务器发送请求,如果服务器处理请求的能力越快,那么就是响应时间越快,所以TPS就会越高。但随着我们启动越来越多的虚拟用户数,就会把服务器堵住,服务器因此处理速度会变慢,导致TPS降低。

综上,TPS和响应时间的关系是:响应时间越短,TPS越高;响应时间越长,TPS越低。

文中所有观点只代表个人,有不足之处,欢迎指正,不胜感激!!!

有关【性能测试】压力测试指标全解之TPS、响应时间的更多相关文章

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

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

  2. 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(在整个项目的根目录中),然后当

  3. 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?并散列所有无济于事。

  4. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  5. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  6. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  7. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  8. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

  9. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  10. ruby-on-rails - Cucumber 是否只是 rspec 的包装器以帮助将测试组织成功能? - 2

    只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您

随机推荐