JMeter
学习视频
JMeter 从入门到精通 (包含作业 / 练习 / 总结 / 回顾)
教程
易百教程:https://www.yiibai.com/jmeter
下载
https://jmeter.apache.org/download_jmeter.cgi
Mac上下载、安装
1 | 安装 brew ,非必需 |
环境
需要安装 JDK 环境「JMeter 由 Java 语言实现」
安装
解压到没有中文路径的目录中
启动
Windows
bin/jmeter.bat
Linux
bin/jmeter.sh
切换语言
Options-Choose Language
内存配置
找到jmeter.bat文件
1 | set HEAP=-Xms4g -Xmx8g -XX:MaxMetaspaceSize=256m |
文件
配置文件
jmeter.properties
,修改后需要重启
修改语言
1
language=zh_CN
修改编码「sampleresult」
1
sampleresult.default.encoding=utf-8
日志文件
jmeter.log
分布式服务配置
jmeter-server.bat
或jmeter-server.sh
目录
docs
接口文档目录
extras
扩展插件目录
lib
依赖资源包
printable_docs
帮助文档:用户手册等
licence
许可证
入门脚本
添加
测试计划
-默认添加
线程组
测试计划,鼠标右键,添加-线程「用户」-线程组
添加
Http请求
线程组,鼠标右键,添加-取样器-Http 请求
添加
结果树
线程组,鼠标右键,添加-监听器-察看结果树
结果树中可以切换数据显示格式:Text、XML、JSON、HTML等
线程用户
- 线程数:模拟的并发用户数
- Ramp-Up时间(秒):启动所有线程需要的时间
- 循环次数:线程数循环
运行原理
- 按照线程方式运行
- GUI 模式用来创建测试脚本和调试
- 命令行模式实现高并发和压力测试
测试计划要素
- 测试计划
- 测试计划中至少有一个线程组
- 线程组中至少有一个取样器
- 测试计划必须有监听器
- 保存测试计划
注意:
- 测试计划中「独立运行每个线程组」,默认未勾选,多个线程组并行执行。勾选,一个线程组执行完后才执行下一个线程组,按添加顺序执行
监听器「常用」
- 察看结果树
- 用表格察看结果
- 聚合报告
- 响应时间图
录制脚本
使用 badboy录制
适用于 Web 端
- 安装
- 打开「默认开始录制」,在地址栏输入测试网址,操作即可
- 操作完成,点击停止录制
- 导出脚本
- File-Export to Jmeter 保存
在 Jmeter 中导入脚本
- 打开-选择脚本文件
- 添加监听器
Jmeter 自身代理录制移动端
配置 Jmeter
- 创建测试计划
- 添加线程组
- 添加 Http 代理服务器
- 测试计划-右键-非测试元件-Http 代理服务
- Http 代理服务器
- 端口号默认
- Https domains 填写本地 ip
- Test Plan Creation-目标控制器,选择测试计划-线程组
- 点击启动-ok「开始录制」
- 添加监听器
配置手机
和 fidder 配置相同
设置-WLAN-wifi 长按-高级-手动代理
- 代理服务器主机名为上述
Https domains ip
- 代理服务器端口为上述
8888
录制
操作手机, 请求会被Jmeter 会自动记录到线程组
接口测试
接口三要素
- 请求地址/方式
- 请求参数
- 返回值
Http 协议
Get、Delete
- 带参数 params
- 不带参数
Post、Put
x-www-form-urlencoded 键值对:a=1&b=2&c=3
Content-Type: application/x-www-form-urlencoded
json
Content-Type: application/json
JMeter 取样器 - http 请求
Http 请求配置
协议 http/https
服务器名称或 ip
端口号
方法:请求方式
get post put delete
等路径:接口地址
内容编码——
utf-8
,中文乱码时指定内容编码即可参数:post 请求是
application/x-www-form-urlencoded
和form-data
格式从剪切板添加:每行以回车符分隔,列以等号 = 分隔
1
2username=admin
password=123456消息体数据:post 请求中
json/xml
格式请求数据,相当于 postman raw文件上传:上传文件接口
1
2文件路径 参数名称 MIME 类型
/Users/mac126/Pictures/图片/2019-11-15-3.jpg fieldname image/jpeg
Http 信息头管理器【必需】
线程组-添加-配置元件-Http 信息头管理器
1 | Content-Type=application/json |
参数化
CSV 数据控件实现参数化
适用范围:大量测试数据
创建一个 csv 格式文件
Excel 创建文件,另存为 CSV 格式,使用 notepad++ 转码
位置:添加线程组-添加-配置元件-CSV Data Set Config
配置
CSV Data Set Config
- 文件名:选择 CSV 数据文件
- 文件编码:UTF-8
- 变量名称:多个使用英文逗号隔开
- 忽略首行:如果首行是变量名,选择忽略首行 true
- 分隔符:如果 CSV 文件使用逗号隔开,就默认
- 其它项默认配置
修改线程组配置:线程数或循环数改为数据量
修改请求参数为变量引用:参数引用
"${变量名}"
用户参数
适用范围:小数据量测试数据设置
使用方式:针对 Http 请求添加其用户参数
位置:Http 请求-添加-前置处理器-用户参数
配置用户参数
参数:
- 名称:变量名称
- 用户——一个用户就是一组测试数据
修改线程组配置:线程数改为用户参数数据量
修改 Http 请求中引用变量
用户定义变量「全局定义、引用」
适用:常量配置:数据库地址、测试环境地址、登录数据等
位置
- 测试计划
- 配置元件
使用定义的变量替换Http请问对应参数值,变量使用格式为:
${变量名}
JMeter 连接数据库
MySQL
在测试计划中导入数据库驱动 jar 包
添加线程组
在线程组添加-配置元件- JDBC Connection Configuration
配置JDBC Connection Configuration
- Variable Name for created pool:连接配置名称
- Database URL:jdbc:mysql:// ip:3306/dbname
- JDBC Driver class:com.mysql.jdbc.Driver
- Username:用户
- Password:密码
在线程组添加-取样器-JDBC Request
- 名称:连接名称
- Variable Name of Pool declared in JDBC Connection Configuration:连接配置名称
- SQL Query
- Query Type
- SQL 语句
线程组-添加-监听器-察看结果树
获取数据查询结果
debug sample 显示脚本中所有变量结果
variable names
用逗号分隔的变量名列表,用于保存Select语句、prepared Select语句或CallableStatement返回的值。注意,当与CallableStatement一起使用时,变量列表必须与调用返回的OUT参数序列相同。如果变量名少于输出参数,那么在线程上下文变量中存储的结果应该与提供的变量名一样多。如果存在的变量名多于OUT参数,则将忽略其他变量
1
2
3
4
5
6
7
8
9
10
11name_#=4
name_1=777777
name_2=zhang daihao
name_3=小白兔
name_4=Sandy
updatetime_#=4
updatetime_1=2019-02-21 18:26:04.0
updatetime_2=null
updatetime_3=2019-01-19 13:13:12.0
updatetime_4=2019-02-25 16:29:27.0Result variable name 填写变量名,保存查询结果集
将创建一个包含行映射列表的对象变量。每个映射都包含列名作为键,列数据作为值
1
all=[{name=小白兔, update_time=2019-01-19 13:13:12.0}]
上传文件表单
Http 请求
基本配置
参数
文件上传
高级
客户端实现,选择 Java
Http 信息头管理器
1 | Content-Type multipart/form-data //等价于 基本配置中 对POST使用 multipart/form-data |
命令行运行 jmx 脚本
使用非 GUI 模式,即命令行模式运行 JMeter 测试脚本能够大大缩减所需要的系统资源
命令介绍
jmeter -n -t
示例: jmeter -n -t testplan.jmx -l test.jtl
含义:表示以命令行模式运行 testplan.jmx 文件,输出的日志文件为 test.jtl
参数介绍
-h 帮助
1
jmeter -h
在非 GUI 模式下运行 JMeter
1
jmeter -n
指定要运行的 JMeter 测试脚本文件
1
jmeter -t test.jmx
记录结果的日志文件
1
jmeter -l output.log
远程执行
1
2jmeter -r
#在 Jmter.properties 文件中指定的所有远程服务器设置 JMeter 使用的代理主机
1
jmeter -H 代理主机ip
设置 JMeter 使用的代理主机的端口号
1
2
3jmeter -P 代理端口
示例:jmeter -n -t test.jmx -l output.log -H 192.168.1.1 -P 8080
后置处理器
结果状态处理器
将上一个接口的返回值作为下一个接口的参数
正则表达式提取器
https://my.oschina.net/u/4258221/blog/3381668
第一个接口中添加正则表达式提取器
正则表达式提取器内容
引用名称:verifycode 后面验证码校验接口要用到的变量名称
正则表达式:
1
.*{"code":"(.+?)"}.*
即为读取 code 返回值内容,生成验证码接口返回的报文格式为 {“data”:{“code”:”4690”},”code”:”1”,”message”:”成功”,”success”:true}
模版 : 模板是使用正则表达式提取到的第几个值。因为可能有多个值匹配,所以要使用模板。从 1 开始匹配,依次类推。这里只有一个,所以填写 $1$ 即可
匹配数字:0 代表随机取值,1 代表全部取值。默认 1
缺省值表示参数没有取到值的话,默认给它的值。一般不填
第二个接口中填写参数变量
JSON Extractor
https://www.bbsmax.com/A/n2d9vnjozD/
说明
json extractor 后置处理器用在返回格式为 json 的 HTTP 请求中,用来获取返回的 json 中的某个值。并保存成变量供后面的请求进行调用或断言等
取多个变量值
1 | Variable names 设置为 id1;id2 |
断言
https://www.shangyexinzhi.com/article/253706.html
响应断言
JSON 断言
只能针对响应结果是 applicaton/json 格式的请求进行断言,一般是断言某个字段值是否返回的是我们需要的
1 | $.success true |
BeanShell 断言
使用 BeanShell 断言的好处是可以自由发挥,比如当断言失败,提示预期结果、实际结果,或者失败时把结果输出到日志