性能测试04|JMeter:连接数据库、逻辑控制器、定时器

目录

一、连接数据库

1、使用场景

2、直连数据库的关键配置

3、案例

​编辑

二、逻辑控制器

1、if控制器

2、循环控制器

3、ForEach控制器

三、定时器

1、同步定时器

2、常数吞吐量定时器(用的少,了解即可)

3、固定定时器


一、连接数据库

1、使用场景

2、直连数据库的关键配置

  • ① 添加MySQL驱动jar包
    • 方式一:在测试计划面板点击"浏览..."按钮,将你的JDBC驱动添加进来 --本脚本可用
    • 方式二:(更常用)将MySQL驱动jar包放入到lib/ext目录下,重启JMeter --所有脚本可用
  • ② 配置数据库连接信息
    • 添加方式:测试计划→线程组→ (右键添加) 配置元件→ JDBC Connection Configurati
  • ③ 添加JDBC请求
    • 添加方式:测试计划→线程组→取样器→JDBC Request

3、案例

编写JDBC脚本步骤:搜索指定商品(该商品已经通过直连数据库来获取到某商品的id),在返回结果中检查是否包含指定商品的ID的详情URL

①添加线程组

②添加 JDBC Connection Configuration

③添加 JDBC request

④添加 HTTP请求 - 搜索商品

⑤在搜索HTTP请求下,添加响应断言,检查响应结果中的字符是否包含商品URL。引用格式:${变量名_索引}

【注意】直连数据库并查询后保存的变量名goods_id是可以在其他请求中以${变量名}的方式使用的,但是需要debug一下,确认实际取到值的变量名具体是什么,可能不是goods_id。

⑥查看结果树

案例详细步骤可观看视频:05.性能测试_直连数据库的案例2 - 搜索结果断言_哔哩哔哩_bilibili

二、逻辑控制器

逻辑控制器:可以按照设定的逻辑控制取样器的执行顺序

1、if控制器

作用:If控制器用来控制它下面的测试元素是否运行,满足条件即执行,不满足就不执行

位置:测试计划→线程组→(右键添加)逻辑控制器 →如果(If)控制器

参数:下面两种哪个都可以,函数形式效率更高一些

  • JS形式:
  • 函数形式:使用函数助手生成函数

操作步骤

  • 添加线程组
  • 用户定义的变量
  • 添加If控制器,判断name是否等于baidu
  • 在If控制器下添加HTTP请求,用来访问百度
  • 添加If控制器,判断name是否等于itcast
  • 在If控制器下添加HTTP请求,用来访问传智播客
  • 添加查看结果树

2、循环控制器

作用:通过设置循环次数,来实现循环发送请求

位置:测试计划→线程组→(右键添加)逻辑控制器→ 循环控制器

参数

操作步骤

  • 添加线程组
  • 添加循环控制器
  • 添加HTTP请求
  • 添加查看结果树

【思考】线程组属性可以控制循环次数,那么循环控制器有什么用?

控制的作用域不同:线程组控制是线程组下的所有请求,循环控制器控制逻辑控制器下的所有请求如果线程组循环次数为M,循环控制器循环次数为N:

  • 循环控制器下的HTTP请求运行:M*N次
  • 线程组下的其他HTTP请求运行:M次

3、ForEach控制器

作用 :一般和用户自定义变量 或者正则表达式提取器一起使用,读取返回结果中一系列相关的变量值。该控制器下的取样器都会被执行一次或多次,每次读取不同的变量值。

位置:测试计划 →线程组→(右键添加)逻辑控制器→ ForEach控制器

配置项


变量前缀来源;
变量名和编号之间可以是_也可以没有符号,但是不能是空格

操作步骤

①与用户定义的变量配合使用

  • 添加线程组
  • 添加用户定义的变量
    • 返回一组变量:相同的变量名+连续的数字后缀
  • 添加ForEach控制器
  • 添加HTTP请求-百度
    • 引用ForEach控制器中保存的新变量名,如${kw}
  • 添加查看结果树

②与正则表达式提取器配合使用

  • 添加线程组
  • 添加HTTP请求-itcast (目的是从该网站首页获取地址信息,并保存下来)
  • 添加正则表达式提取器
  • 添加ForEach控制器
    • 结束循环字段可以不填,表示可以读到最后一个不连续的数为止
  • 添加HTTP请求-百度
  • 添加查看结果树

三、定时器

1、同步定时器

作用 :阻塞线程(累积一定的请求),当在规定的时间内达到一定的线程数量,这些线程会

在同一个时间点一起释放,瞬间产生很大的压力。

(提示:在JMeter中叫做同步定时器,在Loadrunner中又叫集合点)

使用场景:测试抢购、秒杀或者抢红包等高并发的场景

位置:测试计划→线程组→HTTP请求→(右键添加)定时器 →Synchronizing Timer

配置项时间和数量满足一项即会释放线程

操作步骤

  • 添加线程组,设置线程数为n
  • 添加HTTP请求
  • 添加同步定时器
    • 设置并发线程数:同时发送请求的虚拟用户数
    • 设置超时时间:
      • Ø建议设置:不设置的话,若没有达到设置的线程数会一直死等
      • Ø不能设置太小:等待时间后还没达到设置的线程数,会释放已到达的线程
  • 添加查看结果树
  • ++添加监听器-聚合报告++
  • 红框位置可以看到发送http请求的变化

2、常数吞吐量定时器(用的少,了解即可)

使用场景:稳定性测试时,需要指定按照特定的吞吐量发送请求时,要求模拟用户真实的业务场景。

作用 :让JMeter按指定的吞吐量执行,以每分钟为单位。

位置:测试计划→线程组 →HTTP请求 →(右键添加)定时器 →Constant Throughput Timer

参数


qps:每秒查询数

操作步骤

  • 添加线程组,循环次数设置成永远
  • 添加HTTP请求
  • 添加常数吞吐定时器
    • 目标吞吐量是指每个用户每分钟发送的请求数
    • 计算方法:要求的QPS*60/线程数
    • 如果线程数为1的话,那每秒就发送10个请求;
      如果线程数为2的话,如果仍然想每秒发送10个请求,则需要把目标吞吐量设为300;
  • 添加查看聚合报告
    • 红框位置可以看到每秒发送的请求

3、固定定时器

使用场景:Jmeter的线程组在发送2个请求之间需要设置一个等待时间时,可以用固定定时器解决。

案例

(1)IHRM系统登录错误3次后,锁定1分钟,等待1分钟后重新输入正确的用户名密码登录成功请求方法:POST

请求URL:http://ihrm-test.itheima.net/api/sys/login

请求头:Content-Type: application/json;charset=UTF-8

请求体:{"mobile":"13800000002","password":"123456"}

步骤

  • 添加线程组
  • 添加HTTP请求1 - 错误1次
  • 添加HTTP请求2 - 错误2次
  • 添加HTTP请求3 - 错误3次
  • 添加HTTP请求4 - 正确用户名密码在HTTP请求4下,添加固定定时器添加
  • 查看结果树
相关推荐
测试老哥42 分钟前
Jmeter实战:编写博客标签模块增删改查自动化脚本和压测
自动化测试·软件测试·测试工具·jmeter·职场和发展·测试用例·压力测试
灞波儿奔、和奔波儿灞44 分钟前
Jmeter-性能测试
jmeter
cmgdxrz19 小时前
性能测试05|JMeter:分布式、报告、并发数计算、性能监控
分布式·jmeter
记录测试点滴1 天前
【JMeter】配置元件Config Element
数据库·jmeter
zfj3211 天前
JMeter线程组Duration和循环次数设置冲突后,Duration优先级高
jmeter·duration·循环次数·线程组·持续时间
小大力1 天前
简单的jmeter数据请求学习
java·学习·jmeter
测试者家园2 天前
JMeter + Grafana +InfluxDB性能监控 (二)
自动化测试·软件测试·jmeter·性能测试·grafana·性能监控·质量效能
讓丄帝愛伱2 天前
使用JMeter对Linux生产服务器进行压力测试
linux·jmeter·压力测试
云采2 天前
JMeter 的 If Controller:开启性能测试的智能大门
测试工具·jmeter·压力测试