远仲楠
摘 要:性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载峰值以及异常负载条件来对系统的各项性能指标进行测试,规范的性能测试实施流程能够加强测试工作流程控制,明确性能测试各阶段应完成的工作,指导测试人员正确、有序的开展性能测试工作,提高个角色在性能测试中的工作效率。
1.性能需求分析
性能需求分析是整个测试工作开展的基础。测试需求分析阶段的主要任务是确定测试策略和测试范围。
策略主要根据软件以及用户对系统的性能需求来定,测试范围则主要分析系统的功能模块进行调研分析。
性能需求:主要是用户对待测系统的需求,主要包括待测交易选取、交易业务指标等。
交易选取规则主要有以下几点:
1)选取日常生产中典型交易;
2)选取日常生产中交易量较大的交易;
3)选取日常生产环境中响应时间较慢的交易;
4)选取生产环境中数据量较大的交易;
5)选择日间交易量批处理交易(验证日间联机交易与日间批处理之间的相互影响)。
交易业务指标:
1)应用联机交易处理能力(TPS、响应时间、交易成功率、服务器资源使用率等);
2)应用稳定性(稳定处理时长、交易总量、交易成功率、交易稳定处理能力、交易波动范围、应用服务器/数据库服务器资源利用率等)。
2.性能测试计划
性能测试计划贯穿于整个测试项目的生命周期:主要描述测试活动范围、明确测试任务和人员分配以及把控整体测试进度等,测试计划能够有效的规避测试风险。
测试计划主要包括以下内容:
1)测试方案定制以及评审
2)测试环境搭建以及检查
3)测试准备(测试数据准备、测试脚本编写)
4)测试过程实施(测试方法制定、测试场景建模)
5)测试问题发现以及解决
6)测试结果分析以及调优
7)测试报告编写及评审
3.性能测试方案制定
测试方案主要描述需要测试的特性,测试的方法,指导测试用例的设计以及执行,并对可能存在的风险进行评估。
测试方案主要包括:
1)测试目的:阐述本次测试目的;
2)测试范围:包括测试的背景、需要测试的特性以及不需要测试的特性;
3)测试准则:包括启动准则、结束准备以及暂停/再启动准则
4)交易模型:包括业务系统模型、业务指标、测试模型以及测试指标;
5)测试策略:主要有测试工具选择、测试策略、场景执行策略等;
6)测试环境及工具:包括待测系统网络拓扑图及测试环境软硬件配置信息;
7)测试输出:测试过程性输出及测试结果输出;
8)测试计划:测试步骤具体日期;
9)测试风险分析:包括测试环境部署是否延期,测试数据是否准备充分,待测系统功能以及批处理是否完整。
4.测试环境搭建
测试环境主要包括负载机是否搭建完成,系统间网络是否正常通讯,待测系统应用服务器操作系统、数据库服务器、中间件是否搭建/配置完成,应用部署是否成功,辅助测试工具是否部署成功,软件参数设置是否符合要求,基础数据以及测试数据是否准备完成,待测系统软件版本是否封版等。测试环境中各应用程序的配置直接影响测试结果是否存在失真的风险。
5.性能测试实施
实施过程主要是按照测试计划和测试尝尽设计进行测试,执行测试脚本,记录测试结果,进行性能缺陷跟踪管理。寻找系统存在的性能瓶颈进行调优,以期系统达到最优状态。
6.测试结果分析
根据测试过程中的记录以及测试结果,进行性能分析、错误分析,主要包括以下几点:
1)性能分析:高峰负载时,多用户并发进行典型业务操作的稳定性;
2)高峰负载时,用户操作响应时间;
3)数据库增量,对用户操作响应时间的影响。(常见错误:内存泄漏、并发与同步、通讯连接、配置参数不当等)
注:内存泄漏(memory leak)是指在程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏危害可以忽略,但内存泄漏堆积后果很严重,无论多少内存都会被占用;
内存溢出(out of memory)是指程序在申请内存时,没有足够的内存空间供其使用出现out of memory,即要求分配的内存超出了系统所能给出的,系统不能满足需求,于是产生内存溢出,内存泄漏最终会导致内存溢出。
在测试过程中碰到性能问题时,我们进行性能测试分析可以根据以下几点原則,主要有:
原则一:把事实与推测分开,总是用实际证据来证明猜想;
原则二:在没有足够证据前,不对程序进行优化;
原则三:优先验证简单的假设;
原则四:日志文件中没有错误不代表真的没有错误;
原则五:从系统到应用、从外到内进行层层剥离,缩小范围,确认是系统级问题还是应用级问题;确认是否外部系统问题;确认是应用程序问题还是数据库问题。
7.系统调优
针对测试过程中发现的问题进行调优,系统调优可以分为以下几个基本步骤:
1)确定清晰的性能目标,并按照优先级排列;
2)利用科学的测试工具对应用程序进行测试,并记录测试结果;
3)遵循一定的程序:测试性能->找出瓶颈->假设造成瓶颈的因素->测试假设是否成立->修改应用->再次测试性能;
4)确定影响性能的因素;
5)找出主要的瓶颈,首先解决最容易的,再重复测试;
6)一次修改一个瓶颈,不要对不需要的地方进行调优;
7)优化完成之后,再次进行性能测试。
通常,与系统性能测试同步进行相应的系统性能优化,按照由易到难的顺序对系统进行调优,主要可以从以下几个方面入手:
1)硬件问题,相比较来说,硬件发生问题是最显而易见的,例如,如果CPU不能满足复杂的数学逻辑运算,可以考虑更换CPU,如果内存页面交换数长期不等于0(vmstat命令),表示内存不足,如果硬盘容量很小,无法承受很多的数据可以考虑更换高速、大容量硬盘等;
2)网络问题,如果网络带宽不够,且测试时吞吐量较大,带宽基本占满,可以考虑对网络进行升级改造,增加带宽,将网络更换为高速网络(主要针对局域网);
3)應用服务器、数据库、中间件等配置问题,很多情况下,系统性能不是十分理想的一个重要原因就是没有对应用服务器、数据库等软件进行调优和设置造成。如:tomcat调整堆内存和扩展内存大小,WebLogic平台上配置的JDBC连接池参数设置不合理,增加数据库服务器物理内存以扩大数据缓冲区,JVM虚拟内存堆大小等;
4)源代码、数据库脚本问题,源代码、数据库脚本基于上述调整无效情况下,可以作为一种调优方式,但是由于涉及到对源代码的改变有可能会引入缺陷,所以在调优后,不仅要对性能进行重新测试,还有功能的验证是否正确;另外一种方式需要通过对数据库建立适当的索引,数据存储过程重编译,使存储过程的查询计划和数据库的数据存放结构保持一致,以及运用简单的SQL代替复杂的语句,从而达到提高SQL语句运行效率的作用,还可以在编码过程中选择适当的算法,减少响应时间,引入缓存技术等;
5)系统架构问题,在上述尝试未见效果情况下,需要考虑现行的系统架构是否合适,选择高效率的系统架构,但由于架构的改动比较大,需慎重对待。
8.测试报告编写
展望:上述是非常典型的一种性能测试流程,对开展业务系统性能测试有很大的参考价值。但是测试时间周期较长,部分测试过程工作重叠,这是比较大的弊端。随着测试技术的越来越完善,性能测试流程也会越来越简化,因为,对于如何减少测试过程中重复工作,完善测试体系,简化测试流程,有很大的研究价值。