性能测试 - 方法

2012-05-10  肖莉 

性能测试方法包括:
.性能测试        Performance Testing
.负载测试        Load Testing
.压力测试        Stress Testing
.配置测试        Configuration Testing
.并发测试        Concurrency Testing
.可靠性测试     Reliability Testing
.失效恢复测试 Failover Testing
 
一.性能测试 Performance Testing
   通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能是否满足生产性能要求.
   在特定的运行条件下验证系统的能力状况.
特点:
1)验证系统是否有系统宣称具有的能力.
   包括确定用户场景,给出需要关注的性能指标,测试执行和测试分析这几个步骤,
2)需要事先了解被测试系统典型的场景,并具有确定的性能目标
 
二.负载测试 Load Testing
   在给定的测试环境下,通过逐步增加系统负载,直到性能指标超过预定指标或某种资源使用已经达到饱和状态,从而确定系统在各种工作负载下性能容量和处理能力,以及持续正常运行的能力,确定系统所能够承受的最大负载量.负载测试的主要用途是发现系统性能的拐点,寻找系统能够支持的最大用户,业务等处理能力的约束,为系统调优提供数据;
  当负载逐渐增加时,系统组成部分的相应输出项,例如通过量,响应时间,CPU负载,内存使用等来决定系统的性能.负载测试是一个分析软件应用程序和支撑架构.模拟真实环境的使用,从而来确定能够接收的性能过程;
  负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行.此外,负载测试还要评估性能特征,例如,响应时间,事务处理速率和其他与时间相关的方面;
   这种方法可以找到系统的处理极限,为系统调优提供数据. 
特点:
1)主要目的是找到系统处理能力的极限.
2)需要在给定的测试环境下进行,通常也需在考虑被测系统的业务压力量和典型场景,使得测试结果具有业务上的意义
3)用来了解系统的性能容量,或是配合性能调优使用.
负载测试与压力测试的区别
  负载测试是确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统组成部分的相应输出项,例如通过量,响应时间,CPU负载,内存使用等来决定系统的性能.负载测试是一个分析软件应用程序和支撑架构.模拟真实环境的使用,从而来确定能够接收的性能过程.
  压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试;
 
容量测试
   容量测试是负载的补充,用来确定程序的最终临界点.测试系统能够处理的最大会话能力.确定系统可处理同时在线的最大用户数;
  即使系统处理会话超过了临界点,系统仍需在稳定运行;
 
三.压力测试     Stress Testing
    压力测试通过逐步增加系统负载,测试系统性能的变化,并最终确定在什么负载条件下系统性能处于失效状态,通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试.
    同时在测试系统的能力最高实际限度时,即软件在一些超负荷的情况,功能实现情况.如要求软件某一行为的大量重复,输入大量的数据或大数据值数据,对数据库大量复杂的查询等.
    压力测试的目的是找出因资源争用而导致的错误.如果内存或磁盘空间不足,测试对象就可能会表现出一些在正常条件下并不明显的缺陷.而其他缺陷则可能由于争用共享资源(如数据库锁或网络带宽)而造成的.压力测试还可以用于确定测试对象能够处理的最大工作量;
    压力测试并不是简单的为了一种破坏的快感而支破坏系统,实际上它是可以让测试工程师观察系统对出现故障时系统的反应.系统是不是保存了它出故障时的状态?是不是它就突然间崩溃掉了?它是否只是挂在那儿啥也不做了?它失效的时候是不是有一些反应?在重启之后,它是否有能力可以恢复到前一个正常运行的状态?它是否会给用户显示出一些有用的错误信息,还是只是显示一些很难理解的十六进制代码?系统的安全性是否会因为一些不可预料的故障而会有所降低;
压力测试的一些反常规操作
压力测试是在一种需要反常数量,频率或资源的方式下运行系统.例如:
.当平均每秒出现1个或2个中断的情形下,应当对每秒出现10个中断的情形来进行特殊的测试;
.把输入数据的量提高一个数量级来测试输入功能会如何响应;
.应当执行需要最大的内存或其他资源(如CPU,内存,磁盘,网络)的测试用例;
.运行一个虚拟的操作系统中可能会引起大量的驻留磁盘数据的测试用例;
.两倍的已经基线的并发用户数或者HTTP连接数;
.随机的关闭及重开连接到服务器上的网络上集线器/路由器的端口(例如,可以通过SNMP命令来实现)
.把数据库断线然后再重启;
 特点:
1)目的是检查系统处于压力情况下时,应用的表现.(有无出错信息产生,系统对应用的响应时间等)
2)通过模拟负载等方法,使得系统的资源使用达到较高的水平.
   "CPU使用率达到75%以上,内存使用率达到70%以上",在这种情况下测试系统响应时间,系统有无产生错误,除了CPU和内存使用率的设定
外,"JVM的可用内存","数据库的连接数","数据库服务器CPU利用率"等都可以作为压力的依据.率达到70%以上)
3)用于测试系统的稳定性.
 
强度测试
    强度测试检查程序对异常的处理能力.它总是迫使系统在异常的资源配置下运行.压力测试注重的是外界下不断施压,强度测试注重的是系统的极限或者系统异常情况下的测试;
 
四.配置测试     Configuration Testing
   通过对被测系统的软/硬件环境的调整,了解各种不同环境对系统性能影响的程度,从而找到系统各项资源的最优分配原则.
 配置和负载,压力测试也是分不开的,测试中要考虑在不同配置环境中,不同负载压力的系统性能状况.
特点:
1)目的是了解各种不同因素对系统性能影响的程度,从而判断出最值得进行的调优操作;
2)在对系统性能状况有初步了解后进行;
  配置测试方法需要在确定的环境和操作步骤,确定的压力条件下进行.该方法在每次执行测试时更换,扩充配件设备,调整网络环境,调整应用服
务器和数据库服务器的参数设置,比较每次测试结果,从而确定各个因素对系统性能的影响,找出影响最大的因素.
3)用于性能调优和规划能力.
 
五.并发测试     Concurrency Testing
    并发性能测试的过程是一个负载测试和压力测试的过程,即逐渐增加负载,直到系统的瓶颈或者不能接收的性能点,通过综合分析交易执行指标和资源监控指标来确定系统并发性能的过程.它重点关注:多个用户同时访问同一个应用,模块或者数据时是否存在思索或者其他性能问题,如内存泄漏,线程锁,资源争用问题;
    几乎所有的性能测试都会涉及并发测试.而在并发测试的同时会兼顾到负载,压力.稳定性测试;
    用户并发测试是性能测试的最主要部分,包含了负载测试和压力测试的过程.主要是逐渐增加用户数量来加重系统负担,直到出现不能接收的性能点或者瓶颈.一般要测试正常数量的用户并发和极限数量下用户并发的情况;
目的:
并发性能测试的目的在于寻找到瓶颈问题.主要体现在三个方面:
1) 以真实的业务为依据,选择有代表性的,关键的业务操作设计测试案例,以评价系统的当前性能;
2)当扩展应用程度的功能或者新的应用程序将要被部署时,负载测试会帮助确定系统是否还能够处理期望的用户负载,以预测系统的未来性能;
3)通过模拟成百上千个用户,重复执行和运行测试,可以确认性能瓶颈并优化和调整应用;
   通过模拟用户的并发访问,测试多用户并发访问同一个应用,同一个模块或者数据记录时是否存在死锁或者其他性能问题.
场景设计
  并发用户测试主要是对系统的核心功能和重要业务进行测试,要以真实的业务数据作为输入,选择有代表性和关键的业务操作.测试场景包括:
1)单一场景测试(有人也称作基准测试)
  单一场景测试是逐一对业务模型中的业务或个别重要业务进行单一场景多并发测试,目的是检查单一业务功能的性能和稳定性;
2)混合场景测试
  混合场景测试是按照业务模型所有业务的多种不同类型操作,所有用户同一时间执行的是相同的操作.通过性能测试,得到系统性能表现数据如:事务的平均交易时间,应用服务器,数据库服务器的资源使用情况,交易正确率等;
3)业务组合测试
  业务组合测试是按照业务模型所有业务的多种不同类型操作,以及各个业务操作的用户使用数等信息设计测试场景,各个用户执行不同的操作,模拟实际生产环境中在业务处理系统的压力情况.通过性能测试,得到系统性能表现数据如:事务的平均交易响应时间,应用服务器,数据库服务器的资源使用情况,交易正确率等,为系统的实际上线运行提供可靠的参考.
  测试方法:按照业务模型比例设置测试场景.并逐步增加并发量,记录每次测试环境参数;包括数据库配置参数,应用系统设置参数.收集系统性能变化曲线.
  业务组合测试是更接近用户实际操作系统的测试,因此用例编写要充分考虑实际情况,选择最近实际的场景进行设计.业务组合测试可以执行如下的情况;所有用户同时使用多个模块的测试.模拟多个用户并发来做不同的事情,分用户做同样的操作.
特点:
1)目的是发现系统中可能隐藏的并发访问时的问题;
2)主要关注系统可能存在的并发问题,例如系统中的内存泄漏,线程锁和资源争用方面的问题.
  内存问题:是否有内存泄漏(C/C++)
           是否有太多的临时对象(JAVA)
       是否有太多的超过设计生命周期的对象(JAVA)
  数据库问题:是否有数据库死锁(DEAD LOCK)
             是否经常出现长事务(Long Transaction)
 线程/进程问题:是否出现线程/进程同步失败
 其它问题:是否出现资源争用导致的死锁
      是否没有正确处理异常(例如超时等)导致系统死锁.
3)可以在开发的各个阶段使用,需在相关的测试工具的配合和支持;   
 
六.可靠性测试   Reliability Testing/稳定性测试
  通过给系统加载一定的业务压力(例如资源在70%~90%的使用率)的情况下,让应用持续运行一段时间,测试系统在这种条件下是否能够稳定运行;
场景设计
  稳定性测试主要是为了验证系统是否支持长期稳定的运行.在场景设计上重点考虑以下几个问题:1.涵盖功能点;2.并发量;3.持续时间;4.系统监控.
功能点
  如果是为了验证某一特定功能点的稳定性,测试方案可以只涵盖这个功能点或者这个功能点下面的某个操作.而系统整体稳定性检查时,功能点的选择一般是与性能负载压力测试的功能点一致的,这样即节省了测试脚本开发时间,又能保证了测试覆盖.当然,也可以添加一些分析认为在长时间运行极可能出现问题的场景.
运行.
特点
1)目的是验证系统是否支持长期稳定的运行,其原理在前面用非常粗糙的方式进行了一个解释.从直观上来说,在大的压力下进行一个较长时
间的测试,如果系统在测试中不出现问题或是不好的征兆,基本上可以说明系统具备长期稳定运行的条件;
2)需要在压力下持续一段时间的运行.
3)测试过程中需要关注系统的运行状况.
 随着时间的推移,响应时间有无明显的变化,系统资源使用率有无明显波动
作用
  稳定性测试可能帮助找到一些大型的问题,如死机,崩溃,内存泄漏等,因为有些存在内存泄漏问题的程序,在运行一两次时可能不会出现问题,但是如果运行了成千上万次,内存泄漏得越来越多,就会导致系统崩滑.
 
疲劳测试
  疲劳强度是在系统稳定运行下模拟最大用户数量,长时间运行,通过综合分析执行指标和资源监控来确定系统处理最大业务量时的性能;
  它和稳定性测试不同,稳定性通常模拟的是平均用户数量(或加权值),而疲劳测试通常是使用峰值时用户数量(或加权值);在运行时间上,疲劳度测试运行时间以小时为单位,而稳定性测试运行时间以天为单位.如出现错误导致测试不能成功测试,需要及时调整测试指标,例如降低用户数,缩短测试周期等,以综合衡量系统.
  疲劳强度测试的目的就是检验系统长时间,大用户量运行后的性能,对服务器,软件.网络进行不同条件下的综合测试分析,测试时要记录系统发生故障的信息作为测试结果;
 
七.失效恢复测试 Failover Testing
   是针对有冗余备份和负载均衡的系统设计的.这种测试方法可以用来检验如果系统局部发生故障,用户是否能够继续使用系统:以及如果这种
情况发生,用户将爱到多大程度的影响.
特点:
1)目的是验证在局部故障情况下,系统能否继续使用.
2)需要指出,当问题发生时"能支持多少用户访问"的结论和"采取何种应急措施"的方案.
3)对系统持续运行指标有明确要求的系统才需要进行失交恢复测试.
 
大数据量测试  
  大数据量测试可以分为三种类型:
1.针对某些系统存储.传输,统计,查询等业务进行大量数据量的独立数据量测试;
2.与压力性能测试,负载性能测试,疲劳性能测试相结合的综合数据量测试方案;
3.单独的数据库或文件系统性能测试.
  通常来说,我们采用第二种测试方案.把多种测试类型结合在一起,节省测试时间.如果怀疑或者已经发现大数据量情况下存在问题,那么需要采用方案一,三进行深入测试.大数据量测试的关键是测试数据的准备,如何准备足量而且有效的数据是值得去思考的.
 
 
 
477°/4767 人阅读/1 条评论 发表评论

焦爱玲  2012-05-10

学习了


登录 后发表评论