性能测试

时间:系统处理请求的响应时间
资源:系统在运行过程中,系统资源消耗的情况

1、什么是性能测试

是使用自动化工具,对软件各项性能指标进行测试和评估的过程

2、性能测试的目的

评估当前系统的能力
寻找性能瓶颈,优化性能
评估软件是否满足未来的需求

3、什么项目适合性能测试

基础功能要完成,并且保证系统是处于稳定的状态
项目用户人数比较多,或者并发量比较大
有单独的测试环境(性能测试环境)

4、性能测试分类

负载测试
稳定性测试
并发测试
压力测试

5、负载测试

通过逐步增加系统的负载,确定满足系统性能指标(比如:响应时间等)情况下,找出系统能够承受的最大负载量
作用:系统最大负载量达到用户要求时,系统才能正式上线

6、稳定性测试

在服务器稳定运行(用户正常的业务负载下)的情况下长时间测试(1天----1周),并最终保证服务器能满足线上业务需求。
作用:系统在用户要求的业务负载下运行达到规定时间时,系统才可以正式上线使用

7、并发测试

在极短的时间内,发送多个请求来验证服务器对并发的处理能力
适用场景:抢红包,秒杀,抢购

8、压力测试

在强负载下的测试,查看系统在峰值情况下是否功能隐患,系统是否具有良好的容错能力和恢复能力
负载和压力测试
负载测试是以并发维度出发,在不断增加并发的情况下,查看系统的性能指标
压力测试是以访问时间维度出发,在并发量一定的情况下不断增加访问时间的情况下,查看系统的性能指标。

并发测试:同一时间,同一时刻,同时请求,查看在这个时间内服务器的运行情况

9、性能指标

响应时间

从客户端发送请求,到客户端收到服务器响应的总时间

并发用户数

同一时间向服务器发送请求的用户数

吞吐量

指单位时间内处理客户端请求数量。

TPS(每秒事务数)

指系统每秒能够处理事务和交易的数量 tps= 并发数/平均响应时间

QPS(每秒查询率)

一台服务器每秒能够响应的查询次数

PV(点击数)

页面访问量,用户访问一次计算一次 (点击页面必须发送请求才会计算)

UV(独立访客数)

访问页面的一台客户端为一个访客,相同的访客只会记录一次

错误率

指系统在负载情况下,失败的业务概率

10、资源利用率

cpu使用率
不高于 75%-85%
内存(大小)使用率
不高于 80%
磁盘IO(速率)
不高于 90%
网络(速率)
不高于80%

11、性能测试流程

  1. 性能测试需求分析
    2. 性能测试计划及方案
    3. 性能测试用例设计
    4. 性能测试执行
    5. 性能测试分析和调优
    6. 性能测试报告总结

12、需求分析

测试范围,测试目的
测试人员分工
测试时间安排
测试的方法

13、性能关注指标

cpu 使用率 不超过75-85%
内存 使用率 不超过 80%
磁盘IO 使用率 不超过90%
网络 不超过 80%
响应时间 单接口(不超过 500ms) 混合接口 不超过2 s
错误率 为 0
吞吐量 (tps)大于或等于需求规定
在规定时间内达到规定的pv量
宽带使用率符合规定

14、jmeter运行 (非 GUI模式)

GUI 会消耗系统服务器部分性能,导致压测不准确,或者导致 GUI界面卡死,部分请求会死掉,压测被迫中断。
非GUI模式是通过命令去触发脚本,并且不用实时渲染数据,这样减少了对资源的浪费
准备:
1. 需要有压测脚本
2. 需要有报告存放地址(空文件夹)
3. jtl 文件存放地址 (电脑路径+文件.jtl)
命令:
在 jmeter的bin路径下
jmeter -n -t "压测脚本" -l jtl文件 -e -o 报告地址
-n 非GUI模式运行
-t 执行测试文件脚本位置
-l 指定生成测试结果存放文件
-e 测试结束后生成测试报告
-o 指定测试报告位置

15、性能瓶颈

网络宽带
系统瓶颈 (cpu 内存)
数据库瓶颈
应用本身问题(如 项目问题)
应用服务瓶颈 (如 nginx apache linux)

16、性能调优

一般优化都是测试提建议,开发或者运维调优
像 硬件问题,网络宽带,系统瓶颈,服务瓶颈这些 提给运维
像 数据库,代码逻辑复杂,程序本身的问题 提给开发去修复

注:性能一般数据库出问题的可能性较大,一般都是 用 非关系数据库解决,或者读写分离



程序本身代码复杂,可以让 开发优化算法,优化代码,优化设计,参数调优,时间换空间,空间换时间

17、TPS上不去(压测过程中)

网络宽带
硬件问题(cpu 内存)
项目逻辑复杂,项目本身问题
系统架构
数据库问题
压测脚本配置问题
==通信连接机制问题(cdn )内容分发网络==
连接池过少,造成请求等待
垃圾回收机制问题

18、性能测试测试的哪一种策略

压力测试

19、压力测试场景

1. 全链路

2. 单场景压测

    1. 下单

    2. 领取优惠券

19、压测是长压还是短压

短压 一般都是 活动时长 0-30分钟 0-60分钟

20、压测线程多少

注册用户 % 20 ====在线用户
在线用户 %30 ===== 线程(并发用户数)
500
阶梯式压测,最终压测到的500

21、分布式压测

并发量较小的情况下不采用分布式压测
jmeter最大 支持1000的并发,超过1000并发考虑分布式压测
一个主控制机然后连接到其他多个执行机进行分布式,把执行机的ip 配置到对应的文件里面,然后远程启动执行机进行压测
压测时间 : 30分钟
线程数: 500
pv: 90万+
uv: 2000
tps: 180----250

22、性能拐点

指的是当并发量达到一定的数量,平均响应时间,tps不增反降,当前并发数就是该测试的拐点。

23、性能测试流程

首先先进行需求分析,把需要压测的非功能点整理出来,因为高并发会影响公司同事的正常工作,需要有单独的性能测试环境,和线上环境保持一致,接下来准备压测的脚本编写,使用jmeter工具,配置压测线程组 http请求、tps折线图、响应时间折线图、聚合报告、查看结果树,配置压测策略,配置阶梯式压测逐步增压,知道达到或者超过我们的预期,之前我们压测20分钟,压测到500
在压测过程中也会出现问题,压测到300的时候压测的时候压不上去,当时tps达不到我们的预期,通过调优的方式解决,最后压测到500
在压测过程中我还会使用top、iftop、vmstart、iostart去关注服务器的cpu、内存、磁盘情况,如果有问题我会暂停压测,我们的cpu和内存使用率不能超过80%,最后压测完生成测试报告,报告主要分析的有:响应时间是否在我们的预期内,单线程不超过500ms,多线程不超过2s,请求错误率为零,tps是否等于或者大于我们的需求规定内,带宽是否符合规定,是否在规定时间内达到一定的pv量,这就是性能测试的流程。

24、性能测试出现什么问题

性能测试要求达到500的并发量,但是压测到300的时候就压测不上去,tps也达不到我们的预期,当时进行瓶颈分析的时候,认为是项目瓶颈,当时数据库响应过慢,因为当时只用了MySQL数据库,每秒只能处理2w条左右数据,解决的方案是:加入一个非关系型数据库redis,每秒可以处理10w条左右的数据,redis是将数据存放当缓存中,速度比较快,调优之后,再次压测,指标都达到了我们的预期。

25、性能拐点

并发量达到一定的数量,平均响应时间,tps不增反降,当前并发数就是测试的系统性能拐点。

26、测试计划

测试范围 测试目的 测试人员 人员分配 任务分工 测试时间安排 测试的方法