随着企业需求的日益增长以及计算技术的不断进步,企业级系统的应用已经从早期的单机时代转换到了服务成千上万个用户的因特网时代。随着企业业务量的增加,企业的应用系统承载的负荷越来越重,对应用系统的要求越来越高。系统性能的好坏直接影响企业对外提供服务的质量,而性能测试在软件的质量保证中起着重要的作用。 本人结合自己的经验,从技术角度简单讨论一下软件性能测试的测试过程。软件性能测试过程分为三个阶段: 性能测试设计 性能测试执行 测试结果分析 1.性能测试设计 性能测试设计是性能测试过程中一个非常重要的环节,性能测试设计的好坏直接关系到测试的充分性和测试结果的有效性。 性能测试设计阶段主要包括性能需求分析、测试场景制定等。 1.1 性能需求分析 性能需求分析主要包括测试目的和性能指标确定。 进行性能需求分析,需要明确性能需求。性能需求可以从被测软件的相关文档中获得,也可以通过与用户沟通来获得。仔细阅读被测软件附带的相关文档,包括需求文档、使用文档、数据库设计文档等,提取有关软件性能相关的描述,例如"要求操作响应时间在……以内"、"要求……能够快速……"、"要求……能够支持……用户访问"、"要求……能快速稳定运行"、"要求系统连续……无故障运行"等,然后对提取的测试需求进行分析。 (1)确定测试目的 进行需求分析,首先要明确性能测试目的,测试目的不同直接影响后序的性能测试场景的制定。测试目的可以总结为三类:符合性验证、性能考察、性能调优。 符合性验证―主要验证软件是否满足规定的性能指标要求。如测试软件在某一条件下的平均响应时间,或者吞吐率,或者并发用户数等是否满足规定的要求。 性能考察―主要测试软件在某种条件下运行的性能状况。如测试软件所能支持的大并发用户数或者大数据量,软件在不同环境下的性能状况,随用户数量的变化或者数据量的变化情况下软件的性能变化状况等。 性能调优―主要是通过性能测试找出软件的性能瓶颈,分析出引起软件性能缺陷的原因,并进行针对性的性能优化,以改进软件性能。如对软件进行性能测试,确定是软件否存在性能方面的问题,并定位性能瓶颈,对其进行性能优化。 将测试需求与上述目的进行比较,确定出本次测试的测试目的。 (2)确定性能指标 此处确定的性能指标指的是性能需求中要求的,且通过性能测试直接得到的性能指标,主要包括响应时间、吞吐率、资源利用率、交易成功率等,是测试结果分析和判断的依据。性能测试需要有明确的性能指标,某些软件系统具有明确的性能指标,而有的软件系统则需要和用户一起,通过对软件系统的业务特点、技术特点、应用情况等进行综合分析来获得。 如,一软件系统,要求1个小时内必须完成7 200笔业务。可以得出每秒需要完成的业务为7 200/3 600=2笔,则可以得出该系统需要关注的性能指标为服务器处理请求的能力,即吞吐率,值为2笔/秒。 1.2 测试场景制定 测试场景是指导测试执行的依据。测试场景主要是模拟软件系统一些实际的应用情况,包括测试时执行的业务、每种业务执行的用户数量、模拟的总用户数
数据库数据量、用户增长方式、测试循环方式、用户退出方式、执行过程中的相关参数设定等,还包括测试中需要监视的性能计数器,主要是服务器端操作系统相关的计数器、应用服务器相关的计数器、数据库相关的计数器等。不同的测试目的,其测试场景是不同的。 符合性验证主要是验证软件性能是否符合用户使用的要求,则测试中应模拟软件系统的实际使用情况。如,在各功能操作中加入适当的思考时间和迭代间隔时间,用户增长方式采用逐渐加压方式等。软件实际使用时,主要是多用户执行多项功能操作,所以测试场景主要是多用户、多任务的并发测试。当软件系统有长时间连续运行的情况时,还需要有疲劳测试的测试场景。 性能考察中对于测试软件性能极限的情况,如支持的大用户数、大的数据量等,测试场景应该尽可能的模拟极限情况。为了保证测试中对软件施加足够的压力,用户增长方式采用同时加载,思考时间、迭代间隔时间都忽略等。测试软件性能极限,需要不断调整影响软件性能的要素,并分别进行并发测试。如,测试软件支持的大并发用户数,应不断调整并发用户数,在每组用户数下对系统进行并发测试。对于有长时间运行要求的软件系统,则需要进行疲劳测试。 性能考察中检测软件在不同条件下的性能状况时(非性能极限),测试场景应该尽可能与实际使用情况相接近,与符合性验证类似。 性能调优主要是为了软件实际应用中的性能优化,则测试中应模拟软件系统实际应用中的多用户、多任务的并发测试场景,与符合性验证类似。为了验证软件系统是否存在内存泄漏等问题,还需要对其进行疲劳测试。 2.性能测试执行 根据制定的测试场景,开始执行测试。测试执行不仅包括测试场景的执行,还包括测试场景执行前的一些准备工作,如,测试环境搭建、测试脚本准备、测试场景布置、测试场景执行等。 2.1 测试环境搭建 测试环境主要包括软件运行的软硬件环境和数据环境。 首先,需要根据测试执行方案搭建测试环境。确保测试结果的有效性,要求搭建一个独立、无毒、逼真的软、硬件环境及网络环境,安装调试被测软件,安装测试工具等。 其次,需要准备测试数据。以有利于测试为原则,可以自己准备,也可以从用户处获得满足要求的测试数据,或通过以上两种方式相结合获得。自己准备的数据要符合业务规范,同时避免增加垃圾数据。准备好测试数据后,应及时备份数据库。 2.2 测试脚本准备 根据测试执行方案中制定的测试功能,准备测试脚本。测试脚本可以通过测试工具来准备,也可以通过自己编写来完成。 准备测试脚本前,首先确定测试功能运行无误,防止影响测试结果。测试脚本录制或编写完毕后,需要进行相应的编辑,如参数化、调试等,并需要验证测试脚本的有效性: (1)首先,进行单脚本单用户验证,验证每个测试脚本运行与实际功能操作是否相符。如增加功能的脚本,既要保证脚本可以成功运行,还要保证数据库中有相应的增加数据。 (2)其次,进行单脚本多用户验证,验证每个测试脚本的数据池是否有效。 (3)后,进行多脚本多用户验证,验证测试脚本是否可以并发运行。 2.3 测试场景布置 根据制定的测试场景布置各测试场景,包括测试脚本及其
对应的虚拟用户数、对应的运行参数、用户增长方式、测试循环方式、用户退出方式、需要监视的性能计数器等。 2.4 测试场景执行 测试场景布置完毕后,开始执行测试场景。测试中,测试人员要监视测试运行情况,如有过多错误,应及时停止方案的运行,查找错误原因。若是因为外界原因(如网络不稳定等)或者运行参数设置问题,则需要进行相应的调整再运行方案。如果不是外界原因和运行参数设置问题,则保存测试结果,以便进行结果分析,找出问题原因。执行所有的测试场景,及时汇总测试结果,为下一步结果分析做准备。 为了保证方案运行的有效性,在执行测试前,要将数据库恢复到脚本准备前的原始状态。在运行中,所有相关设备不要进行与测试无关的操作,以避免影响测试结果。 3.测试结果分析 测试结果分析是性能测试中的一个重要部分,同时也是一个难点。不同的软件系统,不同的性能指标,结果分析方法都是不一样的。下面给出一个简单的结果分析方法。 首先,查看运行结果中是否有错误出现,可以结合运行日志信息来查找。若有错误信息,则需要进一步分析,根据错误信息查找原因。如,测试结果中出现超时错误,可能的原因有: a. 硬件有瓶颈,如CPU、内存等; b. 程序算法有问题; c. 应用服务的相关参数设置有问题; d. 程序中处理有关表的时候检查字段太多。 接下来,对这几个可能的原因进一步分析,以确定出具体的原因。 若运行结果没有出现错误,则根据关注的性能指标进行分析。首先对网络进行分析,排除网络问题,对服务器硬件(CPU、内存、磁盘I/O)进行相关分析,确定是否是硬件瓶颈引起的性能问题,然后对应用服务器配置进行分析,确认是否是由于应用服务器本身的配置引起的性能问题,然后对数据库进行性能分析,重点是索引、数据库Cache、死锁等问题的分析,排除上述因素后,再对程序代码进行分析,找出导致性能问题的因素。
软件性能测试
测试过程
性能测试
测试
性能
软件