性能测试入门(一):性能测试中的各项指标告诉我们什么
性能测试
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
按照不同的目标,可以分为负载测试、压力测试、容量测试、稳定性测试。平时工作中如果不是专业的测试机构,开发人员或者运维人员做的基本上都属于压测。
压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。
性能指标
QPS
目前在业界告诉别人我系统的性能指标,比较容易说的就是QPS。QPS有时也说TPS,指的是每秒钟request/事务。通常有人告诉你他的接口并发3000通常指的就是QPS=3000,可以理解为他的系统1秒钟接受并处理完毕3000个请求。
QPS的算法就是:完成请求的数量/完成请求所花费的时间
如果10秒的时间内,系统接受到了3000个请求,返回了2000个,剩下1000报错。它的QPS=2000/10=200个
响应时间
响应时间,从单个请求来看就是服务响应一次请求的花费的时间。但是在性能测试中,单个请求的响应时间并没有什么参考价值,通常考虑的是完成所有请求的平均响应时间及中位数时间。
平均响应时间很好理解,就是完成请求花费的总时间/完成的请求总数。但是平均响应时间有一点不靠谱,因为系统的运行并不是平稳平滑的,如果某几个请求的时间超短或者超长就会导致平均数偏离很多。可以参考读新闻的平均工资、平均房价等,你就知道为什么不那么靠谱了。因此有时候我们会用中位数响应时间。
所谓中位数的意就是把将一组数据按大小顺序排列,处在最中间位置的一个数叫做这组数据的中位数 ,这意味着至少有50%的数据低于或高于这个中位数。当然,最为正确的统计做法是用百分比分布统计。也就是英文中的TP – Top Percentile ,TP50的意思在,50%的请求都小于某个值,TP90表示90%的请求小于某个时间。
并发数
并发数是一个特别容易混淆的概念,因为他在各种语境下表示的含义可能并不相同,从性能测试结果的角度来看
并发指的是在某一时间点,服务器正在处理的请求数
但是我们在实际工作中,经常听到别的说法
举例来说:
工程师经常说1秒并发2000,其实他指的是QPS=2000。
而一个网站管理员说我们并发1000人,其实指的最大在线人数1000人。在线人数1000人并不意味每个人都同一时间在跟服务器做交互,因此服务器的并发数并未到1000.
运维人员说我设置的tomcat的并发数500,他指的是这个tomcat最多可以调用500个线程同时接受请求。也就是同一时间服务器能达到的最大并发数数是500,但是受限于CPU、OS等其他原因,并发数在实际中达不到这个数值。
性能测试人员说我在LR中设置了并发数3000,指的是他在测试工具中设置3000个并发模拟用户,只是理论上在单位时间内最多会有3000个的模拟请求到服务器上。但是从客户端角度出发,客户端有可能因为CPU、OS、等待时间等等限制,并不能达到此压力。即使客户端达到了此压力,但是从服务器的角度出发,会有排队机制以及部分请求异常溢出,并不能说服务器的并发就到了3000。
因此性能测试中的并发数指的是一个测试出来的结果计算值,其计算公式是
QPS*平均响应时间
吞吐量
吞吐量,是指在一次性能测试过程中网络上传输的数据量的总和。对于交互式应用来说,吞吐量指标反映的是服务器承受的压力,在容量规划的测试中,吞吐量是一个重点关注的指标,因为它能够说明系统级别的负载能力,另外,在性能调优过程中,吞吐量指标也有重要的价值。如一个大型工厂,他们的生产效率与生产速度很快,一天生产10W吨的货物,结果工厂的运输能力不行,就两辆小型三轮车一天拉2吨的货物,比喻有些夸张,但我想说明的是这个运输能力是整个系统的瓶颈。
提示,用吞吐量来衡量一个系统的输出能力是极其不准确的,用个最简单的例子说明,一个水龙头开一天一夜,流出10吨水;10个水龙头开1秒钟,流出0.1吨水。当然是一个水龙头的吞吐量大。你能说1个水龙头的出水能力是10个水龙头的强?所以,我们要加单位时间,看谁1秒钟的出水量大。这就是吞吐率。
最大并发量
在理解了上述几个指标之后,性能测试的目的就变成了在特定的条件下(固定硬件设备,通常要排除网络瓶颈),寻找系统的最大并发量的过程。当并发数增大到一定的程度,系统反应时间还在可以接受的范围之内,服务并没有出现失败,或者失败率在可接受的范围内,如果超过此并发量,系统的指标变得不可接受,则认为这个值是系统的最大并发量。
最大并发量的应用
系统的最大并发量只是一个技术上的理论值,往往在技术团队内吹吹牛,而鲜有业务同学感兴趣。在你对自己1000个最大并发量感到沾沾自喜的时候,客户质问:“你说的1000并发到底能承载多少个用户呀?”。这时你往往懵逼了,这时你往往要问客户一句:”你问的是注册用户,还是同时在线用户?“。现实的情况是单个功能模块的QPS及最大并发数,往往很难估算出全站的业务含义上的用户量,现实生活比计算机机房模拟的环境要复杂的多,需要考虑网络环境、用户对各个功能点的使用率、用户的操作习惯行为等,即使你使用LR等复杂的测试模拟工具,对不同的功能模块进行了综合的测试,往往也只能得出一个估算的值,而且你往往遇到的最大的问题是你没有那么强的扮演成千上万模拟客户端的测试机,即使你有,你往往又没有那么宽的带宽,在压力上去之后,网络首先成为了瓶颈(这也就是为什么阿里之类的PTS等测试服务存在的原因)。
不过幸运的是,我们往往并不用得到特别精确的值来服务我们的业务,往往是个大概的值就可以了,所以我们还是可以根据一些经验估算,比如按照之前项目的PV,按照自己的想法对每个模块加权计算。甚至于可以拿日常的PV数除一下高峰持续时间得到日常的QPS,再以最大的QPS估算能够支持的最大PV数,再推出UV数。
有个帖子贴了常见WEB网站的QPS等级分类,可以参考下
http://www.cnblogs.com/yiwd/p/3711677.html
按照帖子的描述:90%的网站其实都是在前两级别浮动
如何严谨地做性能测试
以下内容来自著名博主:左耳朵耗子
原文参见:https://coolshell.cn/articles/17381.html
一般来说,性能测试要统一考虑这么几个因素:Thoughput吞吐量,Latency响应时间,资源利用(CPU/MEM/IO/Bandwidth…),成功率,系统稳定性。
下面的这些性能测试的方式基本上来源自我的老老东家汤森路透,一家做real-time的金融数据系统的公司。
一,你得定义一个系统的响应时间latency,建议是TP99,以及成功率。比如路透的定义:99.9%的响应时间必需在1ms之内,平均响应时间在1ms以内,100%的请求成功。
二,在这个响应时间的限制下,找到最高的吞吐量。测试用的数据,需要有大中小各种尺寸的数据,并可以混合。最好使用生产线上的测试数据。
三,在这个吞吐量做Soak Test,比如:使用第二步测试得到的吞吐量连续7天的不间断的压测系统。然后收集CPU,内存,硬盘/网络IO,等指标,查看系统是否稳定,比如,CPU是平稳的,内存使用也是平稳的。那么,这个值就是系统的性能
四,找到系统的极限值。比如:在成功率100%的情况下(不考虑响应时间的长短),系统能坚持10分钟的吞吐量。
五,做Burst Test。用第二步得到的吞吐量执行5分钟,然后在第四步得到的极限值执行1分钟,再回到第二步的吞吐量执行5钟,再到第四步的权限值执行1分钟,如此往复个一段时间,比如2天。收集系统数据:CPU、内存、硬盘/网络IO等,观察他们的曲线,以及相应的响应时间,确保系统是稳定的。
六、低吞吐量和网络小包的测试。有时候,在低吞吐量的时候,可能会导致latency上升,比如TCP_NODELAY的参数没有开启会导致latency上升(详见TCP的那些事),而网络小包会导致带宽用不满也会导致性能上不去,所以,性能测试还需要根据实际情况有选择的测试一下这两咱场景。
(注:在路透,路透会用第二步得到的吞吐量乘以66.7%来做为系统的软报警线,80%做为系统的硬报警线,而极限值仅仅用来扛突发的peak)
性能测试入门(一):性能测试中的各项指标告诉我们什么相关推荐
- 性能测试入门基础知识总结
性能测试基础 进行性能测试,我们需要关注性能测试的哪些方面,如果能回答出以下几个问题(5W),我们就基本入门性能测试了,然后就需要我们通过实践,运用这些性能知识理论去为实践服务,帮助我们更好的检查和定 ...
- 软件测试基础知识点--性能测试(从题目中总结)期末复习总结四
1.(性能测试)是度量软件质量的一种重要手段,它从软件的(响应速度).稳定性.兼容性.可移植性等方面检测软件是否满足需求. 2.所谓性能测试就是使用性能测试工具模拟正常.峰值及(异常负载)状态,对系统 ...
- 测试必备知识,性能测试入门学习
性能测试 1什么是性能? 2.1什么是性能测试? 2.2性能测试目的 2.3性能测试与功能测试区别 3.1性能测试策略 3.1.1基准测试 3.1.2负载测试 3.1.3稳定性测试 3.1.4其他测试 ...
- Jmeter性能测试 入门
Jmeter性能测试 入门 原文:Jmeter性能测试 入门 Jmeter是一款优秀的开源测试工具, 是每个资深测试工程师,必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率. 熟练使用Jme ...
- jmeter性能测试入门简介
Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件.相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工 ...
- Jmeter Web 性能测试入门 (六):Jmeter 解析 response 并传递 value
解析response中的内容,并把获取到的value传递到后续的request中,常用的方法就是在想要解析response的request上添加后置处理器 本章介绍两种常用的组件 BeanShell ...
- 同软件多个线程设置不同ip_软件测试如何自学?收下这份《2020千锋性能测试入门视频教程》...
萧亚轩在吐槽大会上说:"我只是天赋异禀,一个平平无奇的恋爱小天才."讲真,小千是百分百赞同,毕竟谁不是在平平无奇的生活里悄咪咪的给自己加持各种装备,偶尔一个大招适时放出,真的能够亮 ...
- Jmeter Web 性能测试入门 (四):一个小实例带你学会 Jmeter 脚本编写
测试场景: 模拟并发100个user,在TesterHome 站内搜索VV00CC 添加线程组 添加HTTP信息头管理器 添加HTTP Sampler 填写HTTP Sampler中的信息 添加监听器 ...
- 大型IT系统性能测试入门经典-系统性能测试基础
本文摘自陈绍英老师<大型IT系统性能测试入门经典>一书. 第一章 系统性能测试基础 下面是很多公司常见的和性能测试相关的工作安排: 预计有3000人使用系统,去测一下系统1000个用户的并 ...
- 使用Jmeter对mysql进行性能测试入门
使用Jmeter对mysql进行性能测试入门 第一步:测试环境准备: 1).mysql> select version(); +-----------+ | version() | +----- ...
最新文章
- 移动应用开发—— 如何搭建开发大型的应用架构?
- android java.lang.IllegalArgumentException: Comparison method violates its general contract! 问题
- 【原创】用户空间死循环导致memcached访问变慢问题排查
- javascript python 通信_Python通过websocket与js客户端通信示例分析
- 编写查询功能TextBox
- 数组元素倒置-Java
- 阿里云windows server 2012安装.net framework3.5失败解决方案
- 温度湿度传感器流程图_为什么温湿度传感器用一段时间就会漂移?
- 基于《MySQL5.7从入门到精通》学习记录(20220608_持续更新)
- 解决OSError: [Errno 22] Invalid argument:C:\\Windows\\Fonts\\simhei.ttf\u202a
- Delphi基础教程图文版之语句(选择语句)
- 阿里巴巴规范之POJO类中布尔类型的变量都不要加is前缀详解
- 华为 USG 双机热备
- NDN-lite 命名数据网络 -----第二章:对Interest和Data包的处理
- 声音频率和乐器知识记录
- 计算机课程打字教学,打字教程第1课 认识键盘
- R语言笔记⑧——数据挖掘算法
- python Matplotlib 控制x轴和y轴都为整数
- 付费订阅模式的3个好处
- Appium并发测试
热门文章
- 【kali-漏洞利用】(3.3)Metasploit后渗透(下):后渗透模块使用
- 中国人民大学计算机系孙辉,张静(中国人民大学信息学院计算机系讲师)_百度百科...
- java超市购物系统类图,UML实例(四):在线购物系统顺序图
- 信息学奥赛一本通 1296:开餐馆(evd)
- 如何将手机中Word文档转换成PDF
- dubbo服务端线程池耗尽Server side threadpool is exhausted
- 【数据分析报告】携程客户分析与流失预测
- Vue结合vant框架实现通讯录a-z排序
- 【CUDA 基础】4.3 内存访问模式
- 转】用Hadoop构建电影推荐系统