性能测试需要掌握的知识:
1、性能测试工具
2、操作系统(windows,Linux(CPU,磁盘,网络,内存))
3、编程语言(java简单代码(jvm))
4、网络知识
5、数据库(mysql、Oracle、redis、mongoDb)
6、中间件(Nginx,Tomcat)
7、架构(可以从项目的数据流向开始了解)
性能测试关注的常用指标(重点)
1、并发
2、并发用户数
3、事务
4、响应时间
5、TPS
6、吞吐量
7、点击率
8、资源利用率
性能测试基础:
一、什么是软件性能测试
性能测试是指被测系统,在一定的负载下运行,监控系统的各项指标,是否符合需求(指标,指的CPU,内存,事务响应时间,等)如果不符合,就发现了系统的性能瓶颈
衡量指标有俩个方面:响应时间 和 及时处理能力
二、性能测试的目的
1、评估系统处理能力:验证系统处理能力是否达到规划时的水平
2、发现系统的性能瓶颈:某个接口响应时间是否很长,tps很低,硬件方面是不是可以支持
3、验证系统稳定性和可靠性:长时间的测试会不会导致内存溢出
4、系统调优:重复执行性能测试,来验证系统调优是否取得预期结果
问题分析:
中间件:优化连接数(Nginx,tomcat)
tps低:需要看服务器资源使用情况,如果资源使用情况很低,那么一般都是连接数导致的,需要调大你的连接数(包括中间件的连接数,数据库的连接数),
如果时资源使用很高,需要定位是哪个进程导致的
三、性能测试方法
常规性能测试:a点到b点的性能测试,指以系统预期性能指标为前提,对系统不断增加压力,以验证系统能否达到预期性能。
负载测试:不断的增加系统的并发用户数(10-30-50),给系统不断的增加压力,直到性能指标(例如响应时间)超过预期值,或者系统已达到饱和状态
负载测试主要目的:是找到系统处理能力的极限在哪里
压力测试:负载一定的情况下(例如100),持续的运行一段时间(例如n*24小时),来验证系统的稳定性
四、性能测试的步骤
性能测试的时候,先做单接口的性能测试场景,方便定位性能问题,
再做混合场景的性能测试,看有没有新的性能问题
五、性能测试应该关注的指标
用户关注的:系统的响应时间
响应时间的组成:网络( N1+N2+N3+N4)+服务器(A1+A2+A3)
测试(管理)人员关注的性能点:
性能关注点 | |
应用服务器/数据库服务器资源使用是否合理 |
资源利用率 |
系统能否实现可扩展 |
可扩展性 |
系统最多支持多少用户 |
系统容量 |
系统最大业务处理能力 |
tps(每秒服务器能够处理的请求数) |
系统性能可能存在的瓶颈在哪里 |
数据库慢查询等 |
更换哪些设备能够提高系统性能 |
cup核数加大,内存加大,固态硬盘等,特殊节日堆服务器等 |
稳定性,能否支持7*24小时的业务访问 |
一般跑8小时,12小时 |
开发人员关注的性能:
架构设计是否合理 |
系统架构 (架构数据流向) |
数据库设计是否合理 |
数据库设计(监控是不是有慢查询) |
代码是否存在性能问题 |
代码(多个事务一起跑) |
代码是否存在不合理的内存使用方法 |
代码(监控内容是否有内存溢出) |
性能测试工具对比:(100以上均算大并发)
LR | jmeter |
专业化的工具,需要购买序列号,或者用破解版(国内目前可用lr11) |
开源的性能测试工具 |
学习成本低,只需学习三大部分 | 做一个请求就需要设计很多插件 |
脚本:lr支持录制,但不建议录制(对浏览器版本依赖强,可能录制不成功) | 录制功能需要借助badboy,不建议录制 |
报表:自带的监控信息很全 | 需要自己装插件 |
大并发时数据比较准确 | 大并发时数据不是很准确 |
支持线程和进程 | 只支持线程,不支持进程 |
数据库处理比较麻烦 | sql处理很方便 |
术语解释:
并发,分为狭义和广义俩种并发:
狭义并发:所有用户在同一时间请求同一接口
广义并发:多个用户在同一时间请求不同的接口
在性能测试中,一般时先进行狭义并发,再进行广义并发
性能测试的时候,先做单接口的性能测试场景,方便定位性能问题,再做混合场景的性能测试,看有没有新的性能问题
并发用户数:
系统用户数:注册过系统的所有用户,包括每天的活跃用户数以及僵尸用户数
在线用户数:登录系统的用户,但不一定会对服务器产生压力,例如:有N个用户状态为在线状态,但是并不一定都会有请求,对服务器造成压力
并发用户数:对服务器产生压力的用户,例如:可能在线的N个用户中,只有20%的用户对服务器产生了压力,也就是说这个接口只有20%的用户是并发用户