开展有效的性能测试

发表于:2009-11-18来源:作者:点击数: 标签:性能测试
开展有效的性能测试 软件测试 随着信息系统应用越来越广泛,系统稳定在怎样的性能水平为好?面临公司业务冲刺时,系统能否经受

开展有效的性能测试    软件测试

 

    随着信息系统应用越来越广泛,系统稳定在怎样的性能水平为好?面临公司业务冲刺时,系统能否经受住“考验”?……这些问题逐步成为人们关注的焦点。

   许多未经性能测试的系统,往往无法预知系统的承载压力。在出现多用户并发情况时,这样的系统极可能造成响应缓慢甚至崩溃的问题。
    为避免发生这些问题,系统上线前需要进行一个有效的性能测试,找出系统的性能瓶颈,检查系统是否能够满足实际性能需求,进而降低系统上线后的性能风险

 

一、性能类型
  性能是一种广义上的说法,包括了以下各种不同的性能测试类型,每种测试类型都带着明确的测试目的。
  1.性能测试(Performance Testing)
  性能测试的方法是通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能是否满足生产的性能要求。即在特定的运行条件下验证系统的能力状况。
  主要强调在特定的软硬件环境、特定的测试业务场景下,获得系统的各个性能指标
  2.负载测试(Load Testing)
  在给定的测试环境下,通过在被测系统上不断增加压力,直到性能指标超过预定指标或某种资源使用已经达到饱和状态,目的是了解系统性能容量和处理能力极限。负载测试的主要用途是发现系统性能的拐点,寻找系统能够支持的最大用户、业务等处理能力的约束。
  负载测试是在固定测试环境,在其它测试角度(负载方面)不变的情况下,变化一个测试角度并持续增加压力,查看系统的性能曲线和处理极限,以及是否有性能瓶颈存在(拐点)。主要意义是从多个不同的测试角度去探测分析系统的性能变化情况,配合性能调优。测试角度可以是并发用户数、业务量、数据量等不同方面的负载。
  3.压力测试(Stress Testing)
  测试系统在一定饱和状态下系统能够处理的会话能力,以及是否出现错误,一般用于稳定性测试
  可以理解为资源的极限测试。测试关注在资源处于饱和或超负荷的情况下,系统能否正常运行,是一种在极端压力下的稳定性测试。其主要意义是通过测试、调优保证系统即使在用户的极端压力下也不会出错甚至系统崩溃。
  压力测试的目的是调查系统在其资源超负荷的情况下的表现,尤其是对系统的处理时间有什么影响。这类测试在一种需要在反常数量、频率或资源的方式下执行系统。目标是通过极限测试方法,发现系统在极限或恶劣环境中自我保护能力。主要验证系统的可靠性。
  4.配置测试(Configuration Testing)
  通过对被测系统的软硬件环境的调整,了解各种不同环境对性能影响的程度,从而找到系统各项资源的最有分配原则。
  主要用于性能调优,在经过测试获得了基准测试数据后,进行环境调整(包括硬件配置、网络、操作系统、应用、数据库等),再将测试结果与基准数据进行对比,判断调整是否达到最佳状态。
  5.并发测试(Concurrency Testing)
  模拟并发访问,测试多用户并发访问同一个应用、模块、数据时是否产生隐藏的并发问题,如内存泄漏、线程锁、资源争用问题。

    6.可靠性测试(Reliability Testing)
  通过给系统加载一定的业务压力的情况下,让应用持续运行一段时间,测试系统在这种条件下是否能够稳定运行。
  需要和压力测试区分开,两者的测试环境和测试目的不一样。压力测试强调在资源极限情况下系统是否出错,可靠性测试强调在   一定的业务压力下长时间(如24×7)运行系统,关注系统的运行情况(如资源使用率是否逐渐增加、响应时间是否越来越慢),是否有不稳定征兆。


  二、如何有效开展性能测试
  1.引言
  作为评价产品性能的重要手段,性能测试在软件测试工作中占的比重一直很大,要最终提供一份准确,权威的测试报告,测试人员的努力工作自然不可或缺,但更重要的是测试人员清晰的工作思路,简洁的测试流程和良好的测试方法。
  2.目前性能测试存在的问题
  总结以往进行的性能测试,虽然测试人员自始至终对测试工作都做到了认真负责,但测试报告出炉后,大家总觉得美中不足,对测试结果都心存疑虑,尤其在那些时间跨度较长、针对不同的测试对象的性能对比测试中,或多或少都存在以下几个方面的问题:

  ①  测试准备不充分,测试目标不明确,测试计划不详细;
  ②  缺乏测试以及针对测试对象的技术储备;
  ③  测试环境的稳定性及前后一致性不足;
  ④  测试数据精确性和代表性不足;
  ⑤  测试描述不精练;
下面,我们就剖析以上问题的同时,探讨一下如何解决这些问题。
  三. 性能测试准备
  这是一个经常被忽略的环节,在接到测压任务后,基于种种其它因素的考虑,测试人员往往急于进度,立即投入到具体的测试工作去了,测试、记录、分析,忙的不亦乐乎,工作进行了一半才发现,或是硬件配置不符合要求,或是网络环境不理想,甚至软件版本不对,一时弄得骑虎难下,这都是没有做好测试准备惹的祸。
  那么我们应该如何做好性能测试的准备工作呢?
  做软件项目有需求调查、需要分析,我们做测试也一样。在拿到测试任务后,我们首要的任务就是分析测试任务,在开始测试前,我们至少要弄清以下几个问题:
  1.  要测试什么或测试的对象是谁?
  2.  要测试什么问题或我们想要弄清楚或是论证的是什么问题?
  3.  哪些因素会影响测试结果?
  4.  需要怎样的测试环境(软件、硬件、网络环境)?
  5.  应该怎样测试?
  只有在认真调查测试需求和仔细分析测试任务后,才有可能弄清以上一系列的问题,只有对测试任务非常清楚,测试目标极其明确的前提下,我们才可能制定出切实可行的测试计划。明确测试目标,详尽测试计划在对测试需求充分了解的基础上,制定尽可能详细的测试计划,对测试的实施是大有裨益的。
  3.1 测试技术准备
  在目前的大环境下,要求测试人员在短时间撑握所有的软、硬件知识是不太现实的,但平时测试人员应抓紧对测试工具和测试理论的研究,在测试计划中,应给研究测试对象和测试工具分配充足的学习时间,只有在充分撑握测试工具,完全了解测试对象的前提下,我们才能够实施测试。建立在错误的认识上的测试,既使你再努力,结果也是背道而驰,也很难证明问题,更不用说用这样的测试报告去说服用户。 "岁月联盟"提供
  技术准备列表:
  1) 扎实的计算机专业基础知识;
  2) 大量的实际性能测试及优化经验;
  3) 性能测试相关工具的使用;
  4) 操作系统的原理:熟悉操作系统的体系架构、操作系统的重要基础概念,以及内存管理、/文件系统、驱动/硬件的管理、网络的实现及构成、性能的监控方法和原理,熟悉常用的性能计数器;
  5) 数据库原理:能进行一般的数据库管理操作,熟悉SQL脚本的使用,熟悉常用的数据调优工具和常用的性能计数器;
  6) web应用原理:了解一般的配置,熟悉常用的服务器性能监控方法和原理,熟悉常用的性能计数器;
  7) 计算机网络原理:至少熟悉TCP/IP,熟悉HTTP,至少见过并了解三层、四层或者器的使用和配置。了解常用的与网络性能相关的性能计数器;
  8) 行业知识:熟悉专属行业的业务知识和用户场景,例如银行网站后台管理系统所涉及的业务知识和用户场景,证券交易系统所涉及的业务知识和用户场景。

 

3.2 配置测试环境

  配置测试环境是测试实施的一个重要环节,测试环境适合与否会严重影响测试结果的真实性和正确性。测试环境包括硬件环境和软件环境,硬件环境指测试必需的服务器、客户端、网络连接设备,以及打印机/扫描仪等辅助硬件设备所构成的环境;软件环境指被测软件运行时的操作系统、数据库及其他应用软件构成的环境。考虑到其它因素,如网络锁、网速、显示分辩率,数据库权限、容量等对测试结果的影响。如条件允许,我们最好能配置几组不同的测试环境。

  搭建测试环境步骤:

  1)  测试环境规划

  测试环境的规划包括硬件、软件及所有构建测试环境所需的资源的规划,可以利用Checklist或是测试环境部署矩阵的方式完成;

MILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">测试环境部checklist

测试环境说

对测试环境的简介

项目名称

测试项目名称

项目简介

对项目的简介

网络拓扑图

测试环境的网络拓扑图

硬件配置

描述配置环境硬件配置信息

例如:

CPU:至强 3.0

内存: 4GB

硬盘: 200G

网卡:千兆

软件配置

测试环境中所使用的软件环境配置(要有详细版本)

例如:

操作系统: Windows

系统服务: AD域、消息队列、 MSDTC访问

应用平台 Microsoft.Net Framework2.0 SP1

应用软件: MCMS 2002 SP1

数据库:SQL

中间件 IIS6.0

浏览器: IE7.0

杀毒软件:诺顿 SEP

软件防火墙 windows防火墙

软件要求

描述软件环境的详细配置:

例如:

操作系统需要配置 /3G的支持

需要打开 windows防火墙

IIS应用连接池的详细配置

IE需要将应用网址添加到信任站点

网卡型号

描述测试环境的网卡型号信息详细

例如:

Intel PRO/100 NIC

Intel(R) 82567V-2 Gigabit Network Connection

网络信息

描述网络的具体配置项

例如:

域名或 工作组名

IP地址

子网掩码

默认网关

DNS服务器

测试工具

描述环境中需要安装的测试工具

测试工具名称

测试工具版本

测试工具简介

用户权限

描述测试环境中的用户权限

应用软件列表

被测试的软件及版本描述如:

门户网站后台管理服务端

静态抓取服务端

外来数据导入应用

应用软件要求

描述应用软件的详细配置

Dao.config数据库连接的配置

Webconfig配置

外来数据导入配置

 

2)  测试环境创建

  按照checklist中的网络拓扑、硬件配置、网卡型号的要求创建测试环境的硬件和网络环境,搭建完毕后,每个设备(PC或服务器)要整理出《硬件配置表》,以便于维护

  3)  测试环境配置

  按照checklist中的软件配置、软件要求、网络信息、用户权限配置测试环境中PC和服务器的软件环境,配置完毕后,每个设备(PC或服务器)要整理出《环境配置文档》,以便于后期的环境维护。

  4)  应用程序部署

  按照checklist中的应用软件列表和应用软件要求,将应用程序部署到测试环境中,部署完毕后,每个应用程序的部署要整理出《应用软件部署文档》,以便于后期的升级维护。

  5)  测试环境的使用

  在使用过程中可能会对测试环境做一定的调整,每次调整后,都要对相应的文档《测试环境部署checklist》、《硬件配置表》、《应用软件部署文档》和《应用软件部署文档》进行修改,以保持环境和文档的一致。

  6)  测试环境回收

  项目结束后,需要对项目中使用的资源进行整理,并将不使用的资源进行释放。

  硬件资源:PC机、服务器、磁盘空间、交换机等

  网络资源:IP地址

  3.3 测试数据的获取和处理

  功能测试的数据获取主要有三个方式

  1)  “造”数据:针对正常业务,异常情况,边界情况等构建测试数据,不仅仅包括最基本的基础数据,比如:用户、权限、配置、基础编码、原数据等,还包括系统的业务数据;

  2)  “导”数据:把已经在生产环境中运行的数据或老版本中的数据导出,在此基础上进行数据的整理后加工为测试数据;

  3)  “积累”数据:使用现实的业务流程将现有的非电子化业务数据手工录入系统,在验证业务的同时也完成了测试数据的积累,即边测试边积累数据。但是这种情况积累的数据往往有一定局限性,因为已经发生的业务数据基本是正确的、一致的,而且可能缺少某些特定业务的数据(不常发生的分支业务)。这样就需要根据对测试需求的分析,追加新的测试数据,以便能完整覆盖业务类型。

  性能测试使用的数据和功能测试有一定的区别,准备测试数据的侧重点不同,性能测试使用的数据不用考虑如何去校验功能。性能测试数据要注意以下几点:

  1)   测试数据的唯一问题

  性能测试往往使用自动化测试工具进行测试,会使用相同的脚步反复的运行来进行测试,所以在测试过程中一定要注意脚本中参数的重复问题,设计测试数据时要考虑并发用户数以及每个用户可能迭代的次数,避免因测试数据数量不够而使用重复数据,最终导致测试失败。

  2)   测试数据的清理问题

  性能测试往往会向系统中增加大量的数据,增加的数据量足以达到影响系统性能的程度(例如:数据库表中有100条数据和表中有100W条数据的响应时间一定是不同的),所以必须及时的对增加的测试数据进行清理,以保证测试环境的公平性,进而保证测试结果的真实性。

  3)   测试数据数量和容量(大小)问题

  性能测试往往要使用“大”数据量来进行测试,“大”数据量不仅仅指数量的多少,还要考虑到数据容量的大小。例如:发布文章的测试,不仅要满足发布文章数量的要求,还要考虑到文章内容的大小,也就是说不仅要考虑发布10W个1K大小的文章的性能还要考虑发布10W个10M大小的文章的性能。

  4)   测试数据随意性问题

  测试数据忌随意性,随意输入指定长度的字符串,虽然满足测试执行的要求,但是对后续工作会产生很多不良影响,例如:无法保证数据的唯一性,随意的输入数据有几率产生重复数据;收集的测试结果开发人员不易分析,性能测试中的开发人员可能需要分析内存的Dump文件,随意输入的、没有规则的字符串不利于开发人员对dump文件的分析。

  四. 如何开展性能测试

  测试前期的准备工作纷繁复杂,做好测试准备工作,已是完成了测试工作的一大半,但要产生一份具有说服力的测试报告,还应正确把握测试的强度,保持测试的一致性,提高测试的精度。

  判断软件的好坏,要看软件解决实际应用的能力,只有在一定的测试强度下,才能测试出各种软件资源的消耗率,软件运行的速度,软件的稳定性。通过对比在不同的测试强度下,不同软件每一个功能模块解决实际问题的能力和软件运行的效率,我们才可能判断出不同软件的每一个模块的强弱,甚至于整个软件的优劣。

  性能测试开始后,所有参数的输入都应遵循统一的标准,无论是哪一个环节,哪怕是一点点偏差,都应立即纠正,绝不能心存侥幸。要特别注意外部环境对测试结果的影响,如果在整个测试过程中,外部环境不一致,如网速、机器内存使用率不一样,就有可能导致测试结果与实际情况有出入。

 

 

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