最近在做性能测试的东西,网上内容纷杂,以下以个人之见做一些整理总结。
性能测试、压力测试、负载测试是经常提到的三个概念,这三个名词的含义常常混淆,我们来看一下他们的概念解释:
负载测试
系统正常工作时所能承受的最大负载,也可称为“容量测试”。模拟实际软件系统所承受的负载条件的系统负荷,通过不断加载(如逐渐增加模拟用户的数量)或其它加载方式来观察不同负载下系统的响应时间和数据吞吐量、系统占用的资源(如CPU、内存)等,以检验系统的行为和特性,以发现系统可能存在的性能瓶颈、内存泄漏、不能实时同步等问题。负载测试更多地体现了一种方法或一种技术。
压力测试
在什么极限情况下系统会崩溃,是否具有自我恢复性。在强负载(大数据量、大量并发用户等)下的测试,查看应用系统在峰值使用情况下操作行为,从而有效地发现系统的某项功能隐患、系统是否具有良好的容错能力和可恢复能力。压力测试分为高负载下的长时间(如24小时以上)的稳定性压力测试和极限负载情况下导致系统崩溃的破坏性压力测试。在高负载情况下来对系统的稳定性进行测试,更有效地发现系统稳定性的隐患和系统在负载峰值的条件下功能隐患等。
性能测试
为了获得系统在某种特定的条件下(特定的负载条件下)的性能指标数据。性能测试会在不同负载情况下进行。
乍一看其实三者之间的区分不大,提炼一下可以总结为:负载测试是性能测试、压力测试所使用的一种方式方法。不同的是,压力测试的目的是为了看在怎样的条件下系统会崩溃以发现各个组件的不足,而性能测试的目的则是为了看不同负载情况下的系统表现,我认为可以说压力测试是一种极限的性能测试方式。
不同的角色对于性能测试的理解是不一样的:
对于用户而言
对于开发者而言
对于管理员而言
而对于测试而言,性能是质量保证的一部分,需要从以上各个角度考虑。
从用户发送一个请求到用户接收到服务器返回的响应数据的时间就是响应时间。
每秒系统处理的请求数量。吞吐量大表明系统单位时间能处理的请求数越多。
TPS:Transactions Per Second,每秒事务数。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。
QPS:Queries Per Second,每秒查询率。它是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
区别及理解:
a. TPS即每秒处理事务数,包括:”用户请求服务器”、”服务器自己的内部处理”、”服务器返回给用户”,这三个过程,每秒能够完成N个这三个过程,TPS也就是3;
b. QPS基本类似于TPS,但是不同的是,对于一个页面的一次访问,形成一个TPS;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入QPS之中。
c. 一般的,评价系统性能均以每秒钟完成的技术交易的数量来衡量。系统整体处理能力取决于处理能力最低模块的TPS值。
d. QPS对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力。
错误请求数量与总请求数量之比。负载增加,可能会出现请求处理不过来的情况,错误数量就会不断增加。
定义:指的是对不同系统资源的使用程度,通常以占用最大值的百分比来衡量
通常需要关注的服务器资源如下:
a. CPU
定义:中央处理器是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令以及处理计算机软件中的数据。CPU Load: 系统正在干活的多少的度量,队列长度。系统平均负载。
标准:CPU指标主要指的CPU利用率,包括用户态(user)、系统态(sys)、等待态(wait)、空闲态(idle)。CPU 利用率要低于业界警戒值范围之内,即小于或者等于75%;CPU sys%小于或者等于30%, CPU wait%小于或者等于5%。单核CPU也需遵循上述指标要求。CPU Load要小于CPU 核数。
b. 内存
定义:与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。
标准:现代的操作系统为了最大利用内存,在内存中存放了缓存,因此内存利用率100%并不代表内存有瓶颈,衡量系统内有有瓶颈主要靠SWAP(与虚拟内存交换)交换空间利用率,一般情况下,SWAP交换空间利用率要低于70%,太多的交换将会引起系统性能低下。
c. 磁盘吞吐量
定义:磁盘吞吐量是指在无磁盘故障的情况下单位时间内通过磁盘的数据量。
标准:磁盘指标主要有每秒读写多少兆,磁盘繁忙率,磁盘队列数,平均服务时间,平均等待时间,空间利用率。其中磁盘繁忙率是直接反映磁盘是否有瓶颈的的重要依据,一般情况下,磁盘繁忙率要低于70%。
d. 网络吞吐量
定义:网络吞吐量是指在无网络故障的情况下单位时间内通过的网络的数据数量。单位为Byte/s。网络吞吐量指标用于衡量系统对于网络设备或链路传输能力的需求。当网络吞吐量指标接近网络设备或链路最大传输能力时,则需要考虑升级网络设备。
标准:网络吞吐量指标主要有每秒有多少兆流量进出,一般情况下不能超过设备或链路最大传输能力的70%。
之前用JMeter做压力测试的总结:JMeter压力测试
线程组:用来设置并发的数量和模式。是用来模拟用户并发的组件。JMeter 的每个任务都是用线程来处理的。
线程数:要并发的请求数量。
Ramp-Up Period: 在多次时间内把这些并发的请求发送完,单位秒
循环次数:这些并发一共要循环测试多少次
调度器:
启动时间:测试计划什么时候启动,启动延迟会覆盖它。当启动时间已过,手动运行脚本时当前时间也会覆盖它(但启动时间页面显示不会变)。
结束时间:测试计划什么时候结束,持续时间会覆盖它。
持续时间(秒):测试计划持续多长时间,会覆盖结束时间。
启动延迟(秒):测试计划延迟多长时间启动,会覆盖启动时间。
配置元件:
CSV Data Set Config: 用来做参数化
HTTP Cookie 管理器: 用来自动保存cookie
HTTP信息头管理器:把http header中所有请求都用到且相同的属性设置在这里。
HTTP请求默认值:把http request中所有请求都用到且相同的属性设置在这里。
用户定义的变量:定义变量,并给出默认值。
Sampler:
HTTP请求:添加要测试发送给服务器的http请求。
前置处理器:
BeanShell PreProcessor:用java编写在http请求执行前一些参数的设置和修改
后置处理器:
BeanShell PostProcessor:用java编写在http请求执行后一些参数的设置和修改
断言:
设置检查当前Request返回的Response需要满足的标准,若不满足,则认为Request失败。
监听器:用来查看测试的结果
用表格察看结果:显示每个http request执行时间和状态
察看结果树:显示每个http request执行的response和request信息
聚合报告:显示整体测试的执行情况,平均值等。
Apache的ab命令模拟多线程并发请求,测试服务器负载压力。 ab命令对发出负载的计算机要求很低,既不会占用很多CPU,也不会占用太多的内存,但却会给目标服务器造成巨大的负载。但注意不要一次上太多的负载,造成目标服务器直接因内存耗光死机,而不得不硬重启。
使用:https://www.jianshu.com/p/e3793ae91a62
https://blog.csdn.net/mo_feng_/article/details/67639662
https://testerhome.com/topics/7607
https://testerhome.com/topics/7631
https://blog.csdn.net/lijie1010/article/details/79374361
https://www.cnblogs.com/puresoul/p/5503134.html
描述 | JMeter | LoadRunner |
架构原理 | 通过中间代理,监控和收集并发客户端的指令,把他们生成脚本,再发送的应用服务器,再监控应用服务器反馈的过程 | 同JMeter |
安装 | 简单,解压即可,比较灵活 | LoadRunner安装包比较大,安装比较麻烦,工具本身相对比较笨重 |
支持的协议 | 支持多种协议:HTTP、HTTPS、SOAP、FTP、Database via JDBC、JMS等,但相对LR还是不够全面,由于此原因相对来说jemter比较灵活,轻便 | 支持的协议非常多,比较全面,但正因此显得工具本身比较笨重,不够灵活 |
脚本录制 | 提供了一个利用本地ProxyServer(代理服务器)来录制生成测试脚本的功能,也支持badboy录制再生成JMeter脚本 | 自带录制功能强大,可直接录制回放 |
并发模型 | 通过增加线程组的数目,或者是设置循环次数来增加并发用户 | 支持多种并发模型,通过在场景中选择要设置什么样的场景,然后选择虚拟用户数 |
分布式测试 | 支持,可设置多台代理,通过远程控制实现多台机器并发压力 | 同JMeter |
资源监控 | 通过JMeterPlugins插件和ServerAgent实现 | 自带资源监控功能 |
报告分析 | 通过与Ant集成,生成HTML报告 | 自身支持生成HTML、Word报告 |
虚拟IP | 不支持 | 支持 |
网速模拟 | 不支持 | 支持 |
扩展性 | 开源,可根据需求修改源码 | 通过扩展函数库实现 |
学习成本 | 主要是自学官网上的资料 | 网上资料和相关培训很多,购买正版的话,还有技术支持 |
在系统功能测试完成、趋于稳定的情况下再进行性能测试。
上述常用工具。
性能测试基础理论:
https://www.cnblogs.com/puresoul/p/5456855.html
基础概念:
https://blog.csdn.net/wind19/article/details/8600083
Apache ab:
https://www.cnblogs.com/lishuyi/p/5808661.html
全链路压测:
全链路压测平台(Quake)在美团中的实践
阿里全链路压测-大促备战核武器
https://www.cnblogs.com/puresoul/p/5463477.html
https://www.cnblogs.com/puresoul/p/5503134.html