性能测试 | 性能测试工具JMeter直连数据库和逻辑控制器的使用

JMeter直连数据库和逻辑控制器

  • JMeter直连数据库
    • [案例1 连接tpshop商城数据库获取商品名包含:小米手机5的商品id](#案例1 连接tpshop商城数据库获取商品名包含:小米手机5的商品id)
    • [案例2 连接tpshop商城数据库获取商品名包含小米手机5的商品id,并作为请求参数请求并和检查响应后的数据是否存在对应商品id链接](#案例2 连接tpshop商城数据库获取商品名包含小米手机5的商品id,并作为请求参数请求并和检查响应后的数据是否存在对应商品id链接)
  • JMeter逻辑控制器
    • [1. if控制器](#1. if控制器)
      • [案例一 定义变量name并根据name的变量值实现对应网站的访问](#案例一 定义变量name并根据name的变量值实现对应网站的访问)
    • [2. 循环控制器](#2. 循环控制器)
      • [案例1 循环访问百度十次](#案例1 循环访问百度十次)
    • [3. ForEach控制器](#3. ForEach控制器)
      • [案例1 循环读取用户定义变量并作为参数访问百度](#案例1 循环读取用户定义变量并作为参数访问百度)
      • [案例2 结合正则表达式提取器提取地址关键字作为参数访问百度](#案例2 结合正则表达式提取器提取地址关键字作为参数访问百度)
    • [4. 同步定时器](#4. 同步定时器)
      • [案例1 模拟100个用户同时访问百度首页,统计各种高并发情况下运行情况](#案例1 模拟100个用户同时访问百度首页,统计各种高并发情况下运行情况)
    • [5. 常数吞吐量定时器](#5. 常数吞吐量定时器)
      • [案例1 一个用户以20QPS(20次/s)的频率访问百度首页,持续一段时间,统计运行情况](#案例1 一个用户以20QPS(20次/s)的频率访问百度首页,持续一段时间,统计运行情况)
    • [6. 固定定时器](#6. 固定定时器)
      • [案例1 HR系领登录错误3次后,锁定1分钟,1分钟后重新输入正确的用户名密码登录成功](#案例1 HR系领登录错误3次后,锁定1分钟,1分钟后重新输入正确的用户名密码登录成功)

JMeter直连数据库

  • 使用场景
  • 操作步骤
    1. 添加MySQL驱动jar包
      • 方式一:在测试计划面板点击"浏览。"按钮,将你的JDBc驱动添加进来【一次性的】
      • 方式二:将MySQL驱动jar包放入到lib/ext目录下,重启JMeter 【永久的】
    2. 配置数据库连接信息
      • 添加方式:测试计划-->线程组-->(右键添加)配置元件->JDBC Connection Configuration
go 复制代码
Variable Name:mysql数据库连接池名称(JDBC请求时要引用)

Database URL: jdbc:mysql://localhost:3306/tpshop2.0【组成:协议+数据库IP+数据库端口+连接的数据库名称】

JDBC IDRIVER Class:com.mysql.jdbc.Driver(MySQL驱动包位置固定格式  一  下拉框选择)

Username:root(连接数据库用户名,如实填写)
PassWord: 数据库密码
  1. 添加JDBC请求
    • 添加方式:测试计划-->线程组-->取样器-->JDBC Request

案例1 连接tpshop商城数据库获取商品名包含:小米手机5的商品id

准备工作:

  1. 启动tpshop数据库服务器
  2. 添加MySQL驱动jar包

操作步骤:

  1. 添加线程组
  2. 添加JDBC Connection Configuration
  3. 添加JDBC request
  4. 添加查看结果树




案例2 连接tpshop商城数据库获取商品名包含小米手机5的商品id,并作为请求参数请求并和检查响应后的数据是否存在对应商品id链接

  • 操作步骤
  1. 添加线程组
  2. 添加JDBC Connection Configuration
  3. 添加JDBC request
  4. 添加HTTP请求-搜索商品
  5. 在搜索HTTP请求下,添加响应断言,检查响应结果中的字符是否包含商品URL(URL中含ID)
  6. 添加查看结果树
  • 操作过程




这里大家可以尝试修改查询参数为${goods_#}是什么效果!!!

JMeter逻辑控制器

1. if控制器

作用:If控制器用来控制它下面的测试元素是否运行

位置:测试计划-->线程组-->(右键添加)逻辑控制器 -->如果(1f)控制器

案例一 定义变量name并根据name的变量值实现对应网站的访问

操作步骤:

  1. 添加线程组
  2. 用户定义的变量
  3. 添加If控制器,判断name是否等于baidu
  4. 添加HTTP请求,用来访问百度
  5. 添加If控制器,判断name是否等于itcast
  6. 添加HTTP请求,用来访问传智播客


  • 替换成函数调用方法

2. 循环控制器

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

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

案例1 循环访问百度十次

操作步骤:

  1. 添加线程组
  2. 添加循环控制器
  3. 添加HTTP请求
  4. 添加查看结果树

  • 线程组属性可以控制循环次数,那么循环控制器有什用?
    线程组属性控制组内的所有请求次数 循环控制器控制自己分支下的请求 次数 【作用范围不同】


3. ForEach控制器

作用:一般和用户自定义变量 或者正则表达式提取器 一起使用,读取返回结果中一系列相关的变量。

【该控制器下的取样器都会被执行一次或多次,每次读取不同的变量值。】

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

案例1 循环读取用户定义变量并作为参数访问百度

1、有一组关键字[hel1o,python,测试],使用用户定义的变量存储

2、要依次取出关键字,并在百度搜索,例如:https://www.baidu.com/s?wd=hello

操作步骤:

  1. 添加线程组
  2. 添加用户定义的变量 【测试计划 -> 配置原件 -> 用户定义的变量】
  3. 添加ForEach控制器
  4. 添加HTTP请求-百度
  5. 添加查看结果树



案例2 结合正则表达式提取器提取地址关键字作为参数访问百度

1、访问传智播客首页http://www.itcast.cn,获取首页中的地址信息,并全部保存下来

2、要依次取出地址关键字,并在百度搜索,例如:https://www.baidu.com/swd=地址

  • 操作步骤
  1. 添加线程组
  2. 添加HTTP请求1-itcast
  3. 在HTTP请求1下面,添加正则表达式提取器,提取出所有的地处信息【在步骤3的HTTP请求 --> 右键后置处理器 --> 正则表达式提取器 (HTTP下的分支)】
  4. 添加ForEach控制器
  5. 添加HTTP请求2-百度
  6. 【可选】Debug Sampler [线程组 -> 取样器 -> Debug Sampler ]
  7. 添加查看结果树



4. 同步定时器

线程组中是通过设置线程数来执行同步操作的,但是那也不是真正意义上的同步!!!

  • 场景

同步定时器:阻塞线程(累积一定的请求),当在规定的时间内达到一定的线程数量,这些线程会在同一个时间点一起释放,瞬间产生很大的压力。

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

案例1 模拟100个用户同时访问百度首页,统计各种高并发情况下运行情况

  • 先观察无同步定时器用户运行机制

操作步骤:

  1. 添加线程组,设置线程数=100
  2. 添加HTTP请求
  3. 添加同步定时器,并发数可分别设置20/30人 【HTTP请求 --> 定时器 -->Synchronizing Timer】
  4. 添加查看结果树 【测试计划 --> 监听器 --> 查看结果树】
  5. 添加监听器-聚合报告【测试计划 --> 监听器 --> 聚合报告】

5. 常数吞吐量定时器

  • 什么时候需要使用常数吞吐量定时器?
    需要按指定的吞吐量发送请求时,可以使用常数吞吐量定时器
    • 设置目标吞吐量:每个用户每分钟发送的请求数
    • 计算方法:要求QPS*60/线程数

      作用:让JMeter按指定的吞吐量执行,以每分钟为单位
      位置:测试计划->线程组-HTTP请求->(右键添加)定时器-位置:测试计划->线程组-HTTP请求->(右键添加)定时器-->Constant Throughput Timer

      QPS(Query Per Second)每秒查询数:即控制服务器每秒处理的指定请求的数量

案例1 一个用户以20QPS(20次/s)的频率访问百度首页,持续一段时间,统计运行情况

操作步骤:

  1. 添加线程组,循环次数设置成永远
  2. 添加HTTP请求
  3. 添加常数吞吐定时器
  4. 添加查看结果树
  5. 添加监听器-聚合报告
  • 1个用户的设置



  • 2个用户


    若是不设置它就是按照你机器所能够承受的最大的速率来进行发送

6. 固定定时器

  • 设置位置

案例1 HR系领登录错误3次后,锁定1分钟,1分钟后重新输入正确的用户名密码登录成功

  • 操作步骤
  1. 设置请求头 【测试计划 --> 配置原件 --> HTTP信息头管理器】
  2. 添加线程组
  3. 添加HTTP请求1 - 错误1次
  4. 添加HTTP请求2 - 错误2次
  5. 添加HTTP请求3 - 错误3次
  6. 添加HTTP请求4 - 正确用户民密码
  7. 添加 固定定时器 【HTTP请求4下】
  8. 添加查看结果树
  • 设置正确的请求头
    json 请求对应的是 application/json


相关推荐
weixin_46683 小时前
Redis主从复制
数据库·redis·缓存
小丁爱养花3 小时前
Redis - hash & list (常用命令/内部编码/应用场景)
数据库·redis·哈希算法
半路_出家ren3 小时前
图书销售系统数据库设计方案
数据库·mysql·子查询·ddl·dml·数据库设计·分组查询
❀͜͡傀儡师4 小时前
网络嗅探抓包工具 Wireshark v4.6.0
网络·测试工具·wireshark
自由会客室4 小时前
Ubuntu24.04
数据库·postgresql
ayaya_mana4 小时前
MySQL忘记Root密码,详细找回密码步骤
数据库·mysql·adb
顾三殇4 小时前
【MySQL】win 10 / win11:mysql 5.7 下载、安装与配置
数据库·mysql
言之。5 小时前
Django `select_related` 查询优化
数据库·django·sqlite
潜心编码5 小时前
基于Django的医疗电子仪器系统
前端·数据库·1024程序员节