《质量全面管控》读书笔记——性能测试

一、性能测试基础
性能测试是模拟生产环境在的关键业务压力和多种场景,在多种正常、峰值和异常负载条件下,对系统的各项性能指标进行测试,判断其身份满足系统性能的需求。性能测试包括3个方面:应用在客户端性能的测试、应用在网络上性能的测试和应用在服务器端性能的测试。
1、性能术语
注册用户数:指系统所拥有的所有用户群体。
在线用户数:真正产生压缩的用户,系统要能够支持这么多人同时在线业务。
并发用户:在系统上做操作的在线用户。
虚拟用户(Virtual User,Vser):性能测试工具产生的用户,用来模拟真实用户进行的一系列逻辑操作。
事务(Transaction):业务逻辑上的事务。
响应时间(Response Time):从客户端发出一个请求开始计时,到客户端接收到服务端的响应结果为结束所经历的时间。响应时间由请求发送时间、网络传输时间、服务器响应时间3部分组成。
QPS(Queries Per Second,每秒查询率),是一台服务器每秒能响应的查询次数(查询服务器在规定时间内处理流量多少的衡量标准)。
TPS(Transaction Per Second,每秒事务数),性能测试结果的衡量单位。
PV(Page View,页面浏览量或单击率),通常是衡量一个网站的主要指标。
思考时间(ThinkTime):模拟真实用户在操作过程中的等待时间。
迭代(Iteration):重复执行过程,性能测试中就是一个事务流程重复执行的过程。
步调(Pacing):指两次迭代之间的间隔时间。
集合点(Rendezvous):插入集合点是为了衡量加重负载情况下的性能情况。
每秒连接数(Connection Per Second):显示Web应用程序在运行过程中每秒建立的HTTP连接数。
吞吐量(Throughput):指单位时间内系统处理的客户请求的数量,直接体现系统的性能承载能力。一般来说,吞吐量用字节数/秒(Bytes/sec)或页面数/秒(Hits/sec)(Hits是指客户端发出的HTTP请求数量)来衡量,也可用“访问人数/天”或“处理的业务数/小时”等单位来衡量。

2、需求分析与策略
需求分为功能性需求(Functional Requirement Specification,FRS)和非功能性需求(Non Functional Requirements,NFR)(大部分NFR要进行性能测试,如负责测试、压缩测试、稳定性测试等)。
任何一个性能测试项目的开始,都要根据系统性能需求和特性来制定测试方法和策略,一般取决于以下几个性能指标:
1)系统吞吐量(TPS)
2)系统响应时间
3)系统资源使用率

负载测试(LoadTesting):通过模拟系统所承载的并发用户或请求浏览的负荷,用不断加压的方式观察系统在不同压力下的性能变化,在满足性能指标的情况下,系统所能承受的最大负载量。
其测试目的:
1)得出系统最优TPS;
2)得出系统最优TPS时硬件资源利用率;
3)得出系统最优并发数。

压缩测试(StressTesting):指判断被测系统在强压力下何时出现不可恢复的崩溃现象。
其测试目的:
1)得出系统崩溃点的TPS;
2)得出系统崩溃点的TPS硬件资源利用率;
3)得出系统极限并发数。

容量测试(VolumeTesting):为了确定系统可处理同时在线的最大用户数,使系统承受超额的数据容量来发现它是否能够正确处理。
其测试目的:
1)获取系统在拐点时的性能数据;
2)获取系统性能点下降时的性能数据容量测试在资源占用和其他应用方面都有设定的指标,如CPU、内存、磁盘使用量。这些指标的设定一般采用80/20原则,如CPU使用率不超过80%。

稳定性测试(Stability Testing):指在给定的负载下,系统长时间健康运行不出现故障、不出现异常的峰值。给定的负载一般是以容量极限为参考,用80/20原则制定负载模式,但在实际的稳定性中,一般都是用恒定的负载进行测试。测试执行时间一般按24hX7,系统用户的业务操作主要发生工作时间内约为10h,所以实际测试时间设定为70h。
其测试目的:
1)长时间测试中系统稳定不宕机;
2)被测业务场景五性能问题;
3)某业务出现错误时,系统可稳定持续运行。关注系统稳定性,要对资源、连接池、JVM年老区变化、TPS、应用系统响应时间和DB健康状况进行关注。

性能测试流程(需多方达成共识):
1)提交性能测试申请后,收集性能测试需求;
2)建立业务模型,设定测试方案和计划(确定测试的业务范围、设定测试目标);
3)搭建性能测试环境,配置监控系统并通过功能测试验证(需要收集生产环境和实际测试环境之间的标准差异,最好是1:1的比例,如果达不到生产环境标准,需要计算差异系数来预估结果。选取压力测试和监控工具。);
4)编写性能测试脚本,准备测试数据;
5)设置测试场景并配置监控系统,再执行测试场景;
6)执行结束后,收集和分析测试结果,提出调优建议(测试人员起辅助和协调作用);
7)编写测试报告交给项目组,项目组通过性能测试结束,不通过则开始调优,然后开始新一轮的测试执行。

测试策略:
根据不同的产品、系统、架构、通信方式和项目需求,选择不同的测试方法,从以下几个维度考虑:
1)根据通信方式选择测试工具;
2)被测系统环境结构;
3)需求和项目类型、测试时间限制等。

二、测试工具——LoadRunner
LoadRunner是HP开发维护的预测系统行为和性能的工业标准级商业负载测试工具。通过模拟上千万用户实施并发负载及实时性监测的方式来确认和查找问题,它能够对整个架构进行性能测试。通过使用LoadRunner,能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。
LoadRunner组件分为4个应用:
1)Virtual User Generator:称为VuGen,可以录制、编写和调试脚本。
2)Controller:设计、执行测试场景和监控服务器数据。
3)Analysis:用来收集测试结果,生成分析报告。
4)LoadRunner Agent:用来作为执行性能测试的负载机。

准备脚本的常见步骤:
1)新建脚本并选择协议;
2)录制脚本或编写脚本;
3)添加思考时间和事务名称;
4)添加检查点;
5)关联脚本(自动关联和手动关联);
6)参数化脚本;
7)调试脚本。

三、测试工具——JMeter
JMeter是Apache组织开发的基于JAVA的可跨平台的性能测试工具(开源),可以用于对服务器、网络、对象模拟巨大的负载,在不同压力类别下测试其强度和分析整体性能。它和Load Runner一样可以实现分布式负载测试。针对Sockets协议、SOAP协议,JMeter要比Load Runner更容易使用(JMeter从版本2.9起就废弃了Web Service(SOAP)Request,而是使用SOAP/XML-RPC Request)。

1、脚本与优化
1)创建线程组(线程组是用来创建Vuser的利器,一个线程组就相当于一个用户组,线程数相当于虚拟用户数);
2)选择合适的协议,开始添加脚本(sockets协议脚本、HTTP协议脚本(可以使用bodboy进行脚本录制,然后将生成的脚本导入JMeter进行下一步调试)、JAVA协议脚本);
3)如果需要脚本参数化,那么在脚本之前插入参数化.csv文件(LoadRunner为.dat文件);
4)如果需要提取数据,那么在脚本之后插入正则表达式提取器(LoadRunner使用关联函数);
5)添加一个响应断言(LoadRunner使用函数来捕获返回值);
6)添加合适的监控器(LoadRunner只要开启性能测试场景,大部分性能参数自动获取);
7)执行测试脚本,获得测试结果(LoadRunner的测试结果更直观详细),可以使用Backend Listener插件。

猜你喜欢

转载自blog.csdn.net/zlanbl085321/article/details/80789674
今日推荐