摘自《软件性能测试过程详解与案例剖析》    

    经过近一周的摸爬滚打,发现要用好Loadrunner,必须学习性能测试相关知识。因为性能测试设计的好,才能在工具的辅助下如虎添翼。而不能单纯依赖工具。

从零开始学性能测试。

性能测试的方法包括:

1、性能测试(Performance Testing)

2、负载测试(Load Testing)

3、压力测试(Stress Testing)

4、配置测试(Configuration Testing)

5、并发测试(Concurrency Testing)

6、可靠性测试(Reliability Testing)

7、失效恢复测试(Failover Testing)

1、性能测试

    性能测试(Performance Testing)方法是通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能是否满足生产性能要求。Performance Testing是一种最常见的测试方法,通俗地讲,这种测试方法就是要在特定的运行条件下验证系统的能力状况。

    性能测试方法的特点有:

  • 这种方法的主要目的是验证系统是否有系统宣称具有的能力

  • 这种方法需要事先了解被测试系统典型场景,并具有确定的性能目标

  • 这种方法要求在已确定的环境下运行

    软件系统的性能表现与非常多的因素有关,无法根据系统在一个环境上的表现去推断其在另一个不同环境中的表现,因此对这种验证性的测试,必须要求测试时的环境(硬件设备、软件环境、网络条件、基础数据等)都已经确定。

2、负载测试

   负载测试(Load Testing)方法通过在被测系统上不断增加压力,直到性能指标。这种方法可以找到系统的处理极限,为系统调优提供数据。该方法的特点:

  • 这种性能测试方法的主要目的是找到系统处理能力的极限

    Load Testing方法通过“检测——加压——直到性能指标超过预期”的手段,其主要目的是找到系统处理能力的极限,这个极限一般会用“在给定条件下最多····”这样描述来体现。而预期的性能指标,一般会被定义为“响应时间不超过10秒”这样的描述。

  • 这种性能测试方法需要在给定的测试环境下进行,通常也需要考虑被测系统的业务压力量和典型场景,使得测试结果具有业务上的意义。

    Load Testing方法由于涉及到“预定的性能指标”等需要进行比较的数据,也必须在给定的测试环境下进行。另外,Load Testing方法在“加压”的时候,必须选择典型场景,在增加压力时保证这种压力具有业务上的意义。

  • 这种性能测试方法一般用来了解系统的性能容量,或是配合性能调优来使用

3、压力测试

    压力测试(Stress Testing)方法测试系统在一定饱和状态下,例如CPU、内存等在饱和使用情况下,系统能够处理的业务能力,以及系统是否会出现错误。

    该性能测试方法的特点:

  • 这种性能测试方法的主要目的是检查系统处于压力情况下时,应用的表现

  • 这种性能测试一般通过模拟负载等方法,使得系统的资源使用达到较高水平

    除了CPU、内存使用率外的设定外,JVM的可用内存,数据库的连接数,数据库服务器CPU利用率等都可以作为压力的依据。

  • 这种性能测试方法一般用于测试系统的稳定性

4、配置测试

    配置测试(Configuration Testing)方法通过对被测系统的软/硬件环境的调整,了解各种搞不同环境对系统性能影响的程度,从而找到系统各项资源的最优分配原则。

该方法的特点:

  • 这种性能测试方法的主要目的是了解各种不同因素对系统性能影响的程度,从而判断出最值得进行的调优操作。

        此配置测试方法不同于功能测试并列的那个“配置测试”方法,此配置测试方法,是在性能测试领域内的配置测试方法,它的主要目的是了解各种因素对系统性能的影响程序,从而判断出对性能影响最大的因素。

  • 这种性能测试方法一般在对系统性能状况有初步了解后进行

    Configuration Testing方法需要在确定的环境和操作步骤、确定的压力条件下进行。该方法在每次执行测试时更换、扩充硬件设备,调整网络环境,调整应用服务器和数据库服务器的参数设置,比较每次测试结果,从而确定各个因素对系统性能的影响,找出影响最大的因素。

  • 这种性能测试方法一般用于性能调优和规划能力

    Configuration Testing方法主要用于“性能调优”领域,这种方法可以实现调优的持续进行。另外,在“规划能力”领域内,该方法也常被用来评估“该如何调整才能实现系统的扩展性”。

5、并发测试

    并发测试(Concurrency Testing)方法通过模拟用户的并发访问,测试多用户并发访问同一应用,同一模块或者数据记录时是否存在死锁或者其他性能问题。

该方法具有以下特点:

  • 这种性能测试方法的主要目的是发现系统中可能隐藏的并发访问时的问题

  • 这种性能测试方法主要关注系统可能存在的并发问题,例如系统中的内存泄露、线程锁和资源争用方面的问题

    并发测试关注的问题:

              问题类别                 问题描述


              内存问题

是否有内存泄露(C/C++)
是否有太多的临时对象(JAVA)
是否有太多的超过设计生命周期的对象(Java)

              

              数据库问题

是否有数据库死锁(Dead Lock)
是否经常出现长事务(Long Transaction)
              线程/进程问题是否出现线程/进程同步失败


              其他问题

是否出现资源争用导致的死锁
是否没有正确处理异常(例如超时等)导致系统死锁
  • 这种性能测试方法可以在开发的各个阶段使用,需要相关的测试工具的配合和支持

6、可靠性测试

    可靠性测试方法通过给系统加载一定的业务压力(例如资源在70%~90%的使用率)的情况下,让应用持续运行一段时间,测试系统在这种条件下是否能够稳定运行。

该方法的特点:

  • 这种性能测试方法的主要目的是验证系统是否支持长期稳定的运行

  • 这种性能测试方法需要在压力下持续一段时间的运行

  • 测试过程中需要关注系统的运行状况

7、失效恢复测试

    失效恢复测试方法是针对有冗余备份和负载均衡的系统设计的。这种测试方法可以用来检验如果系统局部发生故障,用户是否能够继续使用系统。以及如果这种情况发生,用户将受到多大程度的影响。

该方法的特点:

  • 这种性能测试方法的主要目的是验证在局部故障情况下,系统能否继续使用

  • 这种性能测试方法还需要指出,当问题发生时能支持多少用户访问的结论和采取何种应急措施的方案

  • 一般来说,只有对系统持续运行指标有明确要求的系统才需要进行这种类型的测试