【2017年整理】性能测试工程师面试题.pdf
文本预览下载声明
1.什么是负载测试?什么是性能测试?
负载测试:通过被测试系统不断增加压力,直到性能指标超过预期值或者某种资源达
到饱和状态。
经过这两天查看相关的资料,而且还和同事讨论。得出以下总结:
1 )共同点:两种测试都是量的测试。
2 )区别:压力测试是指被测对象在允许的压力值范围内进行测试。例如:一个 B/S 结构的应用程序,它
允许有 100 个终端访问服务器。当有 10 、30 、60 、80 个终端访问服务器时,程序的反应如何?而负载测
试是指被测对象在超负荷的环境下运转。例如:就拿以上的例子来说,当有 110 或 150 个终端访问服务器
时,程序的反应如何?
对性能测试、压力测试、负载测试的理解
斗胆在此发表一些个人理解与看法,权作抛砖引玉,望各路英雄能各抒己见,不吝赐教。
首先,我们看一下来自百度百科的定义:
1、性能测试:是通过自动化的测试工具模拟多种 正常、峰值以及异常 负载条件来对系
统的各项性能指标进行测试。
2、负载测试:负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐
增加时,系统各项性能指标的变化情况。
3、压力测试:是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供
的最大服务级别的测试。
我在这里简单谈一下我对三个概念的看法。
一、性能测试
性能测试的目的是找到系统在某种条件下的瓶颈, 前提是这种条件在软件或服务的实际
应用中可能发生。 例如百度主页会同时有 10 万人访问, 这是可能的。 因此测试 10 万个 vuser
同时 hit 是有意义的,但是会不会有 10 亿人同时访问 ?显然不会,至少在当今不会,因此测
试的数据量定在 10 亿个 vuser 是无意义的,这种行为不靠谱。因此,在这一点上我们可以
得出结论,具有清晰的、有意义的并且意义确定的预期值是进行一次性能测试的关键要素。
所以, 我们在进行性能测试之前, 首先要明确两个值: 一个是 系统负载预期值, 一个是
系统响应时间的预期值 。有了这两个目标, 才可以使用对系统持续增加负载的方法来观察系
统的瓶颈所在。
那么性能测试就是简单的添加负载测试吗?显然不是。 前面说过, 性能测试的目的是要
找出系统的瓶颈所在,而系统的瓶颈可能存在于各种方面。 在代码方面,比较差的算法、
硬代码多的模块等低效率的代码可能产生瓶颈;在数据库方面,冗余或者复杂的数据可能
产生瓶颈;操作系统方面, cpu、磁盘、 i/o 系统、总线及兼容性等方面可能产生瓶颈;而
在通信传输层面上,交换(路由)的转发效率、网络硬件质量等都可能引发系统瓶颈。对
于以上这些可能引发瓶颈的原因,我们可以进行所谓白盒测试来找到问题的关键。各种层
面上的问题,都有相应的测试工具或测试设备的支持,如果没有合适的工具,也可以自己
进行设计。例如一些 cpu 监控工具、代码检测、数据库事件探查器、 chariot 等,以及网络
分析仪、数据分析仪等通信分析仪器。这些都是性能测试的利器。
我们在性能测试出现瓶颈时, 需要及时的调试对应的系统问题, 但是如果在调试完成之
后,系统表现好了一些, 但是仍然没有达到预期目标, 这个时候我们就应该把目光放在系统
的其他层面上。 由于一个系统是由多个子系统协作的, 因此各个子系统之间有着密切的关联
性。以 web 系统为例,当代码层以及数据库层都进行清洗之后,还可以通过其他途径提高
系统的性能,以突破瓶颈,达到预期目标。
性能测试的另外一个目的是要建立一组被测系统的基准数据, 系统在同样的测试环境与
测试条件下, 表现应当符合或优于基准数据的要求, 否则
显示全部