JMeter
JMeter直连数据库
直连数据库的使用场景
- 用作请求的参数化
- 如:登录时需要的用户名,可以从数据库中查询获取
- 用作结果的断言
- 如:添加购物车下订单,检查接口返回的订单号,是否与数据库中生成的订单号一致
- 清理垃圾数据
- 如:添加商品(商品名/编号等不能重复),再执行该脚本不能成功,需要在下次执行前删除该商品数据
- 准备测试数据
- 如:通过数据库来准备大量(几十万挑)的的性能测试数据
关键配置
- 添加MySQL驱动jar包
- 方式一:在测试计划面板点击"浏览..."按钮,将难度JDBC驱动添加进来
- 方式二:将MySQL驱动jar包放入到lib/ext目录下,重启JMeter
- 配置数据库连接信息
- 添加方式:测试计划 --> 线程组 --> (右键添加)配置元件 --> JDBC ConnectionConfiguration
- 数据库连接池名称、数据库URL(协议+数据库IP+数据库端口+连接的数据库名称)、数据库驱动包(下拉框选择)、数据库用户名密码
- 添加JDBC请求
- 添加方式:测试计划 --> 线程组 --> 取样器 --> JDBC Request
- 数据库连接池名称、Query Type、SQL语句、查询结果保存的变量名
案例-搜索结果断言
1、连接tpshop商城数据库获取商品名包含:小米手机5 的商品id(假设上一个案例的查询结果ID为65)
2、在tpshop首页中搜索商品名"小米手机5",请求URL:http://127.0.0.1/Home/Goods/search.html 请求方法:GET,请求参数:q=小米手机5
3、在搜索的响应数据中检查是否有该商品对应的商品链接:/Home/Goods/goodsInfo/id/65.html
操作步骤:
1、添加线程组
2、添加 JDBC ConnectionConfiguration
3、添加 JDBC Request
4、添加HTTP请求-搜索商品
5、在搜索HTTP请求下,添加响应断言,检查响应结果中的字符是否包含商品URL(URL包含ID)引用格式:&{变量名_索引}
6、添加查看结果树
JMeter逻辑控制器
IF控制器
- 作用:If控制器用来控制它下面的测试元素是否运行
- 位置:测试计划 --> 线程组 --> (右键添加)逻辑控制器 --> 如果(If)控制器
- 参数介绍:
-
JS形式:
-
函数形式:
-
练习:
1、使用'用户定义的变量'定义一个变量name,name的值可以是'baidu'或'itcast
2、根据name的变量值实现对应网站的访问
操作步骤
1.添加线程组
2.用户定义的变量
3.添加If控制器,判断name是否等于baidu
4.添加HTTP请求,用来访问百度
5.添加If控制器,判断name是否等于itcast
6.添加HTTP请求,用来访问传智播客
7.添加查看结果树
循环控制器
- 作用:通过设置循环次数,来实现循环发送请求
- 位置:测试计划 --> 线程组 --> (右键添加)逻辑控制器 --> 循环控制器
- 参数介绍:
练习:循环请求百度10次
循环控制器和线程组循环次数的区别
不同点:线程组循环组内所有请求,循环控制器只控制子节点下的请求
关联:循环控制器次数为M,线程组循环次数为N
- 循环控制器下的请求运行:M*N次
- 线程组下,非循环控制器下的请求运行:N次
ForEach控制器
- 作用:一般和用户自定义变量或者正则表达式提取器一起使用,读取返回结果中一系列相关的变量。该控制器下的取样器都会被执行一次或多次,每次读取不同的变量值
- 位置:测试计划 --> 线程组 --> (右键添加)逻辑控制器 --> ForEach控制器
- 参数:
【练习1】
1、有一组关机子[hello, python, 测试],使用用户定义的变量存储
2、要依次取出关键字,并在百度搜索,例如:https://www.baidu.com/s?wd=hello
操作步骤:
- 添加线程组
- 添加用户定义的变量
- 添加ForEach控制器
- 添加HTTP请求-百度
- 添加查看结果树
【练习2】
1、访问传智播客首页http://www.itcast.cn,获取首页中的地址信息,并全部保存下来
2、要依次取出地址关键字,并在百度搜索,例如:https://www.baidu.com/s?wd=地址
操作步骤
- 添加线程组
- 添加HTTP请求1-itcast
- 在HTTP请求1下面,添加正则表达式提取器,提取出所有的地址信息
- 添加ForEach控制器
- 添加HTTP请求2-百度
- 添加查看结果树
JMeter定时器
同步定时器
- 同步定时器:阻塞线程(积累一定请求),当在规定的时间内达到一定的线程数量,这些线程会在同一时间点一起释放,瞬间产生很大的压力
提示:在JMeter中叫做同步定时器,在Loadrunner中又叫集合点 - 适用场景:同一时间发送请求量巨大,例如秒杀、抢红包等高并发场景
- 位置:测试计划 --> 线程组 --> HTTP请求 --> (右键添加)定时器 --> Synchronizing Timer
【练习】
1、模拟100个用户同时访问百度首页,统计各种高并发情况下运行情况
操作步骤:
- 添加线程组,设置线程数=100
- 添加HTTP请求
- 添加同步定时器,并发数可分别设置20/30人
- 添加查看结果树
- 添加监听器-聚合报告
常数吞吐量定时器
- 应用场景:模拟用户真实的业务场景
- 作用:按指定的吞吐量执行,以每分钟为单位
- 位置:测试计划 --> 线程组 --> HTTP请求 --> (右键添加)定时器 --> Constant Throughput Timer
- 参数:
- 案例要求:
- 模拟用户真实的业务场景要求:20 QPS(20次/秒)
- 如果线程数设置为1,则目标吞吐量设置为20*60=1200
- 如果线程数设置为2,则目标吞吐量设置为20*60 / 2=1200
【练习】
1、一个用户以 20QPs(20次/s)自的频率访问百度首页,持续一段时间,统计运行情况
操作步骤:
- 添加线程组,循环次数设置成永远
- 添加HTTP请求
- 添加常数吞吐定时器
- 添加查看结果树
- 添加监听器-聚合报告
固定定时器
案例:IHRM系统登录错误3次后,锁定1分钟,1分钟后重新输入正确的用户名密码登录成功
步骤:
- 添加线程组
- 添加HTTP请求1-错误1次
- 添加HTTP请求2-错误2次
- 添加HTTP请求3-错误3次
- 添加HTTP请求4-正确用户名密码
- 在HTTP请求4下,添加固定定时器
- 添加查看结果树
注意:
- 固定定时器,必须添加在需要等待的HTTP请求的子节点下
- 在HTTP信息头管理器中,修改HTTP请求的头域