中国软件评测中心将性能测试归纳为三个方面:应用在客户端性能的测试、应用在网络上性能的测试、应用在服务器端性能的测试。归纳起来也就是:客户端、网络端、服务端html
客户端就是压力机;当进行压力时须要监控客户端、网络端、服务端的数据。数据库
l 负载测试浏览器
l 压力测试缓存
l 疲劳强度测试服务器
负载测试:主要指的是模拟系统在正常负载压力场景下,考察系统的性能指标。这里说的正常负载,主要是指预计系统最大应该支持多大用户的并发量。经过负载测试,目的是验证系统是否能知足预期的业务压力场景。网络
压力测试:在不断增长并发压力下系统的性能会变得不可接受,出现性能崩溃的状况,计算出这时的并发值。在加压策略上,压力测试会对被测系统逐步加压,在加压的过程当中考察系统性能指标的走势状况,最终找出系统在出现性能拐点时的并发用户数,也就是系统支持的最大并发用户数。多线程
疲劳强度测试:模拟出长时间系统能承受的最大业务负载量。差别在于前二者,疲劳强度测试更关注系统在长时间运行下性能指标的变化状况。例如,系统在运行一段时间后,是否会出现事务处理失败、响应时间增加、业务吞吐量下降、CPU/内存资源增加等问题。并发
从维度上划分,性能指标主要分为两大类,分别是业务性能指标和系统资源性能指标分布式
如下的性能指标是经常使用的指标,随着对性能要求的提高,须要观察其余更详细的数据,好比:其压力机和服务器的硬件也会影响性能工具
性能的最总目的:在保证必定的成功率、响应时间的前提下获得业务须要的最大并发数
并发用户数:压力机模拟同时访问服务器的用户数。查看该指标目的:获得服务器最大并发用户数。
事务成功率:在性能测试周期内,成功的请求数占所有请求数的百分比。查看该目标目的:服务器正确处理事务能力。
事务吞吐率TPS:每秒服务器处理的事务数;该指标须要根据当前并发用户数、总响应时间去计算该值。查看该指标目的:服务器处理事务的能力。
事务平均响应时间:平均一条请求(事务)所用的时间。查看该目标目的:宏观查看服务器是否达到理想的并发数
提示:
平均响应时间与TPS是没有直接关系,具备宏观的反比关系,随着并发数提升并超过服务器处理能力,平均响应时间就会升高,TPS则会降低。
这里有一个例子帮助理解二者的区别:
https://www.cnblogs.com/baihuitestsoftware/articles/6405078.html
性能测试的主要手段:模拟真实业务的压力对被测系统进行加压,并同时监控被测系统资源性能指标,研究被测系统在不用压力状况下的表现,找出其潜在的性能瓶颈。
如何对系统进行加压,又如何对系统的指标进行监控呢?这里,就须要引入性能测试工具了。
如今市面上有不少工具,无论使用哪一款工具,基本都会包含以下几个核心的功能:
原理结构以下图所示:
压力发生器:来产生无限压力地方,至关于无数个测试人员
结果采集器:结果记录人员
负载控制器:对应的是指挥人员
资源监控器:对应的是若干资源监控人员,监控客户端、网络端、服务端
结果分析器:对应的是结果统计人员
压力发生器是性能测试工具最核心的部分,它主要有两个功能,一是真实模拟用户操做,二是模拟有效并发。
大多数性能测试工做人员可能都会忽略的是,当前市面上性能测试工具的压力发生器基本都是存在缺陷的。
模拟真实用户操做:浏览器在加载网页的时候,是同时并发多个TCP链接去请求页面对应的HTTP资源,包括HTML、JS、图片、CSS,当前流行的浏览器广泛会并发6-10个链接。然而,性能测试工具在模拟单个用户操做的时候,基本上都是单链接串行加载页面资源。产生的差别在于,假如页面有100个资源,每一个HTTP请求的响应时间约为100毫秒,那么浏览器采用6个链接并行加载网页时大概会须要1.7秒(100/6*100毫秒),而测试工具采用单链接串行加载就须要10秒(100*100毫秒),二者结果相差十分巨大。这也解释了为何有时候咱们经过性能测试工具测试获得的响应时间挺长,可是手动用浏览器加载网页时感受挺快的缘由。
有效并发:有效并发就是咱们在测试工具中设置了1000虚拟用户数,实际在服务器端就能产生1000并发压力。然而现实状况是,不少时候因为测试设备自身出现了性能瓶颈,压力发生器产生的并发压力远小于设定值,而且一般测试工具也不会将该问题暴露给测试人员;若是测试人员忽略了这个问题,觉得测试获得的结果就是在设定并发压力下的结果,那么最终分析得出的结论也就跟实际状况截然不同了。不过,咱们能够经过保障测试环境不存在瓶颈,使得实际生成的并发压力尽量地与设定值一致;另外一方面,咱们也能够经过在测试过程当中监控Web层(例如Nginx)的链接数和请求数,查看实际达到服务器端的并发数是否跟咱们的设定值一致,以此来反推压力发生器的压力是否有效。
了解这些缺陷的意义在于,咱们能够更清楚测试工具的原理,从而更准确地理解测试结果的真实含义。
目前市场上主要流行的是Loadrunner和jmeter,还有一款知名度很低的Locust等等,就这三种分析下优劣:
\ |
LoadRunner |
Jmeter |
Locust |
受权方式 |
商业收费 |
开源免费 |
开源免费 |
开发语言 |
C/Java |
Java |
Python |
测试脚本形式 |
C/Java |
GUI |
Python |
并发机制 |
进程/线程 |
线程 |
协程 |
单机并发能力 |
低 |
低 |
高 |
分布式压力 |
支持 |
支持 |
支持 |
资源监控 |
支持 |
不支持 |
不支持 |
报告与分析 |
完善 |
简单图表 |
简单图表 |
支持二次开发 |
不支持 |
支持 |
支持 |
经过对比,Locust也不怎么样嘛,资源监控也不支持,报告分析能力也这么弱,那为啥还要选择它?
受权方式这个就不说了。虽然LoadRunner是商业软件,价格极其昂贵,可是国内盗版横行,别说我的,就算是大型互联网公司,用正版的也没几个。
从功能特性的角度讲,LoadRunner是最全面的,用户群体也是最多的,相应的学习资料也最为丰富,不太熟悉性能测试能够先从LoadRunner熟悉性能测试工具各个模块的概念和功能,再过渡到其余工具。LoadRunner只能在Windows平台使用,而且并发效率比较低,单台压力机难以产生较高的并发能力。
Jmeter的并发是基于线程,并发效率存在一样的问题;另外,Jmeter在脚本编写和描述是基于GUI操做
Locust:
模拟用户:采用Python脚本描述,而且HTTP请求是基于Requests库,该库功能强大使用简单;除了HTPP(S)协议,Locust也能够测试其余任意协议的系统,只须要采用Python调用对应的库进行请求买书便可。
并发机制:采用协程(gevent)的机制。采用多线程模拟用户时,线程数会随着并发数的增长而增长,而线程之间的切换是须要占用资源的,IO的阻塞和线程的sleep会不可避免的致使并发效率降低。
协程和线程区别:协程避免了系统资源调度,由此大幅度提升了性能,单台普通配置的测试机能够生产数千并发压力,这是LoadRunner和Jmeter都没法实现的。
Locust功能单薄,特别是在性能指标监控和测试报告图表方面比较缺失,可是Locust的代码结构清晰,核心代码量也只有几百行,可扩展性不错,深刻挖掘性能测试工具原理很是合适
根据上面,选择Locust工具来进行性能测试,性能测试重要的是监控性能数据,增长到持续集成会比较复杂,暂时先不考虑集成到Jenkins里
部署时间:1天
参考资料:
四年性能经验文章:http://debugtalk.com/post/locustplus-talk-about-performance-test/
百度百科【性能测试】:https://baike.baidu.com/item/性能测试