Jmeter安装使用
下载 JMeter

配置环境

- %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar
- %JMETER_HOME%\lib\jorphan.jar
- %JMETER_HOME%\lib\logkit-2.0.jar
启动验证
JMeter有三种启动方式:(均在bin目录下)
- 1. 双击 jmeter.bat
- 2. 双击 ApacheJMeter.jar(推荐)
- 3. 命令行输入: java -jar ApacheJMeter.jar
汉化配置
JMeter元件及执行顺序

- setup线程组:前置处理,初始化
- 普通线程组:编写脚本
- teardown线程组:后置处理,环境恢复等
案例:执行顺序

案例:基本使用

查看结果树:线程组内的所有请求结果,都在这儿查看。
参数化
- 用户定义的变量
- 用户参数
- CSV数据文件设置(灵活,业务测试常用)
- 函数的方式(灵活,业务测试常用)
1. 用户定义的变量
用户定义的变量,是全局变量。作用域针对的是测试计划
添加方式:测试计划 → 线程组 → 配置元件 → 用户定义的变量

2. 用户参数
添加方式:测试计划 → 线程组 → 前置处理器 → 用户参数
3. CSV数据文件设置




函数(__counter)
计数函数,一般做执行次数统计使用;
位置:在菜单中选择 → 工具 → 函数助手对话框

通过计数器做参数化
添加方式:线程组 → 配置元件 → 计数器
线程组设置:设置循环次数
HTTP请求:引用变量名
查看结果树:共5次请求,每次传递的 number 都不一样;由于最大值为4,所有第五次的 number 又从头 100000001 开始了。
断言
JMeter中的几种断言方式
- 响应断言
- JSON断言
- 持续时间断言(Duration Assertion)
1. 响应断言
- Main sample and sub-samples: 作用于父节点取样器及对应子节点取样器;
- Main sample only: 仅作用于父节点取样器;
- Sub-samples only: 仅作用于子节点取样器;
- JMeter Variable: 作用于jmeter变量(输入框内可输入jmeter的变量名称);
- 响应文本: 来自服务器的响应文本,即响应体,不包括任何HTTP头
- 响应代码: 响应的状态码,例如:200
- 响应信息: 响应的信息,例如:OK
- 响应头: 响应头
- 请求头: 请求头
- 请求数据: 请求数据
- URL样本: 响应的URL
- 文档(文本): 响应的整个文档
- 忽略状态:忽略返回的响应状态码
- 请求数据:请求体数据
- 包括:文本包含指定的正则表达式
- 匹配:整个文本匹配指定的正则表达式
- 相等:整个返回结果的文本等于指定的字符串(区分大小写)
- 字符串:返回结果的文本包含指定字符串(区分大小写)
- 否:取反
- 或者:如果存在多个测试模式,勾选代表逻辑或(只要有一个模式匹配,则断言就是OK),不勾选代表逻辑与(所有都必须匹配,断言才是OK)
- 请求:https://www.baidu.com
- 检查:让程序检查响应数据中是否包含“百度一下,你就知道”

2. JSON断言
- 要求:Post请求,URL:https://ihrm.itheima.net/api/sys/login,请求体:{mobile: "13800000002", password: "hm#qd@23!"}
- 检查:断言响应体数据中的message为”登录成功“




3. 持续时间断言


关联
- 正则表达式提取器
- XPath提取器
- JSON提取器
1. 正则表达式提取器(任意响应数据)
- .:是通配符,可以代表任意字符(除换行回车)
- *:代表前面的字符出现0次或者多次
- .*:贪婪匹配,找到左边界值后,往右查找右边界,找到最后面的右边界,中间的所有数据都被记录下来
- ?:非贪婪匹配,找到左边界后,往右查找右边界,只要有匹配的右边界就停止继续查找;再次查找左边界和右边界
- 请求:https://www.itcast.cn/ ,获取网页的 title 值
- 请求:https://www.baidu.com/ ,把获取到的 title 作为请求参数


举例二:
获取传智播客首页的地址,把第3个校区地址作为参数传递。
案例三(推荐):案例二的另一种方法
添加 调试取样器(Debug Sampler):作用是,查看数据参数。
正则表达式提取器:把匹配数字设为 -1(表示获取全部数据,列表)
HTTP请求-百度:路径设为 /S?wd=${address_3},(列表数据中的第三个)也能达到同样效果。
2. XPath提取器(HTML标签类响应数据)

- //a : 找出所有的a标签
- //a[@id='kw'] : 在HTML页面中,找出a标签(有一个属性为id,且id的值为kw)
- //b[@name='kw'] : 在HTML页面中,找出b标签(有一个属性为name,且name的值为kw)
- //title : 获取所有 title 标签
3. JSON提取器(json响应数据)



4. 跨线程组关联(JMeter属性)
- 第一个线程组:发起登录请求,获取响应数据中的message值,将其设置为JMeter属性并提取
- 第二个线程组:发起百度请求,请求参数为JMeter属性对应的值。

JSON提取器:提取JSON格式的响应数据:$.message,设置变量名:message1
setProperty函数:将json提取的变量名,设置为JMeter属性:P_message,生成函数字符串
BeanShell取样器:提取setProperty函数生成的函数字符串
property函数:读取属性
百度请求:将property函数生成的函数字符串,当作请求参数
结果:从上往下运行线程组,由下图可知,message已被设置为JMeter属性,并传递到第二个线程组中作为请求参数了。
脚本录制
1. 创建测试计划,添加 ”HTTP代理服务器“,添加 ”线程组“,添加 ”查看结果树“。
2. 配置 ”HTTP代理服务器“
- 配置端口:8899(随意)
- 目标控制器:抓取的HTTP请求的保存位置
- 请求过滤 - 排除模式:过滤一些请求,如css、js、gif。。。
3. 本地电脑 - 手动代理
4. 启动录制
HTTP代理服务器 - 启动
启动后,去浏览器操作页面即可,抓取到的HTTP请求会保存在 ”线程组“ 下。
连接数据库
使用场景
添加MySQL JDBC驱动 jar 包
使用 jmeter 连接数据库,需要先把 MySQL JDBC 驱动 jar 包存放在下面 jmeter 的 lib/ext 目录下,重启 jmeter。
如何下载MySQL的JDBC驱动包_mysqljdbc驱动包下载_普通网友的博客-CSDN博客
配置数据库连接信息
案例:把从数据库查询到的商品id,传递给请求当参数。
上图,查询返回的 goods_id 是一组数据,用 ${goods_id_1} 表示取其数据的第一个。
调试取样器:能看到查询返回结果的组成。
这里 goods_id_1 = 1 被用上了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)