性能测试顾名思义指的是应用软件中各项指标的负载状况。
依据百度百科的释义,性能测试是通过自动化的测试工具模仿多种失常、峰值以及异样负载条件来对系统的各项性能指标进行测试。
性能测试在软件的质量保证中起着重要的作用,它包含的测试内容丰盛多样。中国软件评测核心将性能测试概括为三个方面:利用在客户端性能的测试、利用在网络上性能的测试和利用在服务器端性能的测试。通常状况下,三方面无效、正当的联合,能够达到对系统性能全面的剖析和瓶颈的预测。
简而言之,性能测试指标就是为了辨认并打消应用程序中的性能瓶颈。
明天,咱们就以博睿数据的个别产品为例,讲讲性能测试的那些事儿。
性能测试的基本常识
首先,要想全面的意识性能测试,就要对性能测试的基本常识、术语以及性能测试的根本方法论有根本的意识。
性能测试的概念前文曾经陈说,在这里咱们就不再赘述。
咱们来看下什么是软件性能。
软件测试是软件的一种非性能个性,它关注的不是软件是否可能实现特定的性能,而是在实现该性能时展现进去的及时性。
一般而言,性能测试次要蕴含以下 5 个术语:
² 响应工夫:对申请做出响应须要的工夫。
² 并发用户数:在同一时间段内拜访零碎的用户数量。
² 吞吐量:单位工夫内零碎解决的客户申请的数量。
² 性能计数器:形容服务器或操作系统性能的一些数据指标。
² 思考工夫:休眠工夫。
依照类型来划分,性能测试又分为六大类型:
l 负载测试:负载测试用于测试应用程序在失常和峰值状况下的性能。在负载测试中,咱们对应用程序性能好坏的断定根据次要源于该应用程序对用户申请的响应状况,以及它在不同负载变动下(可承受的水平内)统一响应的能力来检测的。
负载测试中的外围关注点:
在应用程序出现异常状况前,该应用程序所能包容的最大负载量是多少?
在零碎变慢或呈现解体之前,数据库所能解决的数据量有多少?
是否有任何与网络相干的问题须要解决?
l 验收性能测试:通过模仿生产运行的业务压力量和应用场景组合,测试零碎性能是否满足生产性能要求。
l 压力测试:压力测试旨在寻找毁坏零碎的办法。该测试同时还能为咱们找到零碎能够接受的最大负载范畴。
通常,压力测试采纳增量办法,通过逐渐减少负载来察看零碎各项性能指标的变动状况。
首先,咱们能够从应用程序曾经测试过的负载开始(例如以后用户数 100 个);而后缓缓地减少更多的负载来给零碎减少压力(例如从 100 个用户数逐渐减少到 10000)。
当咱们发现服务器没有响应申请的那个点开始,这个点就被认为是断点(在一些性能测试报告图表中,往往也视为性能拐点)。
在压力测试过程中,咱们须要关注的问题有:
零碎在解体前能接受的最大负载是多少?
在施行压力测试过程中,零碎是如何解体的?零碎是否在解体后自行复原?
被测系统 / 应用程序在解决异样负载时,有哪几种中断形式?
l 配置测试:通过对被测系统软硬件环境的调整,理解各种不同环境对系统性能的影响水平,从而找到零碎各项资源的最优分配原则。
l 可靠性 / 可复原测试:可靠性测试或复原测试用于验证应用程序在呈现故障或异样行为后,是否可能复原到失常状态,以及复原阶段须要通过多长时间。
例如在某线交易站点呈现故障,以致用户不能在一天的某个点(顶峰工夫)交易股票,但在一两个小时后用户可能进行在线股票交易,咱们就能够说该应用程序是牢靠的,即有能力从异样行为中自行复原。
l 并发测试:模仿用户的并发拜访,测试多用户并发拜访同一个利用、同一个模块或者数据记录时,是否存在死锁或者其余性能问题。
理解了这些根本信息后,一个很重要的问题是如何测试性能?
博睿数据为大家整顿了 7 个方法论:
ü SEI 负载测试计划过程:关注负载测试计划的办法,包含 6 个关注区域:指标、用户、用例、生成环境、测试环境、测试场景。
ü RBI 办法:是 Empirix 公司提出的一种用于疾速识别系统性能瓶颈的办法。
RBI 办法基于以下事实:
1、发现的 80% 零碎的性能瓶颈都由吞吐量制约;
2、并发用户数和吞吐量瓶颈之间存在肯定的关联;
3、采纳吞吐量测试能够更疾速的定位问题。
须要留神的是 RBI 的分析方法是自上而下的:即首先确定是由并发还是吞吐量引发的性能体现限度;而后从网络、数据库、应用服务器和代码 4 个环节确定零碎性能具体瓶颈。
ü 性能降落曲线剖析:形容的是性能随用户数减少而呈现降落趋势的曲线。
性能降落曲线能够分为以下几个局部:
单用户区域——对系统的单用户响应工夫;对建设性能的参考值有帮忙;
性能平坦区域——在不进行更多性能调优的状况下所能冀望达到的最佳性能;该区域可被用作基线。
压力区域——利用轻微降落的区域;典型的、最大的倡议用户负载,是压力区域的开始。
拐点——性能开始急剧下降的点。
ü LoarRunner 性能测试过程:打算测试、测试设计、创立 VU 脚本、创立测试场景、运行测试场景、剖析后果。
ü Segue 提供的性能测试过程:是 Segue 公司 Silk Performer 提供的性能测试过程;适宜性能调优和优化。
ü 麻利性能测试:是随着麻利技术倒退而来的一种行的性能测试方法。
麻利性能测试包含如下特点:
在每个迭代指标中蕴含明确的性能指标;
建设不同档次的性能测试——端到端、基于接口、面向具体函数;
齐全或靠近齐全自动化的性能测试——LoadRunner、JMeter、JUnit;
应用测试驱动的办法保障性能与优化性能。
ü PTGM 模型:利用于非麻利过程的性能测试模型;分测试后期筹备、测试工具引入、测试计划、测试设计与开发、测试执行与治理、测试剖析 6 个步骤。
此外,在应用领域方面,性能测试又可细分为 5 个畛域:
u 能力验证——在给定条件下,零碎是否具备预期的能力体现。
u 布局能力——应该如何使零碎具备咱们要求的性能能力;如:应该如何调整,使零碎可能满足增长的用户数的须要。
u 性能调优——次要利用于对系统性能进行调优。
u 发现缺点——次要时通过性能测试的伎俩发现零碎种存在的缺点。
u 性能基准比拟——通常利用在麻利开发过程,是在不设定明确指标的状况下,通过比拟失去每次迭代中的性能体现的变动,依据这些变动决定迭代是否达到了预期的指标。
性能测试怎么做?
那么,理解了性能测试的基本常识后,咱们接下来就要理解性能测试要怎么做?
一般而言,性能测试的流程分为需要剖析——测试筹备——执行测试——后果剖析与调优——报告与总结五个阶段。
接下来,咱们具体来看下。
(1) 需要剖析:
首先须要明确性能需求剖析是整个性能测试工作发展的根底,如果连性能的需要都没弄清楚,前面的性能测试执行其实是没有任何意义的,而且性能需求剖析做的好不好间接影响到性能测试的后果。
需要剖析须要明确倒底要不要做性能测试?性能测试的目标是什么?明确被测系统是什么?被测试零碎的相干技术信息如:架构、平台、协定等?明确被测系统的根本业务、要害业务,用户行为?明确性能测试点是什么?哪些须要测,为什么?哪些不须要测,又是为什么?
一般而言,需要剖析能够从零碎信息调研、业务信息调研、性能需求评估、性能测试点、性能指标等五方面动手。
以博睿数据的 SDK 产品为例。
咱们在剖析需要时首先会从其架构动手剖析,而后从业务层面进行剖析,例如新增、沉闷用户数,第一次应用和启动 app(config 申请)、启动当前每一分钟上报一次数据(upload 申请)、controller 接管申请,简略解析封装,发送到 kafka、ETL 从 kafka 上获取 controller 存储的数据,进行解析(解析成不同表数据,封装)、ETL 解析数据后,将封装好的数据,再次上传到 kafka、druid 从 kafka 获取数据入到库中、web 页面从 druid 中查问数据展现等等业务信息状况,最终从性能测试和性能指标动手,确定性能需求。
(2) 性能测试筹备:
性能测试筹备阶段又分为 6 个阶段:
环境筹备:
a)零碎运行环境:这个通常指的是咱们的测试环境,有些时候需要比拟多,做性能测试放心把环境搞跨了影响其它的功能测试,可能须要从新搭建一套专门用来做性能测试的环境。
b)执行机环境:这个就是用来生成负载的执行机,咱们每次做性能测试都须要提前准备好执行机环境,倡议执行机应用 liunx 零碎,不要应用 windows 零碎。
(3)场景设计:
依据性能需求剖析来设计合乎用户应用习惯的场景,场景设计的好不好间接影响到性能测试的成果。
(4)工具筹备:
a)负载工具:依据需要剖析和零碎特点抉择适合的负载工具,比方 LR、Jmeter 或 galting 等。
b)监控工具:筹备性能测试时的服务器资源、JVM、数据库监控工具,以便进行后续的性能测试剖析与调优、redis 状态监控、kafka 生产状况监控。
测试脚本:
如果性能测试工具不能满足被测系统的要求或只能满足局部要求时,须要咱们本人开发脚本配合工具进行性能测试。
(5)测试数据:
a)用例数据。
b)负载测试数据。
其余:如果须要其它关联系统或专业人士,如 DBA 配合的,也须要提前进行沟通。
(6)性能后果剖析:
性能后果剖析则次要从两个层面登程:即性能指标与负载的简略关系和后果剖析。
其中,性能指标与负载的简略关系又可分为响应工夫、吞吐量、资源利用率三个层面。
首先来看响应工夫。
响应工夫对应的负载的关系从函数的角度了解,能够简略了解为负载随着响应工夫的减少而减少的正向关系。
也就是说,响应工夫忽然减少,意味着零碎的一种或多种资源利用可能达到的极限。通常能够利用拐点来进行性能测试剖析与定位。
再来看下吞吐量。
吞吐量逐步达到饱和意味着零碎的一种或多种资源利用达到的极限。
最初说到资源利用率。
与负载对应关系能够了解为服务器某荐资源应用逐步达到饱和。
后果剖析需具体问题具体分析,个别是多项指标联合剖析,通过单个指标个别得不出论断。
后果能够从以下几个方面剖析:
v 执行发压机器性能是否失常。
v 被压测程序所在机器,资源是否失常。
v 依赖组件是否失常。
v 依赖组件所在机器资源是否失常。
v 宿主机机器资源是否失常。
最初须要留神的是,残缺的性能测试报告以简洁为主,不须要任何推导,开发团队须要更多对于剖析、比拟后果的信息,以及如何取得后果的细节。
总结
不难发现要胜利实现一个性能测试项目,咱们须要确保性能测试计划阶段各方面的准确性。
即打算、基于测试需要剖析的用例开发、场景设计、测试执行和后果剖析,这些关键点都必须依照正确的形式进行,加上正当的危险预估及缓解策略。