一、 性能效率测试概述
1.1 性能效率测试定义
软件性能效率测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对软件系统的各项性能指标进行测试,获取该系统的响应时间、运行效率、资源利用情况等各项性能指标,来评价系统是否满足用户性能需求的过程。
性能效率测试一般包括以下四个维度:
(1)性能测试:在给定的基准环境下,目标系统响应客户服务的最快速度或最好表现。
(2)负载测试:在目标系统正常服务的前提下,目标系统所能承担的最大服务负荷数量(即最大并发数量),最终可分析系统的性能瓶颈。
(3)压力测试:是一种破坏性测试,故意让软件在比较少的资源环境下运行,如在低内存、小硬盘、慢速CPU上运行,考验程序直至程序无法运行,从而发现软件缺陷。
(4)稳定性测试:在给定的负载(负荷)的情况下,有外界或内部非正常的干扰,系统所能够提供稳定服务的能力。
1.2 测试背景
测试背景指的是产品的业务背景,分析好业务背景,得出需要进行性能测试的业务,从而确定测试范围。
测试背景分析的目标只有一个——找出请求压力最大的场景。
一个场景的请求压力受三个指标影响,请求人数、操作时长、人均请求次数,测试指标的数值依赖于测试背景。
1.3 测试目的
最基础的性能测试一般以最后一点为目标,即确保产品的性能可以满足预定的生产场景。
1.4 测试类型
1.基准测试
基准测试是指测试环境确认后,对业务模型中涉及的每种业务做基准检测。获取单用户执行时的各项性能指标,为多用户并发和混合场景的性能测试分析提供参考依据。
2.并发测试
并发测试是指并发不同数目的虚拟用户执行检查点操作。目的是对检查点进行压力测试,预测系统投入使用后在检查点能够承受的用户压力情况,并根据相应的响应时间和各项资源使用情况分析、确定系统存在的性能瓶颈,为系统的优化和调整提供依据。
3.压力测试
测试系统在事先规定的某种饱和状态下,系统是否还具备处理业务的能力,或者系统会出现什么样的状况。压力测试是考验一个系统的抗压能力的,即在当前比较大的压力下,系统能够承受得住。压力测试的目的是测试系统的稳定性。
4.负载测试
负载测试和压力测试方法往往被放在一起讨论,因此很容易混淆。负载测试方法通过在被测试系统上下不断增加负荷,直到事先选定的性能指标,变为不可接受或系统的某类资源使用已经达到饱和状态。负载测试方法实际就是一个不断加压,直到找到系统不可用临界点的过程。
5.稳定性测试
稳定性测试是指被测系统在特定硬件、软件、网络环条件下,给系统加载一定业务压力,是系统运行一段比较长的时间,以此检测系统是否稳定。稳定性测试是概率性的测试,即使系统通过稳定性测试,也并不能保证在实际运行过程中不出现问题,因此可以通过多次测试、延长测试时间、增大测试压力等方法提高测试的稳定性。
6.极限测试
在过量用户下的压力测试。目的是确定系统的极限并发用户数。
7.场景测试
通过对系统体系架构和功能模块的分析以及系统用户的分布和使用频率的分析,来构造系统综合场景的测试模型,模拟不同用户执行不同操作,最大限度模拟系统真实场景,使用户预知系统投入使用后的真实性能水平,从而对系统做出相应的优化及调整,避免实际情况中出现系统长时间不响应及崩溃的情况。
8.吞吐量测试
吞吐量测试是指模拟系统真实的使用情景,每隔一定时间段并发不同数目的虚拟用户执行检查点操作,持续运行一段时间,计算每单位时间系统处理的能力。目的是计算系统的吞吐能力。
二、 性能效率测试方案
2.1 性能测试环境
本次性能测试环境与真实运行环境硬件和网络环境有所不同,是真实环境的缩小,数据库是真实环境数据库的一个复制(或缩小),本系统采用标准的CS结构,客户端通过前台安装访问应用系统。
其中具体的硬件和网络环境如下:
Ø中间件服务器:Tomcat
Ø网络环境:LAN(10M)
Ø数据库:MySQL
Ø客户端:PC (Windows)
网络拓扑和结构图如下:
2.2 测试策略
测试策略,即如何进行性能测试,需确定使用的性能测试工具,测试脚本模拟的场景。
1.基准测试
针对单用户进行的业务场景测试,目标是获取单用户运行时的各项性能指标,从而建立起一个已知的性能水平用于对之后软硬件变化后的性能进对比。
l 为多用户并发测试和复杂综合场景测试等性能分析提供依据
l 识别系统或环境变更对于性能响应带来的影响
l 为评价系统优化前后的性能提供参考指标
2.并发测试
同时并发一定数量的请求,有明确的并发目标时使用,建议并发数为目标并发数*1.5。
3.负载测试
通过不断提高系统负载,测试系统性能的变化,并最终确定在满足系统性能指标的前提下,系统所能承受的最大负载量。需要关联负载和服务器的性能情况,有一定的数据处理。
负载:服务器接收的请求数量,请求越多,负载越高。
最优负载:对外
最大负载:对内
注意:负载测试的关注重点是逐步增加压力。
4.稳定性测试
一定的负载下持续测试一段时间,长时间连续处理业务的产品建议进行稳定性测试。
不同测试策略关注的方向不同,收集的数据类型不同,根据测试目的选择策略。
2.3 测试工具
1、kylinTOP测试与监控平台(商用版)
kylinTOP测试与监控平台是一款B/S架构的跨平台的集性能测试、自动化测试、业务监控于一体的测试平台,该工具开放10个免费虚拟用户可供学习和使用。在易用性上较好,录制脚本支持最新版本的浏览器,对谷歌和火狐都支持非常好。录制过程高效便捷这是其它性能工具无法比拟的。仿真能力上是目前业界做的最好的性能工具,可以做到完全仿真浏览器行为,也就是单用户的HTTP请求瀑布图可以和浏览器器完全一样。总之它是目前国内一款非常难得好用的性能测试工具,可以完全替代国外的同类产品。目前在军工领域、测评检测机构、国有企业、银行体系、大型企业有着广泛的应用。支持的协议较多,尤其在视频领域支持的协议非常多,具有独特的优势。
2、kylinPET(商用)
kylinPET在外观设计思路上有点类似LoadRunner,由脚本编辑器、分析器、并发控制器、执行器四部分组成,运行环境支持windows,linux,统信操作系统,麒麟操作系统。kylinPET工具在脚本录制上具有强悍的表现,脚本录制支持的浏览器包括:Chrome,Firefox,ie,UOS浏览器、龙芯浏览器等。优其对脚本的调试功能,有着不一般的表现:录制与回放对比、回放结果可视化展示、关联功能扫描等。
性能最主要的功能是脚本制作、场景配置、指标统计与监控。kylinPET在这三个方面都做到了极致。
3、LoadRunner(商用)
LoadRunner是一种预测系统行为和性能的工业标准级负载测试工具,能优化系统性能。它的测试对象是整个企业的系统,通过模拟实际用户的操作行为和实行实时性能监测,帮助用户能尽快查找和发现问题。
LoadRunner通过模拟一个多用户并行工作环境来对应用程序进行负载测试,当应用程序在负载下运行时,会准确地度量、监控并分析系统的性能和功能。
有以下功能特性:
● 测试各种应用程序和协议
HP LoadRunner 支持针对各种应用程序环境和协议(包括 Ajax、Flex、Silverlight、Web、SOA、Web服务、RDP、数据库、终端、Citrix、Java™、.NET、Oracle 和 SAP)进行性能测试。便于使用的更新脚本和调试引擎可以利用数据格式扩展和关联工作室更加方便、快捷地运行脚本。
● 使用多种 Web 2.0 技术录制和重播 Rich Internet Application
HP LoadRunner 的新 TruClient 技术是基于浏览器的新型虚拟用户生成器,支持下一代 AJAX 应用程序。它嵌入在浏览器中,可以提供互动式录制和脚本撰写,从而无需在脚本撰写过程中编写程序。可在各种级别进行录制和重播,从 GUI 层到传输和套接字层(具体取决于可用的技能和所需自定义级别)。这有助于更加方便、快捷和健壮地进行脚本撰写。它支持各种 AJAX 工具包,可以更加快捷、方便和综合地进行 Web 2.0 应用程序测试。
● 支持企业负载生成、监控和诊断
HP LoadRunner 具有为这些系统定制的 60 多个非侵入性监视器,并且可以诊断任何运行 J2EE、.NET、SOA、Oracle 和 SAP 的应用程序。
● 简化分析和报告
利用 LoadRunner 的 Bubble-Up 分析功能,可以快速确定哪些交易通过了设置服务级别目标 (SLO)而哪些未通过,还可以找出一些未通过的可能原因。强大的分析引擎会帮助以多种方式分割数据,便于查明问题的根本原因。同时还可以使用模板生成多个自定义报告,以满足各相关负责人的需要。
4、Apache JMeter(开源免费)
JMeter是一款开源免费的压测产品,最初被设计用于Web应用功能测试使用,如今JMeter被国内企业用于性能测试。对于WEB服务器(支持浏览器访问),不建议使用Jmeter,因为jmeter的线程组都是线性执行的,与浏览器相差很大,测试结果不具有参考性。对于纯接口的部分场景(对接口调用顺序无严格要求)测试可以使用,但是要注意使用技巧,才能达到理想结果。Jmeter提供的脚本形态与kylinPET很相似,但执行行为相差很大。Jmeter在进行脚本调试时,关联参数都需要手工处理,需要消耗大量的时间。
5.OpenSTA(开源免费)
OpenSTA是一个免费的、开放源代码的web性能测试工具,能录制功能非常强大的脚本过程,执行性能测试。例如虚拟多个不同的用户同时登陆被测试网站。其还能对录制的测试脚本进行,按指定的语法进行编辑。在录制完测试脚本后,可以对测试脚本进行编辑,以便进行特定的性能指标分析。其较为丰富的图形化测试结果大大提高了测试报告的可阅读性。OpenSTA 基于CORBA 的结构体系,它通过虚拟一个proxy,使用其专用的脚本控制语言,记录通过proxy 的一切HTTP/S traffic。通过分析OpenSTA的性能指标收集器收集的各项性能指标,以及HTTP 数据,对系统的性能进行分析。
6、Load impact(免费使用)
是一个在线可以免费测试网站负载能力,它就可以满足你的基本要求, 当然成为他的付费用户测试的项目将会更多。
Load impact是一款服务于DevOps的性能测试工具,支持各种平台的网站、Web应用、移动应用和API测试。Loadimpact可以帮助用户了解应用的最高在线用户访问量,通过模拟测试不同在线人数下网站的响应时间,估算出服务器的最大负载。
7.locust(开源免费)
Locust 完全基本 Python 编程语言,采用 Pure Python 描述测试脚本,并且 HTTP 请求完全基于 Requests 库。除了 HTTP/HTTPS 协议,Locust 也可以测试其它协议的系统,只需要采用Python调用对应的库进行请求描述即可。但是需要手工编写脚本,有一定的难度。
2.4 测试方案
2.4.1 测试流程图
2.4.2 需求分析
分析对象包括业务分布、业务高峰时间段、业务量、业务趋势、业务性能指标、系统架构、系统服务软硬件配置等,明确性能测试的范围和性能指标。
(1)业务分布:主要是用来确定性能测试的范围
(a)高频次的业务
(b)性能影响大的业务
(c)重要的业务
(2)业务量、业务高峰时间段、业务趋势:主要是用来确定性能目标。
性能指标可以分为2类:
(a)业务指标(TPS、RT、事务成功率等)
(b)硬件指标(CPU使用率、内存使用率、磁盘读写速率等)
(c)系统架构、服务器软硬件配置:主要是在搭建性能测试环境和对生产环境性能评估提供参考,其中服务器配置包括应用服务器、DB服务器以及其它的一些中间件配置。如:服务器操作系统、CPU、内存、数据库连接池配置。
2.4.3 制定性能测试计划
测试计划用来规划测试工作,一般需要考虑的内容包括:
(1)系统概述:简述系统功能,让阅读报告的人明白系统是做什么的。
(2)测试环境:系统生产环境、系统测试环境、负载机环境。
(3)测试范围:采集性能测试的需求,明确性能测试的范围和性能目标。
(4)性能指标:确定使用哪些性能指标作为系统性能的参考值。
(5)测试策略:明确性能测试将采用什么手段进行性能测试,在性能测试实施过程中关注哪些性能变化。
(6)测试场景:如何对单场景进行性能测试、如何对混合场景进行性能测试,混合场景的业务如何组合、是否需要集合点、思考时间、测试开始如何增加负载、测试结束如何减少负载等。
(7)测试准备:测试前的环境准备、数据准备。
(8)人力投入&时间计划:通过确定的测试范围和测试策略、评估性能测试工作量,合理安排人力、时间。
(9)交付物清单:性能测试计划、性能测试报告、性能测试脚本。
(10)测试风险:对测试过程中可能涉及到的风险加以评估,确定风险应对策略。
2.4.4 环境准备
性能测试环境包括软件环境、硬件环境和网络环境。这三大环境不仅是指应用服务器环境,还包括数据库服务器、缓存服务器、文件服务器以及其他中间应用服务器环境。
硬件环境包括:CPU、内存、磁盘等基本因素。
软件环境包括:操作系统版本、位数;JDK版本、位数、数据库版本号、位数等,以及这些软件的安装路径也最好与线上环境一致。配置文件包括JVM配置、中间件配置、数据库配置文件等。
网络环境包括:网络协议及网络带宽。
还有集群环境包括:应用相关服务器的负载均衡环境、数据库的热备或主从环境、集群环境等。
2.4.5 场景设计
场景分单场景和混合场景:单场景有利于问题的分析定位;混合场景更贴近用户的使用场景。
如下场景设计的模板,可参考:
2.4.6 测试执行
(1)执行过程按照测试方案中设计的场景执行,执行过程中需要注意:
( a)每次执行前做好必要的初始化操作(如:数据还原、存量数据处理完成等)。
( b)同一个用例的场景,如果时间允许,尽量执行2-3遍,避免偶然性偏差。
( c)执行完毕收集好测试结果,详细记录下该场景的所有测试数据,方便后期分析。
(2)测试过程中我们要对资源进行监控,常见如下:
2.4.7 结果分析
对性能测试过程中暴露出来的问题进行分析,找出原因。
(1)性能分析方法
不同的架构、不同的应用场景分析方法都有差异,具体分为2类:
a)自底向上:通过监控硬件及操作系统性能指标(CPU、内存、磁盘、网络等硬件资源的性能)来分析性能问题(配置、程序的问题)。因为用户请求最终是由计算机硬件设备完成的。
b)自顶向下:通过生成负载来观察被测试的系统性能,比如响应时间、吞吐量,由外及里一层一层分析,从而找到性能问题所在。
(2)性能分析过程
检查RT:模拟用户发起负载后,采用自顶向下的方式首先分析RT。
检查TPS:TPS越大,RT越小,说明性能越良好。
检查负载机资源消耗,是否有性能问题,首先要排除负载机对性能测试结果的影响,确保测试结果的准确性。
检查Web/App Server服务器资源消耗,判断服务器硬件资源是否存在性能瓶颈检查中间件配置,确认中间件是否存在配置问题影响性能。
检查数据库服务器资源消耗,判断数据库服务器硬件资源是否存在问题,影响数据库性能SQL分析。
2.4.8 回归测试
性能回归测试中除了关注性能问题本身外,还要关注性能优化是否对业务功能造成了影响。
2.4.9 发布性能测试报告
测试工作的重要交付件,对性能测试结果进行报告。主要包含如下内容:
(1)性能测试背景:结合系统简述一下性能测试开展的必要性。
(2)性能测试目标:此次性能测试的目标,我们要做哪方面的测试。
(3)性能测试范围:列出测试范围,参考测试计划中的测试范围。
(4)测试环境:测试工作中基于的测试环境
(5)测试进度:报告测试过程,什么时候做了什么工作。
(6)测试结果:全方面多方位的测试报告结果
(7)测试结论:分析给出测试结论,系统能否满足性能要求?存在什么问题?有哪些缺陷?解决了哪些问题,还有哪些问题没有解决。
(8)系统风险:报告系统可能存在的风险,帮助决策层应对风险。
标签:负载,场景,环境,性能,系统,测试,效率 From: https://blog.51cto.com/u_15828945/5988650