性能测试之Web篇
作者:piaocl
关键字:性能测试,web测试
摘要:
随着网络世界的迅猛发展,网站的性能变得日益重要,性能不好的网站将被用户所抛弃。所以性能是用户对软件系统是否满意的一个重要方面。本文将对什么是性能,如何测试性能等方面进行论述。
那么性能是什么呢,性能是特定功能占用的时间和资源。他可以是功能的开销或者是同步运行功能的数目。Web性能测试就是模拟大量用户操作给网站造成压力,并评测web系统在不同负载和不同配置下能否达到已经定义的标准。性能测试更加关注分析和消除与软件结构中相关联的性能瓶颈。
性能是每个软件系统必须考虑的指标,在性能测试中我们通常注意以下四方面数据:一.负载数据 二.数据流量 三..软件本身消耗资源情况 四.系统使用情况。由于性能测试的特殊性,一般情况下都是利用特殊的测试工具(如LoadRunner,TestManager,ACT等)模拟多用户操作,对需要评测的系统造成压力。找出系统的瓶颈,并提交给开发人员进行修正。所以性能测试的目的是找出系统性能瓶颈并纠正需要纠正的问题。
制定WEB性能测试的策略可以遵循对系统中最重要的模块,经常使用的模块,系统开销最大的地方(代码最复杂的部分),对用户来说最重要的部分进行测试。我们从整体的角度分析一下性能可能出现问题的地方,作为web程序不管是两层,还是多层系统架构的程序。系统都是通过http协议(超文本传输协议(Hypertemx Transfer Protocol, HTTP)是一个“请求-回应”的应用协议,这个协议支持一套固定的方法如 Get, Post, Put, Delete等)来传输数据,发送命令。中间的过程大致为客户端(浏览器)发送数据操作请求给服务器,服务器接收命令请求后进行处理,然后把结果返回给客户端,客户端处理响应结果。这个过程中客户端发送请求进行数据处理的过程一般不是系统的性能瓶颈,这个时候一般是大量用户同时操作,发送数据请求才是系统的瓶颈。系统的服务器硬件资源最有可能是软件系统的瓶颈。我们需要调整软件和环境(最优化响应时间和资源),确认应用和系统可以处理的高负载和压力条件。而这个时候系统硬件中最可能的是cpu造成的瓶颈。系统中其他硬件资源所造成的瓶颈,我们可以替换相应的硬件资源,进行调整。而系统中另一个瓶颈可能是服务器把处理数据发送给客户端,这个过程硬件资源就不可能是性能的限制因素,最有可能是带宽的原因。
其实性能的问题大多数情况下是由于软件体系结构或设计不合理造成的,而不是编码引起的。如果在性能测试中发现CPU占用率居高不下,内存占用异常,经常报错的情况问题的时候,排除上边分析的原因外,应及时提交情况汇总给开发人员,让开发人员察看代码中出错环节是否有死循环等逻辑错误 ,检查应用部署后所使用的数据连接驱动是否有误或者代码未及时更新,查看数据库查询或者其他语句是否有异常,中断测试,只运行响应时间最长的页面并验证结果。分析系统可能的性能瓶颈。
我们需要在测试中注意不同的带宽条件对测试结果所造成的结果,所以应该在性能测试前要制定系统性能标准,这样才能合理分析测试结果。把不同带宽的测试结果进行分析量化,找到测试系统瓶颈。
一般性能测试中最常见的基本类型为基准测试,配置测试,负载测试,压力测试,我们知道在软件测试的过程中,不同阶段,不同类型所进行的性能测试关注测试目标是不同的,不同软件架构也决定了性能测试存在差异。这样就要对所进行的测试类型有一定的了解,才能更好的进行性能测试工作。下边是各种测试类型的具体概念:
基准测试——把新服务器或者未知服务器的性能和已知的参考标准进行比较
配置测试——确认服务器在不同的配置下性能的可接受性。(操作条件不变)
负载测试——确认服务器在不同的负载条件下性能的可接受性。(操作条件不变)
压力测试——确认服务器在异常或者极限的条件时性能的可接受性,例如,减少资源或大数量的用户。
竞争测试——确认服务器可以处理多个客户对同一个资源的请求竞争
通过系统基准测试提供的一定条件下服务器如何处理数据的基线,作为评估其他性能指标的参考数据起点。进行配置测试则是测试系统配置在不同的机器上能否正常运行。用配置测试来确保系统在多个平台上正常运行。而负载测试用来测试在不同负载条件下客户端或者服务器端的响应时间。帮助测试人员计算在限定时间内服务器响应处理的请求的最大数量的事务数。压力测试则是在极限条件下运行系统的过程,检查什么条件下服务器或者客户端崩溃。竞争测试则是在一台或者多台pc上操作系统功能来模拟实际环境。
部分测试人员可能面对的是一个已经发布的Web系统,这种情况如何进行性能测试呢。在没有进行测试之前,可以通过网站的管理人员收集测试数据,为以后进行性能测试做好准备,收集的信息包括每小时在线用户数量,平均每小时的在线用户数量,不同时段的在线用户峰值比较,收集被访问次数最多的的页面,系统正常运行时CPU的使用率。所有这些作为性能测试的依据,避免盲目进行性能测试。在不了解系统的真实情况下进行的性能测试,很可能是错误的测试。把过多的精力放在了错误的地方。那样测试结果就不具有真实性,并且会浪费大量的测试资源。
而对于一个开发中的web系统进行性能测试,就要根据开发目标和用户需求在体系结构的迭代过程中,不断调整测试目标,对系统性能有个很好的评估。那么如何才能成功的进行性能测试呢,我觉得进行性能测试前应有一个测试计划,这样才能保证性能测试有序的进行。下边的图例给出了性能测试的一般步骤:
图1-1 性能测试步骤
n 评估系统:在这个阶段,主要是明确确定系统期望目标,包括:确定系统功能,确定用户活动,确定系统架构,确定可接受的极限,验证可接受的极限,确定系统风险等。
开发测试资源:进行性能测试的资源,主要覆盖三种活动:开发风险减低计划,开发测试策略,开发自动化脚本。
n 执行基准测试:利用基线对比将来的测试结果对系统评估负载,压力,竞争测试结果中的相关性能。主要通过压力场景验证自动化测试脚本的正确性。在测试周期早期中标示可见的性能指标。性能工程包括个体脚本基线,建立初始化基准。
n 分析测试结果:对结果进行分析是为了决定是否对系统继续进行测试,是否结果达到了期望值。这个阶段包含评估结果,确定是否是可接受的极限,确定是否继续进行测试,确定需求调整。
n 预定测试:强制验证系统性能,这些测试是必须执行的即使性能和需求都没有调整的情况下。它包含执行用户体验测试,执行稳定性测试,执行产品确认测试等活动。
n 结束测试:实际工作中由于软件架构和其他资源限制,软件无法继续优化,此时建议将测试资源转移,测试其他方面,避免测试资源浪费。
通过上边一系列阐述,大家对Web性能测试的目的方法应该有了一定了解。实际工作中千差万别,需要大家具体问题具体分析,才能做好性能测试。
参考文献:
1. Performance_Engineering_Strategy_Template
2. <web测试指南>- John Wiley & Sons