软件测试手记:切莫忽视性能测试

发表于:2008-06-04来源:作者:点击数: 标签:软件测试性能测试手记
我最近在项目中兼任项目测试组长角色,这次项目中负责性能测试的QA组长调走了,只好由我硬着头皮顶上去。在这段日子里,使我对性能测试有了新的认识,性能测试绝不象大多数人认为的是一件简单的事情。目前,性能测试已跨越了单靠手工敲敲键盘、点点鼠标就可以
我最近在项目中兼任项目测试组长角色,这次项目中负责性能测试的QA组长调走了,只好由我硬着头皮顶上去。在这段日子里,使我对性能测试有了新的认识,性能测试绝不象大多数人认为的是一件简单的事情。目前,性能测试已跨越了单靠手工敲敲键盘、点点鼠标就可以完成的阶段,正朝着自动化和智能化方向发展。

  性能测试的重要性随着网络发展更凸显重要性,由于网络环境、数据库环境、应用服务器环境、系统平台和技术等的复杂性和多样性,难以预知的用户负载和愈来愈复杂的应用程序使软件性能非常难于控制。虽然,改善系统性能不是单单依靠性能测试就能完成的,但性能测试至今仍是控制性能有效的手段。

  什么是性能测试

  性能测试主要是通过自动化的测试工具模拟多种正常、峰值及异常负载来对系统的各项性能指标进行测试。一般来说,性能测试可概括为三个方面:在客户端性能的测试、在网络上性能的测试和在服务器端性能的测试。通常情况下,三方面有效的结合可以达到对系统性能全面的分析和瓶颈的预测。

  性能测试的基本策略是自动负载和压力测试。通过在一台或几台PC机上模拟成百上千的虚拟用户同时执行业务的情景,对应用程序进行测试,同时记录下每一事务处理的时间、服务器峰值数据、数据库状态等。它主要包括并发性能测试、疲劳强度测试、大数据量测试和速度测试等,其中并发性能测试是重点。

  (1)并发性能测试

  并发性能测试是一个负载测试和压力测试的过程,即逐渐增加负载,直到系统出现瓶颈或者不能接收更多负载,通过综合分析执行指标和资源监控指标来确定系统并发性能的过程。例如当负载压力逐渐增加时,通过检测系统的相应输出如通过量、响应时间、CPU负载、内存使用等来决定系统的性能。

  并发性能测试一般不采用手工方式,而是利用工具采用自动化方式进行。在测试时常常需要模拟真实环境测试,以考察在真实环境中的表现,这样测试出来的数据才有实际意义。目前,成熟的并发性能测试工具有很多,选择的依据主要是测试需求和性能价格比。

  (2)疲劳强度测试

  疲劳测试是采用系统稳定运行情况下能够支持的最大并发用户数,持续执行业务一段时间,通过综合分析执行指标和资源监控指标来确定系统处理最大工作量强度性能的过程。    疲劳强度测试可以采用工具自动化的方式进行测试,也可以手工编写程序测试,其中后者占的比例较大。一般情况是以服务器能够正常稳定响应请求的最大并发用户数进行一定时间的疲劳测试,获取执行指标数据和系统资源监控数据。如出现错误导致测试不能成功执行,则及时调整测试指标,例如降低用户数、缩短测试周期等。还有一种情况的疲劳测试是对当前系统性能的评估,用系统正常业务情况下并发用户数为基础,进行一定时间的疲劳测试。

  (3)大数据量测试

  大数据量测试可以分为两种类型:一是针对某些系统存储、传输、统计、查询等业务进行大数据量的独立数据量测试;二是与压力性能测试、负载性能测试、疲劳性能测试相结合的综合数据量测试方案。大数据量测试的关键是测试数据的准备,可以依靠工具准备测试数据。

进行性能测试的前提条件

  在任何性能测试活动开始前,软件应用程序必须达到性能测试接受标准。如果应用程序没有达到这些标准,则不应该进行性能测试,否则就是浪费时间和成本。进行性能测试的前提条件包括:

  (1)已通过单元测试能力

  在性能测试前所有应用程序必须先通过全面的单元测试策略,同时所附带的可被执行的单元测试代码应是完整和有效的。如果单元测试因为应用程序中的错误或缺少单元测试代码,那么应用程序则不应该进行性能测试。

  (2)已通过低负载级别能力

  在单用户和10个用户的低负载级别上,应用程序应该能在正常的计算时间达到合理的性能。如果应用程序无法在低负载级别正常运行,那么它肯定无法在更高负载级别正常运行。这时,开始性能测试将会浪费时间。

  (3)已准备好测试数据

  在性能测试期间执行应用程序所需的数据必须先准备好或已详细描述,以使性能测试小组能够建立与生产环境尽可能接近的模拟数据,要确保测试数据必须是真实、一致和完整的,任何与真实环境相差太远的测试数据都是无用的性能测试行为。

常见的性能测试误区

  (1)没有设置好性能测试期望

  在性能测试开始前没有从几个不同的角度设置期望,以确保测试结果是有价值的,这是最常见的性能测试误区。这些期望包括测试小组需要定义合理的输入和输出性能期望,如果没有提前设置,那么很难判断被测试的应用程序的性能是否合格。

  (2)性能测试环境失真

  显然,测试环境应尽可能地与生产环境相似,因为任何差异都将引入不确定性。因此,性能测试环境应在每个细节(从服务器防火墙和后端资源的数量到网络电缆的规格)上完全模仿生产环境。

 

原文转自:http://www.ltesting.net