性能测试-学习笔记
一、性能测试基础
1、性能测试导论
1⃣️ 什么是(软件)性能测试
==> 范围:不包括硬件的性能
==> 实质:通过接口层向服务器发起请求,测试服务器的性能
==> 定义:用一定的技术工具,找出或验证某些性能指标值的测试
2⃣️ 与功能/自动化测试的区别
==> 功能/自动化测试都是为了验证功能是否正常、能不能够满足需求,断言实际结果是否与预期结果一致。
==> 而性能测试是模拟n多个用户来访问服务器,在可接受的时间范围内是否有正常的响应结果,不需要这n多个用户都得到准确的结果。
3⃣️ 什么情况下需要用工具找出性能指标值
==> 某个接口从来没有做过性能测试时,需要通过工具获取性能指标值作为基准值
4⃣️ 常说的性能测试相关概念区别
广义(软件)性能测试
==> 负载测试:逐步增加并发用户数,发起请求,找到系统的拐点区间。
关键词:逐步增加
驱动:并发用户数
目的:找到服务的“天花板”
==> 压力测试:通过一定的并发用户数,持续较长时间向服务器发起请求,查看服务器的稳定性(实际上是 稳定性测试)
关键词:比较大的压力 + 比较长的时间 * 24
驱动:并发用户数(一般选取服务器可承受的最大并发用户数的40%以下)、持续请求时间(一般选取夜间 运行12h)
目的:查看服务器的稳定性
==> 压测:不等于压力测试,而是负载测试(得出性能指标区间)+性能测试(得到准确的各项性能指标值),可能还会有压力测试。
5⃣️ 性能测试的前提
==> 性能测试的必要性研究,即关键项评估(哪些是需要做性能测试的,哪些是不需要的)
==> 可测性,可以量化为性能指标值
6⃣️ 性能测试的(基本原则)
==> 先单接口,再多接口,然后多接口构成业务/模块,然后多业务混合,然后系统,最后全链路
7⃣️ 性能测试的必备条件
==> 独立的服务器:一旦出现不稳定情况/宕机时,不会影响其他工作人员的使用
==> 独立网络:性能测试时会有大量的数据请求,导致占用大量的带宽,带宽占用过多,会影响其他工作人员的工作(尽可能使用有线网络进行,无线网络不稳定)
2、性能测试的主要指标
1⃣️ 响应时间
==> 从发起请求到收到响应到时间(=网络传输时间+服务器处理时间)
==> 网络传输时间:1)客户端发起请求到服务器接收到请求的时间、 2)服务器将响应返回到客户端的时间
==> 服务器处理时间:1)服务器处理请求的时间、 2)服务器与数据库服务器交互的时间
2⃣️ 并发
==> 狭义:同一时间做相同的事情,如同时发起相同请求
==> 广义:同一时间,做不同的事情(混合场景),如同时发起不同的请求
3⃣️ 并发数
==> 单位时间内向服务器发起请求的用户数(virtual user)
4⃣️ 并发用户数
==> 用于模拟真实用户向服务器发起请求的性能测试虚拟用户数量
==> 系统用户数:只要访问过系统的用户,可能包含一次性访问的用户
==> 在线用户数:当前正在访问系统的用户,不一定有压力(可以不操作,不发起请求,发起请求时才算作并 发用户数)
5⃣️ 服务器处理能力TPS
==> 服务器每秒通过事务数,是最主要的性能指标(综合指标,体现服务器的综合能力)
6⃣️ 资源利用率
7⃣️ 网络传输情况,如吞吐量、吞吐率等
==> 衡量网络的重要指标
==> 吞吐量:事务数
==> 吞吐率:数据量
3、性能测试工具
1⃣️ Jmeter
2⃣️ lr
3⃣️ 自研+python+locust
二、Jmeter环境配置与脚本制作
1、脚本录制:
1⃣️ 通过代理服务器方式录制脚本:使用的是电脑自身的代理
2、参数的引用
1⃣️ 创建被引用参数
添加随机变量:
点击生成后,就会自动复制函数字符串,可以在定义变量的地方使用
===> 用户参数在启动时会获取一次值,此后在运行过程中每次使用该参数都会动态获取一次值。
2⃣️ 引用创建参数
三、Jmeter脚本制作与优化
JSON提取器:用于提取响应json中字段的值
json提取式:$.节点名称 ==> 绝对路径
==> 可以在察看结果树中选择JSON Path Tester,书写表达式进行测试是否能提取到值
如果想要提取出值后存储,以防后续断言或其他地方用到,可以在该请求取样器上添加后置处理器-JSON提取器
提取单个值时:
当提取表达式有误/未提取到值时:
提取多个值:json提取式用英文;隔开,如 $.code;$.msg ,此时变量名也需要多个,也是用;隔开,默认值均一一对应,match No填写为0或1或0;0或1;1
match No为1;1时:
match No为0或0;0时:
match No为1时:
json提取式还可以采用相对路径的写法:$..节点名称 ,用于提取多个值,此时match No为-1
正则表达式提取器:左边界(正则表达式)右边界
提取多个时,没有特定的分割符,需要通过正则来过滤不需要匹配的字符
CSV数据文件设置:
添加:
使用:支持 txt 或 csv 格式的文件
多个变量用英文,分割 分别表示第一列,第二列…的变量
四、Jmeter场景执行与分布式
1、普通性能测试场景设置:
线程组配置项:
1⃣️ 线程数
2⃣️ Ramp-up时间
3⃣️ 是否循环:1)不勾选循环,则要设置执行次数
2)勾选循环,则需要在调度器中配置执行时间,如果不配置则会一直执行下去,直至手动停止
4⃣️ 调度器配置:1)
2、负载测试场景设置:
需要安装插件Plugin Manager,然后搜索jpgc 安装
1)阶梯场景
a、创建负载测试线程组:测试计划右键 - 添加 - jp@gc stepping thread group
b、数据配置:
c、创建监听器
d、分析
2)波浪场景
a、测试计划右键 - 添加 - jp@gc ultimate thread group
3、压力测试场景设置:
服务器监控:ServerAgent
启动服务:sh startagent --udp-port 0 --tcp-port 2233 建议的使用方式,去掉udp端口,更改tcp端口号
防火墙配置:
查看服务器状态:systemctl status firewalld
防火墙添加开放端口:firewall-cmd --permanent --add-port=2131/tcp 再 firewall-cmd --reload
五、Jmeter分布式与持续集成
分布式配置:
前提:
jmeter一致性:
1⃣️ 分布式的机器的jmeter版本要一致
2⃣️ jdk 大版本要一致
3⃣️ 插件 要一致
4⃣️ 在同一个局域网
5⃣️ csv
===> 直接将本机的jmeter安装包、插件及性能测试脚本一起打包后放置到助攻机上
===> 如果助攻机是Linux系统,则需要修改jmeter.properties文件
==> server_port
==> server.rmi.port
==> server.rmi.ssl.disable=true
==> 启动:jmeter-server.bat -Djava.rmi.server.hostname=助攻机ip
==> 配置防火墙:systemctl stop firewalld.service
六、Jmeter性能分析与性能测试流程
(未完,待更新细节)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!