jmeter使用
# 一、jmeter安装与配置
# 1、jdk安装
Jmeter是基于JAVA的应用,所以需要安装jdk
jdk安装参考:https://www.cnblogs.com/gaobobo/p/10674934.html (opens new window)
# 2、jmeter下载安装
参考:https://www.cnblogs.com/siduoxiaohua/p/11127669.html (opens new window)
# 3、jmeter配置
在jemter bin安装目录下修改jmeter.properties文件:
(1)sampleresult.default.encoding=UTF-8 请求编码
(2)CookieManager.save.cookies=true
# 二、jmeter目录结构简介
jmeter常用的目录主要有bin目录、lib目录
# 1、bin目录
主要包含jmeter的启动文件、配置文件和日志文件等
启动文件:Jmeter.bat/Jmeter.sh
配置文件:Jmeter.properties,一旦修改配置文件,需要重启jmeter才能生效
# 2、lib目录
lib\ext目录,用来存放第三方的组件和插件,包括我们自己编写的二次扩展包
# 三、jmeter常用组件
jmeter常用组件有:测试计划、线程、配置元件、定时器、前置处理器、后置处理器、断言、监听器、逻辑控制器、取样器
# 1、测试计划
# (1)用户定义的变量
用户自定义的全局变量,可以在整个测试用例中使用
使用自定义变量${变量名称}:
# (2)独立运行每个线程组
勾选后,普通线程组之间间按上下排列顺序执行,而非默认的并行
勾选前,每个线程组并行运行,每次执行时的顺序是随机的:
勾选后,线程组按上下排列顺序执行:
在使用时一般默认不勾选
# (3)添加目录或jar到classpath
把jar文件的目录添加到指定的测试计划,关于jar的使用见下文
# 2、线程组
线程组是用来请求接口的,常用的有:线程组、jp@gc - Stepping Thread Group、setUp线程组、tearDown线程组
# (1)线程组
# (一)在取样器错误后要执行的动作
继续:线程出错继续执行
启动下一线程循环:开始下一次循环
停止线程:3个线程循环2次,如果第二个线程出问题,出错的线程停止,继续执行其余线程
停止测试:把线程运行的请求运行完才停止
立即停止测试:立刻停止所有线程
一般默认选择出错后继续执行
# (二)线程属性
线程数:做接口功能测试时一般默认填写1,创建线程要消耗CPU,做并发测试时可以结合目标tps以及rt进行设置,应用处理快可以设置小点
Ramp-Up时间(秒):线程在多少秒内启动,一般默认填写1。如果线程数是100,这里设置为10,表示10秒内启动100线程,但是不一定是每秒启动10个线程:
循环次数:线程循环执行的次数
调度器:勾选后,可以设置持续时间和启动延迟时间
# (2)jp@gc - Stepping Thread Group
阶梯加压,可以设置在多长时间用多少线程压测
# (3)setUp线程组
执行前执行一次,应用场景是初始化数据
# (4)tearDown线程组
执行最后执行一次,做关闭连接、清除垃圾数据等收尾工作
# 3、取样器
取样器中常用的是http请求
http请求中,需要填写协议、IP、端口号、请求方式(POST/GET)、请求路径
参数:Content-Type一般为form,格式如下:
点击添加按钮新增一行,也可以批量粘贴
消息体数据:Content-Type为application/json,格式如下所示:
# 4、配置元件
# (1)CSV 数据文件设置
可以用来定义全局变量,根据变量名称进行引用${变量名称}
文件名称:文件的路径,路径不要包含空格、特殊字符
文件编码:一般选择UTF-8
变量名称:csv文件中每列的名称,如有多列,用英文逗号间隔,如果只有一列,则不加分隔符
忽略首行:如果参数文件中有很多列,为了区分每列,就在首行把列名写上,此时就要选True
分隔符(用'\t'代表制表符):是变量值的分隔符,分隔符就是英文逗号
是否允许带引号?:如果是False,请求中保留引号;如果是True:请求中去掉引号
遇到文件结束符再次循环?:True表示循环,false表示不循环,一般保持默认False
遇到文件结束符结束线程?:值不够,是否停止线程,一般保持默认False,如果设置True,则遇到文件结束符再次循环中设置的True失效
线程共享模式:
a、所有现场:默认值,多个线程组取值不一样,每个线程组内的线程取值也不一样
b、当前线程:多个线程组取值一样,每个线程组内的线程取值也一样
c、当前线程组:多个线程组取值一样,每个线程组内的线程取值不一样
# (2)HTTP信息头管理器
设置content-type、token等,在后续的请求header中会自动带入
# (3)HTTP Cookie管理器
如果登录后有cookie,重定向时没cookie,就又跳转到登录页面,有cookie时添加cookie管理器
# (4)HTTP请求默认值
应用场景:相同的脚本,测试不同的环境(测试环境、开发环境等),填写协议、ip、端口、公共参数等
# 5、前置处理器
前置处理器主要用来做一些请求前的准备工作,比如测试数据的生成
# 6、后置处理器
后置处理器于运行结果数据的提取、处理等,常用的后置处理器有:json提取器、正则表达式提取器、beanshell后置处理器
beanshell后置处理器:
token提取器:
正则表达式提取器:
# 7、定时器
接口请求前等待多少毫秒
# 8、断言
响应断言用来判断接口是否响应成功
常用的断言有两种:响应文本、响应代码
响应文本:判断接口响应数据中是否包含某个字段
响应代码:接口响应状态码,如:200、404、504等
# 9、监听器
常用的监听器:查看结果树、聚合报告
# (1)查看结果树
用于查看接口的请求和响应内容
# (2)聚合报告
用于查看接口的响应时间和tps
# 10、逻辑控制器
# (1)循环控制器
# (2)if控制器
# (3)吞吐量控制器
用于控制混合场景压测时的业务比例
# (4)foreach控制器
例子:提取并打印出www.baidu.com响应结果中所有name值
# 四、jmeter函数助手
# 1、生成随机数
# 2、获取随机时间
# 3、获取当前时间/过去日期/未来日期
当前日期:${__timeShift(yyyyMMdd,,,,)}
昨天日期:${__timeShift(yyyyMMdd,,-P1D,,)}
明天日期:${__timeShift(yyyyMMdd,,P1D,,)}
当前时间:${__timeShift(yyyyMMdd HH:mm:ss,,,,)}
1个小时前:${__timeShift(yyyyMMdd HH:mm:ss,,-PT1H,,)}
20分钟前时间:${__timeShift(yyyyMMdd HH:mm:ss,,-PT20M,,)}
50秒之后:${__timeShift(yyyyMMdd HH:mm:ss,,PT50s,,)}
明天3小时20分钟50秒后:${__timeShift(yyyyMMdd HH:mm:ss,,P1DT3H20M50S,,)}
# 五、jmeter引入java文件
jmeter中使用java文件的场景多用于构造复杂数据,比如MD5加解密、生成身份证、手机号等,java代码可委托java开发帮忙编写
# 六、jmeter接口性能测试简介
# 1、什么是接口性能?
不同的角色关注的点不同:
用户--响应时间的快慢
产品--业务处理快慢
运维--响应时间、资源利用率(CPU、内存、磁盘IO、网络带宽)、稳定性
dba--数据库资源利用率,是否有慢sql、死锁等
开发--响应时间、代码性能
架构师--架构设计是否合理
测试--需要关注以上所有,响应时间快慢、资源利用率、稳定性、数据库、架构、TPS等
# 2、如何理解性能测试
性能测试是指,根据性能需求/指标(响应时间、业务容量TPS、服务器资源利用率)、业务模型(压测时每个业务的比例),设计性能测试方案(包括压测环境、数据、场景、脚本、性能指标、压力策略、监控策略、风险),以合理的线程数连续递增加压,并同时进行监控,根据监控数据找到性能瓶颈、并进行分析、定位、调优,最终得出结论来评估系统的性能指标是否满足业务需求。还要进行强度测试,找到系统的最大容量。
# 3、性能测试中什么是并发?线程、tps、rt之间的关系是什么?
性能测试中通常所说的并发并非jmeter的线程数,而是服务器每秒处理的线程数
线程、tps、rt之间的关系:tps = 处理总请求/并发时间 = 线程数*(1000/rt)
# 4、性能测试的步骤
(1)了解业务场景
(2)性能需求评审,需要压测哪些接口、确定接口性能测试目标、接口业务模型
(3)申请性能测试环境
(4)编写压测方案
(5)编写性能测试用例,准备测试数据、设计业务场景
(6)部署性能指标监控工具
(7)预热测试
(8)执行压测、并监控性能指标
(9)根据监控指标分析定位性能瓶颈、并调优
(10)回归测试
(11)压测报告
# 5、性能测试思考题
# (1)思考题一
假设:牧原肉食平均每天有10000台冷链车外出送货,要监控这10000台车的物流轨迹,要求每秒实时上传车的位置到监控系统(假设不涉及定时任务进行批处理、异步处理)。
请根据以上场景,请提取性能需求
# (2)思考题二
假设:聚爱优选app,目前有500w用户,日活50w。用户在早中晚三个时段集中活跃,每个时段持续20分钟。商品查询业务每天平均请求总量在1000w平均响应时间在2s,下订单业务每天平均总请求量在100w,平均响应时间在3s。当前系统稳定运行。
由于业务快速发展,聚爱优选app用户暴增,业务要求支撑的用户达到5000w,要求测试目前的系统是否能够支撑?如果不能,需要确定当前能够支撑多少用户平稳运行。
请根据以上场景建立性能测试模型、估算性能测试指标