最近面试发现很多人张口闭口就说会性能测试,薪资也要得死贵死贵的。然而一问三不知,不懂原理,想要成为一个合格的工程师是很难,真正的会性能测试的测试工程师必须掌握以下这些内容,希望对大家有帮助!
一、性能测试的目的
首先,先来明确一个问题,我们为什么要给产品/软件等做性能测试?
时下,市面上绝大多数的软件产品,都是分布式应用。这就产生了一些有意思的现象:开发的产品在少量用户使用时,可能不存在问题,一旦用户多起来,就容易出现系统瘫痪等多种问题。
那么,为什么会出现这种情况呢?这是由于用户的使用数量、用户场景的不确定性造成的。当并发用户数量超过负载量,系统就会陷入崩溃状态。由此可见,对新开发的产品做性能测试是非常重要的。它能帮助我们了解系统可承受的并发用户数量,带宽、cpu、内存、硬盘速度等。
二、性能测试的内容
性能测试主要包括以下几个方面的内容:负载测试、压力测试、容量测试等。
负载测试:不限制软件的运行资源,测试软件的数据吞吐量上限,以发现设计上的错误或验证系统的负载能力。目标是确定并确保系统在超出最大预期工作量的情况下,是否能够正常运行。
压力测试:也称为强度测试。通过模拟实际应用的软硬件环境,及用户使用过程的系统负荷,长时间或超大负荷地运行,来测试被测系统的性能、可靠性、稳定性等。
容量测试:可以看作是系统性能指标中,特定环境下的特定性能指标,即设定的界限或极限值。
三、性能测试评价指标
说了这么多,下面就要对性能测试的指标做评价了。
从用户的角度来说,一般响应时间<2秒,就属于流畅的体验;如果响应时间>10秒,则要考虑改进相应速度的问题;
从产品的吞吐量来说,我们需要关注硬盘IO(读写)、网络IO(上行下行带宽)、cupIO、服务器的处理能力、客户端的打开页面数量等。
另外,我们还需要了解用户打开页面、登陆服务器、实现消息发送等某一动作的事务处理能力。
四、性能测试关注点
——响应时间快慢,服务器端的处理速度
——服务器端的使用情况
——数据库端的资源使用情况
——最大用户访问数量
——同时处理最大业务数量
——考察系统能否支撑7x24小时运转
——内存资源、线程资源能否正常回收
——代码,算法,sql语句设计是否合理
——整个系统的稳定性,可恢复性
五、性能测试的核心原理
1)基于协议(前端、后端的通信机制),基于界面(与前端的交互),基于代码(后端);
2)基于网络的分布式架构:基于网络协议去模拟用户发送请求等;
3)基于多线程:模拟多线程操作,多人同时操作,模拟大负载量;
4)基于真实场景:模拟真实的网络环境,用户操作时间不确定性,操作不确定,得出数据的准确性也存在差异。场景不对,数据也不一定可用。
六、代码实现性能测试
针对某一功能做性能测试,可以通过论坛的登陆以及发帖(post协议,多线程这两点)、登陆操作、发帖操作(涉及协议)等,并采用多线程同时操作。
七、LoadRunner测试工具的使用
Loadrunner的四个部件,分别是指:
1)Vuser generator:开发性能测试脚本;
2)Controller:提供多线程并发等操作;
3)Ananlysis:结果分析;
4)Load generator:负债生成器(controller 里面的一个主键)
当然,现在很多企业也在用JMeter工具做性能测试,因为这个工具是开源免费的,小巧易用!