001、性能测导论
一、性能测试导论
软件性能测试:是用一定的技术工具,找出或验证 某些性能指标值的测试。主要是通过接口层向服务器发请求进行测试 。
工具: 模拟多个人向服务器发起请求。主要介绍Jmeter 。
相关概念:
a、负载测试:逐步增加并发用户数,发起请求,找到拐点区间 。
比如:用Jmeter模拟90个用户时能正常运行,模拟100个用户时出现异常,然后可以通过 90 +1 或 +2 逐步找到拐点区间。逐步加并发用户数,找到 并发用户数的 拐点区间 ;
b、压力测试:通过一定并发用户数,持续比较长的时间请求,检查服务器的稳定性 。 比较大的压力 + 比较长的时间 * 24 ;测试服务器稳定性 ;
一定并发用户数取值范围:一般取最大用户数的40%以下; 例如系统最大承受的并发数是100,那我们取20、40个并发数,逐步递增来进行压测; 相反,如果直接取95、97处于临界点,系统很容易就出错,虽然我们能很快的发现问题,但这并不是我们想要的,我们要的是在多大的并发用户下系统的稳定性 。
比较长的时间取值范围:一般而言取几个小时,12个小时,24个小时; 对于大型企业系统,需要更长的时间(*24小时)来测试,24小时的倍数。
c、性能测试 :通常收集所有和测试有关的所有性能 。
举例:
负载测试:也是性能测试,但是他是在不同的负载下的。如:在50公斤、100公斤……等情况下,你跑100米需要花多少时间?
性能测试:表示在一个给定的基准下,能执行的最好情况。例如,在没有负重的情况下,你跑100米需要花多少时间(这边,没有负重是基准)?
压力测试:是测试在一定的负载下系统长时间运行的稳定性,尤其关注大业务量情况下长时间运行系统性能的变化(例如是否反应变慢、是否会内存泄漏导致系统逐渐崩溃、是否能恢复);压力测试是测试系统的限制和故障恢复能力,它包括两种情况:
稳定性压力测试:在选定的压力值下,长时间持续运行。通过这类压力测试,可以考察各项性能指标是否在指定范围内,有无内存泄漏、有无功能性故障等;
破坏性压力测试:在稳定性压力测试中可能会出现一些问题,如系统性能明显降低,但很难暴露出其真实的原因。通过破坏性不断加压的手段,往往能快速造成系统的崩溃或让问题明显的暴露出来;
负载测试的目标是测试在一定负载情况下系统性能(不关注稳定性,也就是说不关注长时间运行,只是得到不同负载下相关性能指标即可);实际中我们常从比较小的 负载开始,逐渐增加模拟用户的数量(增加负载), 观察不同负载下应用程序响应时间、所耗资源,直到超时或关键资源耗尽,这就是所说的负载测试,它是测试系统的不同负载情况下的性能指标。
领导说的压测一般是指:先用负载测试找出拐点区间,然后根据这个值进行性能测试得到精确的性能值,最后发出性能测试报告,完成任务。(负载测试 + 性能测试 = 性能测报告) ,负载—>找区间,性能—>找具体的指标值 。 也可以是:负载测试 + 性能测试 + 压力测试 = 性能测报告 。 简单一点说,领导要的是主要的全部。
二、性能测试的必要性研究——关键评估项
1、主管部门、监管部门要审查性能报告;
2、涉及生命财产安全的项目;
3、大型新系统;
4、核心系统;
5、架构调整;
6、业务剧增(如:电商项目,搞活动);
7、重大缺陷修复;
以上情况有必要做性能测试。
如果访问量太少,做性能测试所耗费的资源是划不来的 。所以,不一定非得测试性能。
一般企业,每个接口的并发用户50个差不多了。
三、性能测试得基本原则:
1、首先,单接口,再多接口
2、然后,多接口构成业务、模块
3、然后,多业务混合
4、然后,再系统
5、最后,全链路
全链路,一般的只有互联网前Top10的大厂会做(他们有人力、资金、时间)。一般的企业做业务流即可。
四、性能测试得必要条件:
1、独立服务器。 比如:如果用功能测试的服务器进行性能测试,会影响功能测试无法进行。更不能使用生产的服务器。
2、独立网络。 因为性能测试会有大量的请求,网络上有大量的请求数据传递,会影响其他同事使用网络,所以需要独立网络环境。同时别的同事如果在下载电影等,也会影响我的性能测试结果。
五、性能测试主要指标
并发\并发数\并发用户数
并发:狭义,同一时间做相同事情 ;广义,同一时间做不同事情,混合场景 ;
并发数:单位时间内向服务器发起请求的用户数(虚拟用户数)
并发用户数:用于模拟真实用户正在向服务器发起请求的性能测试 虚拟用户数量 ;
系统用户数:只要访问过系统的用户,可能含一次性访问的用户;处于非登录状态;
在线用户数:当前在线的用户,不一定有压力;登录状态,但没有发起请求;
响应时间:如下图 ;
TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。
TPS处理流程:
Tps即每秒处理事务数,包括了
1、用户请求服务器
2、服务器自己的内部查询等处理
3、服务器返回给用户
这三个过程,每秒能够完成N个这三个过程,Tps也就是3;
QPS基本类似于TPS,但是不同的是,对于一个页面的一次访问,形成一个TPS;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入QPS之中。每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准 。
一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。
如果是对一个接口(单场景)压测,且这个接口内部不会再去请求其它接口,那么TPS等于QPS,否则,TPS不等于QPS。
吞吐量
指在一次性能测试过程中网络上传输的数据量的总和,也可以这样说在单次业务中,客户端与服务器端进行的数据交互总量;
对交互式应用来说,吞吐量指标反映服务器承受的压力,容量规划的测试中,吞吐量是重点关注的指标,它能够说明系统级别的负载能力,另外,在性能调优过程中,吞吐量指标也有重要的价值;
吞吐量和负载之间的关系:
①上升阶段:吞吐量随着负载的增加而增加,吞吐量和负载成正比;
②平稳阶段:吞吐量随着负载的增加而保持稳定,无太大变化或波动;
③下降阶段:吞吐量随着负载的增加而下降,吞吐量和负载成反比;
总结:吞吐量干不过负载!!
a1面积越大,说明系统的性能能力越强,a2面积越大,说明系统稳定性越好,a3面积越大,说明系统的容错能力越好(啧啧,图有点丑。。。)
吞吐率
吞吐量/传输时间,即单位时间内网络上传输的数据量,也可以指单位时间内处理客户请求数量,它是衡量网络性能的重要指标。
通常情况下,吞吐率用“字节数/秒”来衡量,当然,也可以用“请求数/秒”和“页面数/秒”来衡量;
我们在做性能测试时,往往需要考虑应用服务系统的资源利用,对资源的利用需要考虑以下几个方面
(CPU、MEM、IO、Network)