1-性能测试 - 扯淡篇
before
本篇主要介绍:
- 什么是性能测试
- 性能测试的分类
- 性能测试中的常用的指标参数
- 性能调优
- 常用工具
什么是性能测试
测试中的非功能测试其实范围比较广,性能、稳定性、安全性等都可以放进这个范畴。如果真的细究起来,那真的就多了。非功能测试,一般比功能测试门槛高些,多数还是需要掌握一两种测试工具,配合代码能力和超强的问题能力,才能得到开发人员的尊重。功能测试其实也一样,但以性能为基础的非功能测试更能考验测试人员的综合能力。
性能测试主要分类
负载测试、压力测试、并发测试、基准测试、稳定性测试、可恢复性测试。
按LoadRunner
中的定义:
- 负载测试(Load Testing):不断加压被测系统,直到超过预定指标或者部分资源已经达到饱和不能再加压。其目的是找到系统最大的负载能力,在特定的环境下测试,不断加压,知道系统中部分资源达到极限。
- 压力测试(Stress Testing):系统已经达到一定的饱和程度(如CPU磁盘等),此时系统处理业务的能力,系统是否会出现错误;疲劳测试是压力测试的一种表现形式,一般用于系统稳定性测试。
- 配置测试(Confguration Testing):调整系统的软硬件环境,了解各种不同环境对系统的影响,从而找到系统的最佳配置。用于系统调优和规划,了解不同因素对系统性能的影响情况。
- 并发测试(Concurrency Testing):模拟用户并发访问,测试多用户同时访问某一应用、模块或数据,观察系统是否存在死锁、系统处理速度是否明显下降等其他一些性能问题。
- 可靠性测试(Reliability Testing):系统在一定的业务压力下,让系统持续运行一段时间,观察系统是否达到要求的稳定性,必须给出明确的要求,例如系统能够持续无故障运行的时间。持续关注运行状态。
- 基准测试:在一定软硬件以及网络环境下,模拟一定数量的虚拟用户运行一种或多种业务,将测试结果作为基线数据。在系统调优或系统评测的过程中,通过运行相同业务场景并比较测试结果确定调优是否达到效果或者为系统的选择提供决策数据。
- 大数据量测试:大数据量测试包括独立的数据量测试和总行数据量测试。独立的数据量测试是指针对某些系统存储、传输、统计、查询等业务进行的大数据量测试。综合数据量测试指系统在具备一个数据量时,在负载压力测试下,考察业务是否能够正常运行的测试。 目标:测试数据量较大时系统的性能状况。
- 疲劳强度测试:疲劳强度测试试采用系统稳定运行情况下长时间运行系统的测试。
- 失效恢复测试:失效恢复测试是针对有冗余备份或负载均衡的系统来说,检查如果系统局部发生故障,系统对故障如果应付保证系统可以正常运行启动之类的,用户是否可以继续使用。
性能测试包含的主要内容?
工具+计划+监控+调优,性能测试工具更多的是模拟客户端产生压力的工具,其在性能分析和调优方面较弱,需要一些监控和调优工具,才能做好性能测试,性能测试计划也很重要。经典工具LoadRunner
的过程:计划测试,测试设计,创建虚拟用户脚本,创建测试场景,运行测试场景,分析结果。
性能测试本身有没有质量?
当然有,测试工具的稳定性,测试环境的稳定性都可以用做考核工具本身。需求定义时的性能指标需要同步提出,比如CPU利用率低于60%,响应时间不超过1秒,每秒请求数目达到单机1万QPS,跑7*24小时稳定性系统服务成功率达到99.999%等。
常见性能测试指标包括哪些?
响应时间(服务器响应时间,网络响应时间,客户端响应时间),吞吐量(请求和结果,数据库吞吐量,网络吞吐量,单位时间处理的请求事务数),资源使用(CPU占有率,内存使用率,磁盘读写,网络读写),点击数,并发用户数。
性能测试何时开始,何时结束?
一般在需求分析阶段就开始介入,到最后一个版本测试完成,得出性能报告,才算是一个需求的终结。研发阶段如何安排呢?一般情况下在编码进行并发测试、压力测试和配置测试,因为此阶段可以快速发现性能的问题;编码结束后的测试阶段,对系统的稳定性和调优,达到系统最优性能,进行负载测试、基准测试和配置测试。
关注性能的三类人
- 用户,关注软件系统对用户请求的响应时间。
- 运维和测试工程师,关注响应时间+资源消耗+硬件资源可扩展性。
- 开发工程师,关注所有问题,包括内存泄露、死锁、中间件以及应用服务器等。
性能测试消耗的资源包括时间、物力、财力;性能测试中发现的bug数目及各自的差别;系统交付用户,在生产环境运行后发现的性能bug数目和级别。
经典的GAME(A)测试模型
目标、分析、度量、执行、调整。
目标:确定本次测试的目标,选择测试设计策略。从需求获取阶段开始,在性能需求意向确定的情况下,输出明确的性能测试目标和性能测试策略。常用目标包括:度量最终用户响应时间(查看用户执行业务以及从服务器得到响应所花费的时间)、定义最优的硬件配置(内存、CPU、缓存、适配器等)、检查可靠性、查看硬件或软件升级、确定瓶颈(文件锁定、资源征用、网络过载)、度量系统容量(用户数)
分析:从需求分析阶段和性能测试启动阶段开始,以性能需求为基础,达成一致的性能指标列表,性能测试案例文档。性能测试需求标准,细化需求,找出测试关键点。测试对象是什么,系统配置如何,应用系统的使用模式是什么,得出的性能测试指标至少包括测试环境,业务规则,期望响应时间等。分析系统架构,对软硬件组件、系统配置以及典型的使用模型,结合测试指标,生成性能测试用例。
度量:从性能测试设计阶段,以细化的性能指标和性能测试案例为输入,输出和工具相关的场景变更、交易度量、监控器度量和虚拟用户度量等。场景的定义(测试环境、运行规则、监控数据),可表现为历史数据记录数,虚拟用户数,虚拟用户加载方式,监控指标等;事务的定义,处理器的处理能力;虚拟用户负责执行性能测试脚本,pass/fail的标准。
执行:软件测试执行阶段,以场景、交易、虚拟用户等设置信息为输入,测试报告为输出。准备测试环境、数据和脚本(测试环境包括硬件平台和软件平台,初始测试数据和用例测试数据《SQL脚本和excel文件,真实环境数据量》,性能测试工具生成脚本),运行场景和监控性能,场景是否通过,生成最终测试报告。
调整:第一轮性能测试结束没有通过,输入是测试报告和测试结果数据,输出性能测试解决方案。应用程序修改和中间件调优(数据库调优、内存升级、CPU数量、代码调优、Cache调优),各项资源使用趋向合理和保持一定的平衡。
本篇也只算是性能测试初探,在做性能测试时,确认需求,确认测试场景,确认验收条件显得尤其重要。加上测试工具,测试数据准备、测试场景执行、测试结果展示、测试问题分析、持续集成验证新包,这些都是可以细化考虑的。要成为一个性能测试高手,需要全方位锻炼自己,从各个角度持续学习和提升,才能在这个行业立于不败之地。
指标参数
响应时间(RT)
请求的响应时间(Response Time):从客户端发出请求到得到响应的整个时间,包括网络响应时间+应用程序响应时间。
用户接受准则:2~5~10
(或3~5~8
或者2~5~8
)原则
例如2~5~10
原则,即按照正常用户体验,如果用户能够在2秒内得到响应,会感觉速度很快,如果2-5
秒得到响应,用户感觉系统的响应速度还不多,在5-10
秒之内得到响应时,用户会感觉系统的响应速度慢,但是可以接受,超过10秒后还没有响应,用户就会感觉不能够接受。
不同行业不同业务可接受的响应时间是不同的,一般情况,对于在线实时交易:
- 互联网企业:500毫秒以下,例如淘宝业务10毫秒左右。
- 金融企业:1秒以下为佳,部分复杂业务3秒以下。
- 保险企业:3秒以下为佳。
- 制造业:5秒以下为佳。
PS:数据来自于阿里云规范
事务响应时间
如果多个请求被包含在一个事务中,就称整体所需时间为事务响应时间。
系统处理能力
系统处理能力是指系统在利用系统硬件平台和软件平台进行信息处理的能力。系统处理能力通过系统每秒钟能够处理的交易数量来评价,交易有两种理解:
- 一是业务人员角度的一笔业务过程。
- 二是系统角度的一次交易申请和响应过程。
前者称为业务交易过程,后者称为事务。两种交易指标都可以评价应用系统的处理能力。一般的建议与系统交易日志保持一致,以便于统计业务量或者交易量。系统处理能力指标是技术测试活动中重要指标。
HPS/TPS/QPS
一般情况下,用以下几个指标来度量系统处理能力:
- HPS(Hits Per Second) :每秒点击次数(请求),单位是
次/秒
。 - TPS(Transaction per Second)吞吐量:系统每秒处理事务(原子性、一致性、隔离性、永久性)数,单位是
笔/秒
;特点是不可分割的,要么完全成功,要么完全失败。另外,每秒获取的数据量的大小,称为吞吐率。 - QPS(Query per Second):系统每秒处理查询次数,单位是次/秒。
对于互联网业务中,如果某些业务有且仅有一个请求连接,那么TPS=QPS=HPS。
一般情况下用TPS来衡量整个业务流程,用QPS来衡量接口查询次数,用HPS来表示对服务器点击请求。
每秒钟处理完的事务次数,一般TPS是对整个系统来讲的。一个应用系统1s能完成多少事务处理,一个事务在分布式处理中,可能会对应多个请求,对于衡量单个接口服务的处理能力,用QPS比较多。
系统处理能力标准参考
无论TPS、QPS、HPS,此指标是衡量系统处理能力非常重要的指标,越大越好,根据经验,一般情况下:
- 金融行业:1000TPS~9000TPS,不包括互联网化的活动
- 保险行业:100TPS~1000TPS,不包括互联网化的活动
- 制造行业:10TPS~50TPS
- 互联网电子商务:10000TPS~100000TPS,例如天猫5万TPS
- 互联网中型网站:100TPS~500TPS
- 互联网小型网站: 50TPS~100TPS
资源利用率和性能
利用率是与组件可用的总时间相比,该组件实际被占用的时间的百分比。例如,如果 CPU 在 1 分钟内总共耗用 40 秒的时间处理事务,那么它在该时间间隔内的利用率为 67%。
定期评估并记录以下系统资源的利用率:
- CPU
- 内存
- 磁盘
当某资源被过度使用或者它的利用率与其他组件的利用率不成比例,那么就说该资源对于性能是临界的。例如:当一个磁盘的利用率达到 70%,而系统中其他所有磁盘的利用率只有 30% 的时候,可以认为该磁盘是临界的或被过度使用。尽管 70% 不表示磁盘使用严重过度,但是您可以通过重新安排数据以平衡整组磁盘上的 I/O 请求,从而提高性能。
如何评估资源利用率取决于操作系统为报告系统活动和资源利用率所提供的工具。发现资源似乎使用过度后,就可以使用数据库服务器提供的性能监视实用程序来收集数据,并对可能占用该组件上负载的数据库活动进行干涉。可以调整数据库服务器的配置或操作系统,以减少那些数据库活动或将它们分散到其他组件中。某些情况下,可能需要提供额外的硬件资源来解决性能瓶颈问题。
-
只要系统资源(例如,CPU 或特定磁盘)被事务或查询占用,资源就无法用来处理其他请求。暂挂的请求必须等待资源变得可用,然后才可完成。
-
对 CPU 利用率和响应时间的估计可以帮助您确定是否需要消除或重新调度某些活动。
-
内存不是作为单个组件(例如,CPU 或磁盘)管理的,而是作为称为页的小型组件的集合进行管理。
-
由于磁盘之间的传输速率各不相同,大多数操作系统都不直接报告磁盘利用率。相反,它们报告每秒的数据传输量(以操作系统内存页大小为单位)。
参考:资源利用率和性能
用户并发数量
常见的错误理解
- 使用系统的全部用户数量(注册用户)
- 使用系统的全部在线用户数量
正确理解
- 并发用户数指在同一时刻内,打开系统并进行业务操作的用户数量,并发用户数对于长连接(数据库连接时长连接,web请求时短连接)系统来说最大并发用户数即是系统的并发接入能力。
- 对于短连接系统而言最大并发用户数并不等于系统的并发接入能力,而是与系统架构、系统处理能力等各种情况相关。
另外,在性能测试工具中,一般称为虚拟用户数(Virutal User),注意并发用户数跟注册用户数、在线用户数有很大差别的,并发用户数一定会对服务器产生压力的,而在线用户数只是 ”挂” 在系统上,对服务器不产生压力,注册用户数一般指的是数据库中存在的用户数。
一般情况下,性能测试是将系统处理能力容量测出来,而不是测试并发用户数,除了服务器长连接可能影响并发用户数外,系统处理能力不完全受并发用户数影响,可以用最小的用户数将系统处理能力容量测试出来,也可以用更多的用户将系统处理能力容量测试出来。
并发用户多少为好?中小企业:5000用户
计算并发用户数的五种方法:https://blog.csdn.net/weixin_39577647/article/details/86233778
错误率
定义及解释
错误率指系统在负载情况下,失败交易的概率。错误率=(失败交易数/交易总数)*100%。稳定性较好的系统,其错误率应该由超时引起,即为超时率,例如用户手动的中断请求。
标准参考
不同系统对错误率的要求不同,但一般不超出千分之六,即成功率不低于99.4%
CPU
中央处理器是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令以及处理计算机软件中的数据。CPU Load: 系统正在干活的多少的度量,队列长度、系统平均负载。
CPU指标主要指的CPU利用率,包括用户态(user)、系统态(sys)、等待态(wait)、空闲态(idle)。CPU 利用率要低于业界警戒值范围之内,即小于或者等于75%;CPU sys%小于或者等于30%, CPU wait%小于或者等于5%。单核CPU也需遵循上述指标要求。
Memory
内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。
现代的操作系统为了最大利用内存,在内存中存放了缓存,因此内存利用率100%并不代表内存有瓶颈,衡量系统内有有瓶颈主要靠SWAP(与虚拟内存交换)交换空间利用率,一般情况下,SWAP交换空间利用率要低于70%,太多的交换将会引起系统性能低下。
Swap解释:
当物理内存接近崩溃时,将物理内存中最近一段时间最少频率使用到的页框移出物理内存,放进该存储空间,这段存储空间我们称之为交换空间(Swap)
磁盘吞吐量(Disk Throughput)
磁盘吞吐量是指在无磁盘故障的情况下单位时间内通过磁盘的数据量。
磁盘指标主要有每秒读写多少兆,磁盘繁忙率,磁盘队列数,平均服务时间,平均等待时间,空间利用率。其中磁盘繁忙率是直接反映磁盘是否有瓶颈的的重要依据,一般情况下,磁盘繁忙率要低于70%。
网络吞吐量(Network Throughput)
10Mbit带宽,每秒传输的字节数1.25MBytes
网络吞吐量是指在无网络故障的情况下单位时间内通过的网络的数据数量。单位为Byte/s。网络吞吐量指标用于衡量系统对于网络设备或链路传输能力的需求。当网络吞吐量指标接近网络设备或链路最大传输能力时,则需要考虑升级网络设备。
网络吞吐量指标主要有每秒有多少兆流量进出,一般情况下不能超过设备或链路最大传输能力的70%。
性能测试的基本流程
性能测试基本流程如下图所示
各阶段参与人员
前期的准备工作
性能测试需求分析阶段:
- 最终用户体验,例如2-5-10原则,即按照正常用户体验,如果用户能够在2秒内得到响应,会感觉速度很快,如果2-5秒得到响应,用户感觉系统的响应速度还不多,在5-10秒之内得到响应时,用户会感觉系统的响应速度慢,但是可以接受,超过10秒后还没有响应,用户就会感觉不能够接受。
- 技术需求, cpu,内存,网络吞吐量,磁盘吞吐量
- 标准要求:
- 竞品分析
- 响应时间
- 互联网企业:500毫秒以下,例如淘宝业务10毫秒左右。
- 金融企业:1秒以下为佳,部分复杂业务3秒以下。
- 保险企业:3秒以下为佳。
- 制造业:5秒以下为佳。
- TPS
- 金融行业:1000TPS~9000TPS,不包括互联网化的活动
- 保险行业:100TPS~1000TPS,不包括互联网化的活动
- 制造行业:10TPS~50TPS
- 互联网电子商务:10000TPS~100000TPS,例如天猫5万TPS
- 互联网中型网站:100TPS~500TPS
- 互联网小型网站: 50TPS~100TPS
性能测试计划阶段:
要准备测试环境,确认测试需求和方法,安排测试时间表和组织架构,准备测试风险预案和输入输出文档。
性能测试工具
常用的性能测试工具:
- HP LoadRunner,企业级性能测试工具,收费,功能强大
- Apache Jmeter:Apache JMeter是Apache组织的开源项目,是一个纯Java桌面应用,用于压力测试和性能测试,它最初被设计用于web应用测试,后来逐渐的扩展到其他领域。jmeter可以用于对静态和动态的资源(文件、Servlet、Perl脚本、Java对象,数据库和查询、FTP服务器或者是其它资源)的性能进行测试。jmeter可以用于分析不同压力条件下的总体性能情况。也可以使用jmeter提供的图形化界面,分析性能指标。
- 其他
jmeter与Loadrunnerd的区别
简单来说,它们都可以做性能测试,但jmeter相对轻量一些;jmeter是java语言开发,需要java环境,而loadrunner不需要(除非使用javavuser协议);jmeter偏向于功能和技术,loadrunner偏向于业务;除此之外,loadrunner有强大的图表系统,jmeter这块稍弱。
我们这里主要以jmeter来完成性能测试
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
欢迎斧正,that's all see also:
一个完整的性能测试流程 | 什么是性能测试? | 什么是性能测试?一文带你了解性能测试的那些知识 | TPS与用户数,事务相应时间关系