一,软件性能测试的基本概念

1,什么是软件性能

1.1  用户关注软件性能:用户感受到系统的响应时间。

1.2  管理员关注的软件性能:服务器的资源使用状况是否合理,系统是否能实现扩展,系统的吞吐量和并发用户数,系统性能可能的瓶颈在哪里,更换那些设备能够提高系统性能,系统是否支持7*24小时。

1.3 开发人员关注的软件性能:架构设计是否合理,数据库设计是否合理,代码的内存使用方式,线程同步方式,是否存在资源竞争情况。  



2,软件性能的几个主要术语:

2.1 响应时间:是对请求做出响应所需要的时间(包括网络时间,应用服务器处理时间和数据库服务器处理时间)。合理的响应时间取决于实际的用户需求。 


2.2  系统用户数:使用该系统的用户总数。

       同时在线用户数:同一时间在线的用户数量。

      并发用户数:

       1)假设有个oa系统,改系统有3000用户, 平均每天大约有400个用户要访问系统,对一个典型的用户来说,一天只在8小时内使用该系统,且从登陆到退出该系统的平均时间为4小时。

       并发用户数的公式:C = nL/T .     峰值C^ = C + 3 *根号C .  (C平均并发用户数,n登陆用户数,L登陆到退出的平均时长。T考察的时间长度。)

       所以上面的例子C=400*4/8=200.   C^=200+3*根号200=242 。


    2)把1)以更细的时间粒度考察,例如在1小时内的情况。 

    3)考虑典型的业务模式:不同的应用有不同的业务模式。例如一个内部系统一般在上班后30分钟到1小时内登录的用户比较集中。一个账务系统在每月的结账日前几天比较繁忙。所以需要结合应用的业务模式,考虑可能发生的业务场景。 

    4)C=n/10,用每天访问系统的用户数的10%作为平均并发用户数。 C^=C*r ,r取值一般是2-3 。 (这种计算不严格,很少使用。)

    5)日志分析法:通过对应用系统的日志进行分析,从而了解系统用户的使用状态。 


2.3 吞吐量:直接体现软件系统的性能承载能力,是指单位时间内系统处理客户请求的数量。 吞吐量用请求数/秒,或是业务数/小时来衡量都可以。 (吞吐量一般用在非用户交互系统,接口测试等)

  吞吐量和并发用户在没有遇到瓶颈时的关系: F =( Nvu * R )/ T ,F吞吐量,Nvu 表示并发用户数,R每个用户发出的请求数或是点击数,T 性能测试所用时间。

如下图:随着用户数数的增加,系统吞吐量趋于平衡,说明出现瓶颈。 (并发用户数是10,20,30,40 等, 测试每秒点击数,然后画一个下面的图,分析瓶颈。)

根据下面的图,分析出最佳用户数和最大用户数。 分析系统瓶颈。进行调优。

image.png

实例如下:随着并发用户数的增加,看吞吐量的变化和响应时间的转折,及资源使用率的变化。

image.png

image.png

image.png

1.3性能测试方法论

1.3.1负载测试计划过程:目标,用户,用例,生成环境,测试环境,测试场景。 


1.3.2识别系统性能瓶颈的方法:用户数与吞吐量之间的关系图,最快速的定位瓶颈。(每秒事物数 与 用户数关系图。)


1.3.4 性能测试过程:计划,设计,录制脚本,执行场景,分析结果。

        segue提供的性能测试过程:从确定性能基线开始,通过单用户对应用的访问获取性能取值的基线,然后设定性能可接受的目标,用不同的并发用户数重复进行测试。这种测试方法非常适合性能调优和优化,通过不断重复的try-check过程,可以逐一找到导致性能瓶颈的地方。

       敏捷性能测试:每个迭代中的性能小目标,例如一个接口或是一个页面的性能。 


二, 性能测试的应用领域

性能测试的方法:常见的就是负载测试和压力测试。

2.1.1  验收性能测试:特定的运行环境(软硬件,网络,基础数据量)下,系统的典型场景,是否满足用户要求的性能指标。 

2.1.2  负载测试:在被测系统上对典型场景(具有业务意义的场景)不断加压,直到性能指标(响应时间)超过预定标准或某种资源使用已经达到饱和状态。这种方法的目的是找到系统的处理极限。

2.1.3  压力测试:cpu或是内存等在饱和使用情况下,系统能够处理的会话能力,以及系统是否会出现错误。一般会把压力设定为“CPU的使用率达到75%以上,内存使用率达到70%以上”这样的描述,在这种情况下测试系统的响应时间、系统有无产生错误。JVM的可用内存、数据库连接数、数据库CPU利用率等都可以作为压力依据。 主要是用于测试稳定性。

2.1.4 配置测试:通过对被测系统软硬件环境的调整,了解各种不同环境对系统性能影响的程度,从而找到系统各项资源的最优分配原则。配置测试方法需要在确定环境、操作步骤和压力条件下进行,该方法在每次执行测试时更换、扩充配件设备、调整网络环境、调整服务器和数据库配置参数设置,比较每次测试结果,从而确定各个因素对系统性能的影响。测试出最优配置。

2.1.5 并发测试:通过模拟用户的并发访问,测试多用户并发访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题。主要关注系统中的内存泄漏、数据库死锁、进程线程同步锁问题、资源争用等。

2.1.6 可靠性测试:给系统加载一定的业务压力,让应用持续运行一段时间,测试系统在这种条件能否稳定运行一段时间。

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



三,性能计数器和性能分析方法