性能测试方法及分析方法
发布时间:2016-10-14 来源:文档文库
小
中
大
字号:
性能测试方法及分析方法一、 性能测试简介
1.1 什么是软件性能
一般来说,性能是一种指标,表明软件系统或构件对于其及时性要求的符合程度;其次,性能是软件产品的一种特性,可以用时间来进行度量。
性能的及时性用响应时间或者吞吐量来衡量。响应时间是对请求作出响应所需要的时间。
对于单个事务,响应时间就是完成事务所需的时间;对于用户任务,响应时间体现为端到端的时间。比如,“用户单击OK按钮后2秒内收到结果”就是一个对用户任务响应时间的描述,具体到这个用户任务中,可能有多个具体的事务需要完成,每个事务都有其单独的响应时间。
对交互式的应用(例如典型的Web应用)来说,我们一般以用户感受到的响应时间来描述系统的性能,而对非交互式应用(嵌入式系统或是银行等的业务处理系统)而言,响应时间是指系统对事件产生响应所需要的时间。
通常,对软件性能的关注是多个层面的:用户关注软件性能,管理员关注软件性能,产品的开发人员也关注软件性能,下面将从3个不同层面来对软件性能进行阐述。
1.1.1 用户视角的软件性能
从用户的角度来说,软件性能就是软件对用户操作的响应时间。说得更明确一点,对用户来说,当用户单击一个按钮、发出一条指令或是在Web页面上单击一个链接,从用户单击开始到应用系统把本次操作的结果以用户能察觉的方式展示出来,这个过程所消耗的时间就是用户对软件性能的直观印象。图1.1以一个Web系统为例,说明了用户的这种印象。
1 / 28
发出请求请求应用服务器DB服务器用户用户感受到响应返回数据应用界面呈现呈现时间系统响应时间
图1.1 Web系统的响应
必须要说明的是,用户所体会到的“响应时间”既有客观的成分,也有主观的成分。例如,用户执行了某个操作,该操作返回大量数据,从客观的角度来说,事务的结束应该是系统返回所有的数据,响应时间应该是从用户操作开始到所有数据返回完成的整个耗时;但从用户的主观感知来说,如果采用一种优化的数据呈现策略,当少部分数据返回之后就立刻将数据呈现在用户面前,则用户感受到的响应时间就会远远小于实际的事务响应时间(顺便说一下,这种技巧是在C/S结构的管理系统中开发人员常用的一种技巧)。
关于响应时间的进一步讨论请见1.2.1节对“响应时间”的解释。
1.1.2 管理员视角的软件性能
从管理员的角度来看,软件系统的性能首先表现在系统的响应时间上,这一点和用户视角是一样的。但管理员是一种特殊的用户,和一般用户相比,除了会关注一般用户的体验之外,他还会关心和系统状态相关的信息。例如,管理员已经知道,在并发用户数为100时,A业务的响应时间为8秒,那么此时的系统状态如何呢?服务器的CPU使用是不是已经达到了最大值?是否还有可用的内存?应用服务器的状态如何?我们设置的JVM可用内存是否足够?数据库的状况如何?是否还需要进行一些调整?这些问题普通的用户并不关心,因为这不在他们的体验范围之内;但对管理员来说,要保证系统的稳定运行和持续的良好性能,就必须关心这些问题。
另一方面,管理员还会想要知道系统具有多大的可扩展性,处理并发的能力如何;而且,管理员还会希望知道系统可能的最大容量是什么,系统可能的性能瓶颈在哪里,通过更换哪些设备或是进行哪些扩展能够提高系统性能,了解这些情况,管理员才能根据系统的用户状况制定管理措施,在系统出现计划之外的用户增长等紧急情况的时候能够立即制定相应措施,进行迅速的处理;此外,管理员可能还会关心系统在长时间的运行中是否足够稳定,是否能够不间断地提供业务服务等。
2 / 28
因此,从管理员的视角来看,软件性能绝对不仅仅是应用的响应时间这么一个简单的问题。
表1-1给出了管理员关注的部分性能相关问题的列表。
表1-1 管理员关注的部分性能相关问题
管理员关心的问题
服务器的资源使用状况合理吗
应用服务器和数据库的资源使用状况合理吗 系统是否能够实现扩展
系统最多能支持多少用户的访问?系统最大的业务处理系统容量
量是多少
系统性能可能的瓶颈在哪里 更换哪些设备能够提高系统性能 系统能否支持7×24小时的业务访问
系统可扩展性 系统可扩展性 系统稳定性 软件性能描述 资源利用率 资源利用率 系统可扩展性
1.1.3开发视角的软件性能
从开发人员的角度来说,对软件性能的关注就更加深入了。开发人员会关心主要的用户感受——响应时间,因为这毕竟是用户的直接体验;另外,开发人员也会关心系统的扩展性等管理员关心的内容,因为这些也是产品需要面向的用户(特殊的用户)。但对开发人员来说,其最想知道的是“如何通过调整设计和代码实现,或是如何通过调整系统设置等方法提高软件的性能表现”,和“如何发现并解决软件设计和开发过程中产生的由于多用户访问引起的缺陷”,因此,其最关注的是使性能表现不佳的因素和由于大量用户访问引发的软件故障,也就是我们通常所说的“性能瓶颈”和系统中存在的在大量用户访问时表现出来的缺陷。
举例来说,对于一个没有达到预期性能规划的应用,开发人员最想知道的是,这个糟糕的性能表现究竟是由于系统架构选择的不合理还是由于代码实现的问题引起?由于数据库设计的问题引起?抑或是由于系统的运行环境引发?
或者,对于一个即将发布到现场给用户使用的应用,开发人员可能会想要知道当大量用户访问这个系统时,系统会不会出现某些故障,例如,是否存在由于资源竞争引起的挂起?是否存在由于内存处理等问题引起的系统故障?
因此,对开发人员来说,单纯获知系统性能“好”或者“不好”的评价并没有太大的意 3 / 28
义,他们更想知道的是“哪些地方是引起不好的性能表现的根源”或是“哪里可能存在故障发生的可能”。
表1-2给出了开发视角的软件性能关注内容。
表1-2 开发人员关注的性能问题
开发人员关心的问题
架构设计是否合理 数据库设计是否存在问题 代码是否存在性能方面的问题 系统中是否有不合理的内存使用方式 系统中是否存在不合理的线程同步方式 系统中是否存在不合理的资源竞争
问题所属层次 系统架构 数据库设计
代码 代码 设计与代码 设计与代码
1.1.4总结
以上我们描述了3个不同层面上的软件性能关注点,由此可见,不同的对象对软件系统性能的关注是有着显著的差异的。从项目管理的角度,以我们的系统干系人来分析,大部分用户对性能的理解属于“用户视角”,项目的维护人员或是用户方的项目经理一般会从“管理员视角”来看待软件性能的问题,而项目的创建者——开发人员(包括设计人员)自然就是从“开发视角”来关注软件性能了。
因此,对软件性能测试来说,在不同的层面上要求我们关注不同的内容:从直接体验的用户的角度来说,表现为软件系统对用户操作的响应时间;在系统或是管理员的关注层面,我们还需要从软件的性能表现分析系统的可扩展性、并发能力等指标;最后,从最贴近软件的创建者——开发人员的角度来说,还需要为软件性能问题进行定位,了解性能的制约因素和引起性能问题的关键原因。
1.2 软件性能的几个术语
接触过软件性能测试的人,会经常听到这样一些词汇:响应时间、并发用户数、吞吐量、性能计数器,在使用性能测试工具进行测试时,还会接触到“思考时间(Think Time)”的概念,那么,这些术语的确切含义究竟是什么呢?
4 / 28
本节重点介绍以上的各个术语。
1.2.1 响应时间
在