性能测试的脚本录制
性能测试环境:
操作系统:一般公司里面生产环境通常使用Linux(centOS 7),因为:无版权费,最小内核运行(可长时间运行)
环境配置:如果实际工作做性能测试,硬件型号尽量与生产环境一致!!!
服务器数量:集群环境下,不可能给我们同样的环境,但我们可以类推:1台服务器,承载1000/s
数据准备:数据库导出与备份
面试题:如果那在性能测试时,出现脏数据怎么办,该怎么避免?(1、测试前对数据进行备份;2、如果可以自己用代码去生成我们需要的数据)
怎么生成测试数据?
~数据技巧:1、基于已有数据衍生,2、随机生成
~注意:数据的状态分布,比如:造订单数据,订单是有多种状态的, 这时我们需要尽可能的去贴合真是的生产环境
~数据分布决定了我们的数据库层面执行性能
测试功能––Jmeter
插件位置:一般第三方插件放在jmeter文件夹下\lib\ext 目录下
线程:多线程 –– 很多个虚拟人(用户)同时干活
Jmeter的执行流程:单线程下,是有序的,从上到下一个个执行,多线程下上无线的同时干活
测试结果查询:
汇总报告
聚合报告
Transactions per Second 每秒事物处理量
Response Times Over Time 随着时间变化的响应
Active Threads Over Time 随时间变化的活动线程
初级阶段,活用着五个东西基本就能帮助我们找到对应的性能瓶颈
前两个:可以看到最终结果
后三个:可以帮助我们看到对于的过程
基准测试:
收集系统在1个线程中的性能基线,但是为什么线程数 是1
对线程数要求:1是最小单位 系统100%一定能承载
推论:
假设1:基准测试 1线程 吞吐量是100,希望是10000的吞吐量 我只要准备100个线程就够了
假设2: 1线程,模拟了并发量是40/s 如果要模拟4000个并发量,只需要准备100个线程
为什么需要基准测试:给自己一个计算/规划的线索和逻辑
负载测试:
*目的:*是为了发现程序系统的实际处理能力––梯度压测
共有三个阶段:
第一阶段:并发增量 –– 吞吐量增加(正向提升)
第二阶段:并发增加–– 吞吐量不再上升,响应逐渐变长(系统处理不过来,新的请求等待,积压状态)
第三阶段:崩溃––并发增加(吞吐量下降,资源不够用)
以上是比较乐观的场景!!
*极端情况:*第二阶段直接跳过,发生在服务器配置太差,错误率快速上升,吞吐量––持续上升!
为什么会上升?:因为请求已经不执行了,直接报错了,所以返回速度很快
实际场景:
如果要做性能,这种情况下,我们极有可能需要一个流程的!而不是单个接口去做性能
那么问题来了??
1、那把多个接口放在一个行程行不行?
2、不行,如果放一个线程,其中了某一个接口报错了怎么办?性能测试怎么继续?
这里就要设计到了事物问题了
事务问题:
含义:一个流程下,要么一起成功,要么一起失败(因程序异常导致的失败)这种情况叫事务
举例:转账:用户A––用户B 转5000, 计算机流程:用户A 账号-5000,用户B 账户+5000
当转账过程中出现问题比如用户A-5000成功,用户B+5000失败,则一起操作是不成功。
如何使用事务控制器呢?
Jmeter的事物控制器
操作步骤:右键––>逻辑控制器––>事务控制器
使用事务控制器时,有时候需要我们测试人员自己去思考,哪些接口是需要同时一起测的,然后我可以将对应的接口放在同一
事务控制器下
一个功能流程有很多接口,公司有文档时,我们可以根据文档按照接口顺序一一验证,但是很多公司是不会给到测试人员对应的接口的,这种情况我们该如何展开性能测试?
这里我们可以使用Jmeter的接口脚本录制功能去快速找到需要测试的接口
首先:在Jmeter中添加HTTP代理服务
位置:
Http代理服务器––目标控制器:选择线程代理录制的接口请求都存在线程组下,选择事务控制器则代表所有录制的请求放在事务控制器下
我们可以点击启动来运行http录制器
这里还需要注意的是我们录制过程中可能会录制一些我们不需要的东西进来,这时我们可以点击“Requests Filtering”
点击「添加建议排除」,系统会自动过滤数据
点击「启动」,进入录制模式
但是!!!!!这里需要注意,需要开启本机代理否则抓不到接口(jmeter抓包)
在windows系––打开设置––左上角搜索代理––点击在手动设置代理––点击打开––输入ip与端口––点击保存!!!
注意⚠️像https请求的话,是需要安装证书的(安装证书:找到你的那个请求IP,下载证书––在PC端双击一下,就可以了)
好到现在我们的jmeter已经可以连接本地并抓去接口了
但是,坑来了不要用谷歌浏览器打开网页,因为谷歌浏览器大多数情况下自带代理
我们可以在IE浏览器打开测试网页,并操作登录-搜索-查看书籍这些操作,然后我们回到Jmeter,可以看到所有我们在页面上操作到的接口都被录制抓取下来了
抓取完后,我们点击停止,然后添加查看结果树,点击运行,可以看到部分接口运行不成功,原因是我们token没有给到登录后的jiek,所以我们需要添加一个json提取器,将token提取出来
提取出来之后我们需要把他放入Http信息头(放入公共区域)
再次「运行」可以看到是运行成功了
如果我们想要这些请求都是一起启动,那我们可以添加事务管理器,将这些接口都移入这个事物中(事务中接口都是同时运行,没有先后)
我们可以把我们抓取到的数据做一个基准测试(将接口都存在事务中)为什么不放在一个事务下,而是放在不同的小事务控制器下,因为事务控制器中只要有一个请求失败,那所有的请求都将不成功
登录可能只做一次,所以我们可以添加仅一次控制器
并将登录事务放进去,这样执行线程的时候登录不会重复执行
这就是一个基础的基准测试
吞吐量控制器:
作用:流量控制,网络资源分配,保证网络的稳定性和公平性
Total Executions 总数模式:在测试期间去限制请求的总次数,如:测试时间是1分钟,总请求次数是120 均匀的发送请求,1秒2次
Percent Executions 百分比模式:根据采样器执行册数的百分比来发送。如:我设置了首页上50,那么这个情况喜爱他会占用总请求的次数百分之50