Jmeter学习笔记
前言
- 学习环境为本地演式环境,如果需要,请在评论区留言
JDK安装及配置
Jmeter安装
- 点击下载: Jmeter历史版本
本地演式环境
- 打开文件目录运行cmd,执行以下命令:java -jar postman-API.jar
- 本地IP:192.168.6.168
- 端口:8085
# Jmeter界面调整
## 界面调整
- 选项—放大/缩小
## 参数调整
- 找到
jmeter
目录,打开文件:D:\Program Files (x86)\apache-jmeter-5.6\bin\jmeter.properties
- 参数调整,并保存
重启JMeter
,效果才能生效- 选项—外观—Windows
- PS: 参数前的#号要删除,否则会不会生效
### 汉化
language=zh_CN
### 界面比例
jmeter.hidpi.mode=true
jmeter.hidpi.scale.factor=2.5
### BodyData消息体
jsyntaxtextarea.font.family=Hack
jsyntaxtextarea.font.size=35
### 工具栏大小
# 默认大小:22x22
# 可用大小:22x22, 32x32, 48x48
jmeter.toolbar.icons.size=48x48
### 左侧树结构
默认大小:19x19
可用大小:19x19, 24x24, 32x32, 48x48
jmeter.tree.icons.size=32x32
测试计划
- Jmeter测试计划其实就是一个测试用例,测试用例中包含了操作步骤,比如先登录,才能查看个人信息
线程组
- 线程组:简单来说就是一个线程集合,线程组的出现是为了更方便地管理线程。
- setUp线程组:最优先执行的线程组(相较于普通线程组而言)
- tearDown线程组:最后执行的线程组(相较于普通线程组而言)
取样器
- 定义: 用于发送请求
HTTP请求
- 测试计划—线程组----HTTP请求!!注意是在组程中添加HTTP请求!!
- 必备填写信息如下图所示,根据实际需求进行填写
结果树
- 会将请求结果以树的形式展示出来
- 线程—>监听器—>查看结果树
- 返回的是token信息与接口需求文档要求符合
HTTP请求默认配置
- 如果多个HTTP请求存在大量相同的配置,可以通过HTTP请求默认值简化HTTP请求相关的配置
- 测试计划—>配置元件—>HTTP请求默认配置
HTTP信息头管理器
- HTTP信息头管理器:当我们发送的请求,需要传递JSON数据,则需要设置传递数据的格式
Content-Type: application/json;chartset=utf-8
定时器
固定定时器
- 定时器执行优先级高于取样器
- 说明:在每一个线程执行前延迟固定时间
- 当前接口运行两次,且每次会间隔5秒,如图所示
- 测试计划—>定时器—>固定定时器
测试活动
- 说明:在每一个线程执行后延迟固定时间
- 线程组—>取样器—>测试活动
接口数据关联
使用场景
- A接口/B接口:登录接口/个人信息接口
- 要求:B接口需要使用到A接口返回的token数据,才可以查看到个人信息接口的数据
- 解决方法:提取返回数据中的token数据
全局变量
-
使用元件:用户定义的变量,适用场景:不经常变动的数据,如端口等
-
测试计划—>配置元件—>用户定义的变量
定义全局变量
调用变量
- ${var}
局部变量
- 注意:是在同一个程线程组使用
提取变量
- 线程—>后置处理器—>JSON提取器,将token的值提取出来
$.token
通过调式取样器查看,是否提取token成功
- jmeter 属性:是否查看jmeter属性,默认不展示(false)
- jmeter variables:是否查看运行时变量,包括自定义变量、脚本运行时添加的变量等,默认展示(true)
- 系统属性:是否查看系统属性,默认不展示(false)
- 查看取样器是否提取出指定的值,且该值只能当前线程中使用
调用变量
- 注:登录请求接口和个人信息接口都在用户组1内,提取的变量可以在同一个线程组内使用!!!!
- 调用语法:${var}
- 如果不是在同一个线程组内,则不能直接进行调用,需要将提取的变量设置成全局的变量才可以进行调用
跨线程全局变量
- 上面讲了,局部的变量只能在同线程内使用,不能跨线程使用,有些不符合实际工作需求,就需要跨线程组使用
- 登录用户和
提取数据
- 登录用户,使用json提取器提取token
函数助手设置全局变量
- 按图操作
- 登录线程创建BeanShell取样器,将值放入
调用变量
- 在其它线程中调用该属性
${__property(login_token)}
- 自行替换括号内的值:login_token
- 查看请求结果
json提取网
CSV参数化
- 参数化:动态的获取、设置或生成数据,是一种由程序驱动代替人工驱动的数据设计方案,提交脚本的编写效率以及编写质量。作用和HTTP默认值,类似,都是为了简化书写,通过参数化,我们可以较少配置
- 以下四种方式实现参数化:
- 用户定义的变量
- CSV数据文件设置(常用)
- 用户参数
- 函数
方法①:用户定义变量
- 测试计划—>配置元件—>用户定义的变量
- 适用于不经常变动的变量,如IP地址/端口
- 现在我们的取样器中的请求路径, 相当于配置了一个全局变量
- 使用
${url}
替代192.168.6.168
- 使用
${port}
替代8085
端口号
- 使用
方法②:CSV数据文件设置
- 先准备一个CSV数据文件,注意该文件一定要是UTF-8编码格式,否则会出现乱码现象(详情参考信息头管理器)
- xxx.csv和xxx.txt两种文件后缀格式都可以,但要求内容必须是csv格式内容!!!
CSV格式展示
测试计划—>配置元件—>CSV Date Set Config
- 配置CSV数据文件设置:(变量名要和上cvs.txt文件中数据保持一致)
方法③:函数
- 目前取出的token只能在线程组内使用, 要想跨线程组调用,需将他存入系统变量,这里需要使用Beanshell后置处理程序
- 将token值在jmter中进行调用,调用语法:$Variable
- 这时需要用到jmeter内置函数__setProperty(tool–函数助手对话框–选择setProperty)
- 测试计划—>添加—>非测试元件—>属性显示
- 执行后再查看token是否设置全局变量成功,如图所示则表示成功
调用变量
语法: ${var},即${token}
断言
- 断言就是对响应结果进行判断,是否符合预期,这就是断言
- 界面中是所有断言方式,根据实际实际选
JSON断言
- 重点:你要检查哪个请求,就把断言放在对应的请求下一级
- 当前JSON断言是对应的个人信息
- 错误则会弹出错误信息
- 线程—>断言—>JSON断言
- 断言结果查看
录制
- 录制的原理,就是通过抓包的机制,类似同Fiddler一样
- 当前使用的火狐浏览器
配置录制环境
-
Jmeter提供了录制浏览器的请求方法,使用的代理抓包机制
- 确保HTTP默认请求服务器IP和录制IP一致
- 在整个测试计划下面添加HTTP代理服务器
- 在线程组添加逻辑控制器—录制控制器
- 常用过滤器设置
- ..(js|css|PNG|jpg|ico|png|gif).
火狐浏览器配置
- 其它浏览器请自行查看
开始录制
- 点击启动按钮,开始进行录制
- 自定义事务名称
清除录制记录
- 选择录制控制器,点击右边的Clear,如图所示
执行压力测试
界面执行
- HTTP请求—>监听器—>聚合报告
- 查看聚合报告
执行命令
- 使用命令行执行命令
D:\Program Files (x86)\apache-jmeter-5.6\bin\jmeter -n -t 脚本路径及名称.jmx -l 日志名.jtl
D:\Program Files (x86)\apache-jmeter-5.6\bin\jmeter -n -t 脚本路径及名称.jmx -l 日志名.jtl
统计报表
- 日志名命令行运行结果的名字一致
- 注意:-o后面的目录一定要不存在或内容为空,否则会报错
- report为目录
D:\Program Files (x86)\apache-jmeter-5.6\bin\jmeter -g 日志名.jtl -o report