Jmeter中的前置处理器(二)

5--JDBC PreProcessor

功能特点

  • 数据库操作:执行SQL语句,支持插入、删除、更新和查询操作。
  • 灵活配置:可以连接多种数据库(如MySQL、Oracle、PostgreSQL等)。
  • 适用于数据准备:特别适合需要在测试前准备数据库数据的场景。

配置步骤

  1. 添加 JDBC PreProcessor

    • 右键点击需要添加预处理器的请求或线程组。
    • 选择"添加" -> "预处理器" -> "JDBC PreProcessor"。
  2. 配置 JDBC PreProcessor

    • 名称:给 JDBC 预处理器一个有意义的名称。
    • 变量名称:设置数据库连接池的变量名称。
    • SQL查询:输入要执行的SQL语句。
    • 结果变量名称:设置存储查询结果的变量名称(可选)。
    • 处理结果:选择如何处理查询结果(例如,忽略结果、记录结果等)。

参数说明

  • 名称:给 JDBC 预处理器一个有意义的名称。
  • 变量名称:设置数据库连接池的变量名称,必须与"JDBC Connection Configuration"中定义的变量名称一致。
  • SQL查询:输入要执行的SQL语句,可以是插入、删除、更新或查询语句。
  • 结果变量名称:设置存储查询结果的变量名称,如果不需要存储结果,可以留空。
  • 处理结果 :选择如何处理查询结果,例如:
    • 忽略结果:不存储查询结果。
    • 记录结果:将查询结果存储在指定的变量中。
    • 记录结果并抛出异常:将查询结果存储在指定的变量中,并在查询失败时抛出异常。

示例配置

假设我们需要测试一个Web应用,并在测试前向数据库中插入一些测试数据。

  1. 创建测试计划

    • 右键点击"测试计划" -> 新建 -> 输入测试计划名称(例如"Web应用性能测试")。
  2. 添加线程组

    • 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如"用户模拟")。
    • 配置线程组:
      • 线程数:1(模拟1个用户)
      • 循环次数:1(每个用户发送1次请求)
      • 启动延迟:0(立即启动)
  3. 添加 JDBC 连接配置

    • 右键点击测试计划 -> 添加 -> 配置元件 -> JDBC Connection Configuration。
    • 配置 JDBC 连接配置:
      • 变量名称:dbConnection
      • 数据库 URL:jdbc:mysql://localhost:3306/mydatabase
      • JDBC驱动类:com.mysql.jdbc.Driver
      • 用户名:root
      • 密码:password
  4. 添加 JDBC PreProcessor

    • 右键点击线程组 -> 添加 -> 预处理器 -> JDBC PreProcessor。
    • 配置 JDBC PreProcessor:
      • 名称:插入测试数据
      • 变量名称:dbConnection
      • SQL查询:INSERT INTO users (username, password) VALUES ('testuser1', 'testpass1'), ('testuser2', 'testpass2')
      • 结果变量名称:(可选,如果不需要存储结果,可以留空)
      • 处理结果:忽略结果
  5. 添加HTTP请求

    • 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
    • 配置HTTP请求:
      • 名称:登录请求
      • 服务器名称或IP :目标服务器的地址(例如example.com)。
      • 端口号 :目标服务器的端口(例如80)。
      • 协议 :HTTP或HTTPS(例如HTTP)。
      • 方法:POST
      • 路径 :请求的路径(例如/login)。
      • 参数
        • 名称:username
        • :testuser1
        • 名称:password
        • :testpass1
  6. 运行测试

    • 点击工具栏上的"启动"按钮,运行测试。

优化建议

  1. 数据库连接配置

    • 确保 JDBC 连接配置中的数据库 URL、驱动类、用户名和密码正确无误。
    • 如果使用的是特定数据库,确保已经添加了相应的 JDBC 驱动到 JMeter 的 lib 目录中。
  2. SQL查询

    • 根据实际需求编写 SQL 查询语句。如果需要执行多个操作,可以使用分号分隔多个 SQL 语句。
    • 如果需要动态生成 SQL 语句,可以使用 JMeter 变量(例如 ${variable_name})。
  3. 结果处理

    • 根据实际需求选择合适的处理结果方式。如果需要记录查询结果,确保结果变量名称有意义且易于理解。
  4. 错误处理

    • 在测试计划中添加断言和监听器,确保数据库操作的正确性和请求的成功率。

示例配置详细说明

假设我们有一个简单的测试计划,包含一个线程组和一个HTTP请求,并希望在测试前向数据库中插入一些测试数据。

  1. 创建测试计划

    • 右键点击"测试计划" -> 新建 -> 输入测试计划名称(例如"Web应用性能测试")。
  2. 添加线程组

    • 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如"用户模拟")。
    • 配置线程组:
      • 线程数:1(模拟1个用户)
      • 循环次数:1(每个用户发送1次请求)
      • 启动延迟:0(立即启动)
  3. 添加 JDBC 连接配置

    • 右键点击测试计划 -> 添加 -> 配置元件 -> JDBC Connection Configuration。
    • 配置 JDBC 连接配置:
      • 变量名称:dbConnection
      • 数据库 URL:jdbc:mysql://localhost:3306/mydatabase
      • JDBC驱动类:com.mysql.jdbc.Driver
      • 用户名:root
      • 密码:password
  4. 添加 JDBC PreProcessor

    • 右键点击线程组 -> 添加 -> 预处理器 -> JDBC PreProcessor。
    • 配置 JDBC PreProcessor:
      • 名称:插入测试数据
      • 变量名称:dbConnection
      • SQL查询:INSERT INTO users (username, password) VALUES ('testuser1', 'testpass1'), ('testuser2', 'testpass2')
      • 结果变量名称:(可选,如果不需要存储结果,可以留空)
      • 处理结果:忽略结果
  5. 添加HTTP请求

    • 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
    • 配置HTTP请求:
      • 名称:登录请求
      • 服务器名称或IPexample.com
      • 端口号:80
      • 协议:HTTP
      • 方法:POST
      • 路径:/login
      • 参数
        • 名称:username
        • :testuser1
        • 名称:password
        • :testpass1
  6. 运行测试

    • 点击工具栏上的"启动"按钮,运行测试。

6--取样器超时

功能特点

  • 超时控制:设置请求的最大等待时间,超过这个时间请求将被视为超时。
  • 适用于各种取样器:可以应用于HTTP请求、FTP请求、JDBC请求等多种取样器。
  • 提高测试稳定性:避免因网络问题或服务器响应慢导致测试长时间挂起。

配置步骤

  1. 添加取样器

    • 右键点击需要添加取样器的线程组。
    • 选择"添加" -> "取样器" -> 选择合适的取样器(例如HTTP请求)。
  2. 配置取样器超时时间

    • 在取样器的配置界面中找到超时时间相关的设置。
    • 设置合理的超时时间。

参数说明

  • 超时时间:设置请求的最大等待时间,单位通常为毫秒(ms)。
  • 连接超时:设置建立连接的最大等待时间,单位通常为毫秒(ms)。
  • 响应超时:设置接收响应的最大等待时间,单位通常为毫秒(ms)。

示例配置

假设我们需要测试一个Web应用,并设置HTTP请求的超时时间为10秒(10000毫秒)。

  1. 创建测试计划

    • 右键点击"测试计划" -> 新建 -> 输入测试计划名称(例如"Web应用性能测试")。
  2. 添加线程组

    • 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如"用户模拟")。
    • 配置线程组:
      • 线程数:1(模拟1个用户)
      • 循环次数:1(每个用户发送1次请求)
      • 启动延迟:0(立即启动)
  3. 添加HTTP请求

    • 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
    • 配置HTTP请求:
      • 名称:首页请求
      • 服务器名称或IP :目标服务器的地址(例如example.com)。
      • 端口号 :目标服务器的端口(例如80)。
      • 协议 :HTTP或HTTPS(例如HTTP)。
      • 方法:GET
      • 路径 :请求的路径(例如/)。
      • 超时时间
        • 连接超时(毫秒):5000(5秒)
        • 响应超时(毫秒):10000(10秒)
  4. 运行测试

    • 点击工具栏上的"启动"按钮,运行测试。

优化建议

  1. 合理设置超时时间

    • 根据实际需求和网络状况设置合理的超时时间。过短的超时时间可能导致正常请求被误判为超时,过长的超时时间可能导致测试长时间挂起。
  2. 区分连接超时和响应超时

    • 连接超时是指建立连接的时间限制,响应超时是指接收响应的时间限制。根据实际情况分别设置这两个超时时间。
  3. 错误处理

    • 在测试计划中添加断言和监听器,确保超时请求的正确性和处理方式。例如,可以使用"响应断言"来检查请求是否超时。
  4. 日志记录

    • 使用日志记录功能可以帮助调试和分析超时请求的原因,确保日志文件路径有效且有足够的写权限。

示例配置详细说明

假设我们有一个简单的测试计划,包含一个线程组和一个HTTP请求,并希望设置HTTP请求的超时时间为10秒(10000毫秒)。

  1. 创建测试计划

    • 右键点击"测试计划" -> 新建 -> 输入测试计划名称(例如"Web应用性能测试")。
  2. 添加线程组

    • 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如"用户模拟")。
    • 配置线程组:
      • 线程数:1(模拟1个用户)
      • 循环次数:1(每个用户发送1次请求)
      • 启动延迟:0(立即启动)
  3. 添加HTTP请求

    • 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
    • 配置HTTP请求:
      • 名称:首页请求
      • 服务器名称或IPexample.com
      • 端口号:80
      • 协议:HTTP
      • 方法:GET
      • 路径:/
      • 超时时间
        • 连接超时(毫秒):5000(5秒)
        • 响应超时(毫秒):10000(10秒)
  4. 运行测试

    • 点击工具栏上的"启动"按钮,运行测试。

7--正则表达式用户参数

功能特点

  • 数据提取:使用正则表达式从响应中提取特定的数据。
  • 动态参数传递:将提取的数据存储为变量,供后续请求使用。
  • 支持多种响应类型:可以处理文本、HTML、JSON等多种响应类型。

配置步骤

  1. 添加正则表达式提取器

    • 右键点击需要添加后处理器的请求或线程组。
    • 选择"添加" -> "后处理器" -> "正则表达式提取器"(Regular Expression Extractor)。
  2. 配置正则表达式提取器

    • 名称:给正则表达式提取器一个有意义的名称。
    • 应用到:选择要应用正则表达式的响应类型(例如,主样本、子样本等)。
    • 字段要检查:选择要检查的响应字段(例如,响应数据、响应头等)。
    • 正则表达式:输入用于匹配数据的正则表达式。
    • 模板 :设置提取数据的模板,通常格式为$1$表示第一个捕获组。
    • 匹配数字:设置要匹配的次数(例如,-1表示匹配所有,0表示随机匹配一个,1表示匹配第一个)。
    • 默认值:设置如果未找到匹配项时的默认值。

参数说明

  • 名称:给正则表达式提取器一个有意义的名称。
  • 应用到 :选择要应用正则表达式的响应类型,例如:
    • 主样本:仅应用到主样本。
    • 子样本:仅应用到子样本。
    • 主样本和子样本:应用到主样本和子样本。
  • 字段要检查 :选择要检查的响应字段,例如:
    • 响应数据:检查响应数据。
    • 响应头:检查响应头。
  • 正则表达式:输入用于匹配数据的正则表达式。
  • 模板 :设置提取数据的模板,通常格式为$1$表示第一个捕获组。
  • 匹配数字 :设置要匹配的次数,例如:
    • -1:匹配所有。
    • 0:随机匹配一个。
    • 1:匹配第一个。
  • 默认值:设置如果未找到匹配项时的默认值。

示例配置

假设我们需要测试一个Web应用,并从登录请求的响应中提取会话标识符(例如JSESSIONID),然后在后续请求中使用该会话标识符。

  1. 创建测试计划

    • 右键点击"测试计划" -> 新建 -> 输入测试计划名称(例如"Web应用性能测试")。
  2. 添加线程组

    • 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如"用户模拟")。
    • 配置线程组:
      • 线程数:1(模拟1个用户)
      • 循环次数:1(每个用户发送1次请求)
      • 启动延迟:0(立即启动)
  3. 添加登录请求

    • 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
    • 配置HTTP请求:
      • 名称:登录请求
      • 服务器名称或IP :目标服务器的地址(例如example.com)。
      • 端口号 :目标服务器的端口(例如80)。
      • 协议 :HTTP或HTTPS(例如HTTP)。
      • 方法:POST
      • 路径 :请求的路径(例如/login)。
      • 参数
        • 名称:username
        • :testuser
        • 名称:password
        • :testpass
  4. 添加正则表达式提取器

    • 右键点击登录请求 -> 添加 -> 后处理器 -> 正则表达式提取器。
    • 配置正则表达式提取器:
      • 名称:提取会话标识符
      • 应用到:主样本
      • 字段要检查:响应数据
      • 正则表达式:JSESSIONID=(.*?);
      • 模板:11
      • 匹配数字:1(匹配第一个)
      • 默认值:NO_SESSION_ID
  5. 添加后续请求

    • 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
    • 配置HTTP请求:
      • 名称:首页请求
      • 服务器名称或IPexample.com
      • 端口号:80
      • 协议:HTTP
      • 方法:GET
      • 路径:/
      • 参数
        • 名称:JSESSIONID
        • :${session_id}
  6. 运行测试

    • 点击工具栏上的"启动"按钮,运行测试。

优化建议

  1. 正则表达式

    • 确保正则表达式正确无误,能够准确匹配所需的数据。可以使用在线正则表达式测试工具进行验证。
  2. 模板设置

    • 根据正则表达式的捕获组设置合适的模板。例如,$1$表示第一个捕获组,$2$表示第二个捕获组。
  3. 匹配次数

    • 根据实际需求设置匹配次数。如果只需要第一个匹配项,设置为1;如果需要所有匹配项,设置为-1。
  4. 默认值

    • 设置合理的默认值,避免因未找到匹配项而导致测试失败。
  5. 错误处理

    • 在测试计划中添加断言和监听器,确保提取的数据正确性和请求的成功率。

示例配置详细说明

假设我们有一个简单的测试计划,包含一个线程组和两个HTTP请求,并希望从登录请求的响应中提取会话标识符(例如JSESSIONID),然后在后续请求中使用该会话标识符。

  1. 创建测试计划

    • 右键点击"测试计划" -> 新建 -> 输入测试计划名称(例如"Web应用性能测试")。
  2. 添加线程组

    • 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如"用户模拟")。
    • 配置线程组:
      • 线程数:1(模拟1个用户)
      • 循环次数:1(每个用户发送1次请求)
      • 启动延迟:0(立即启动)
  3. 添加登录请求

    • 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
    • 配置HTTP请求:
      • 名称:登录请求
      • 服务器名称或IPexample.com
      • 端口号:80
      • 协议:HTTP
      • 方法:POST
      • 路径:/login
      • 参数
        • 名称:username
        • :testuser
        • 名称:password
        • :testpass
  4. 添加正则表达式提取器

    • 右键点击登录请求 -> 添加 -> 后处理器 -> 正则表达式提取器。
    • 配置正则表达式提取器:
      • 名称:提取会话标识符
      • 应用到:主样本
      • 字段要检查:响应数据
      • 正则表达式:JSESSIONID=(.*?);
      • 模板:11
      • 匹配数字:1(匹配第一个)
      • 默认值:NO_SESSION_ID
  5. 添加后续请求

    • 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
    • 配置HTTP请求:
      • 名称:首页请求
      • 服务器名称或IPexample.com
      • 端口号:80
      • 协议:HTTP
      • 方法:GET
      • 路径:/
      • 参数
        • 名称:JSESSIONID
        • :${session_id}
  6. 运行测试

    • 点击工具栏上的"启动"按钮,运行测试。

8--BeanShell PreProcessor

功能特点

  • 自定义预处理逻辑:使用 BeanShell 脚本编写自定义的预处理逻辑。
  • 灵活控制:可以根据测试数据和条件动态调整请求参数。
  • 支持 BeanShell 脚本:支持使用 BeanShell 脚本语言编写预处理逻辑。

配置步骤

  1. 添加 BeanShell 预处理器

    • 右键点击需要添加预处理器的请求或线程组。
    • 选择"添加" -> "预处理器" -> "BeanShell 预处理器"。
  2. 配置 BeanShell 预处理器

    • 名称:给 BeanShell 预处理器一个有意义的名称。
    • 文件:选择脚本文件路径(可选,如果脚本较长或需要版本控制)。
    • 脚本:直接在脚本编辑框中编写脚本。
    • 参数:定义脚本中使用的参数(可选)。

参数说明

  • 名称:给 BeanShell 预处理器一个有意义的名称。
  • 文件:选择脚本文件路径(可选,如果脚本较长或需要版本控制)。
  • 脚本:直接在脚本编辑框中编写 BeanShell 脚本。
  • 参数:定义脚本中使用的参数(可选)。

示例配置

假设我们需要测试一个Web应用,并在发送请求之前动态设置请求参数,例如根据当前时间生成一个唯一的请求ID。

  1. 创建测试计划

    • 右键点击"测试计划" -> 新建 -> 输入测试计划名称(例如"Web应用性能测试")。
  2. 添加线程组

    • 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如"用户模拟")。
    • 配置线程组:
      • 线程数:1(模拟1个用户)
      • 循环次数:1(每个用户发送1次请求)
      • 启动延迟:0(立即启动)
  3. 添加HTTP请求

    • 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
    • 配置HTTP请求:
      • 名称:首页请求
      • 服务器名称或IP :目标服务器的地址(例如example.com)。
      • 端口号 :目标服务器的端口(例如80)。
      • 协议 :HTTP或HTTPS(例如HTTP)。
      • 方法:GET
      • 路径 :请求的路径(例如/)。
      • 参数
        • 名称:requestId
        • :${request_id}
  4. 添加 BeanShell 预处理器

    • 右键点击HTTP请求 -> 添加 -> 预处理器 -> BeanShell 预处理器。
    • 配置 BeanShell 预处理器:
      • 名称:生成请求ID

      • 脚本 :在脚本编辑框中编写以下 BeanShell 脚本:

        java 复制代码
        import java.util.Date;
        import java.text.SimpleDateFormat;
        
        // 获取当前时间
        Date now = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String timestamp = sdf.format(now);
        
        // 生成唯一请求ID
        String requestId = "req_" + timestamp;
        
        // 将请求ID存储为JMeter变量
        vars.put("request_id", requestId);
  5. 运行测试

    • 点击工具栏上的"启动"按钮,运行测试。

优化建议

  1. 脚本语言选择

    • 虽然 BeanShell 是一个强大的脚本语言,但 Groovy 通常性能更好且功能更强大。如果可能,建议使用 Groovy 脚本。
  2. 脚本文件

    • 如果脚本较长或需要版本控制,可以将脚本保存到文件中,并在 BeanShell 预处理器中选择脚本文件路径。
  3. 参数

    • 如果脚本需要使用外部参数,可以在"参数"部分定义参数,并在脚本中引用这些参数。
  4. 性能影响

    • 注意复杂脚本可能会对测试性能产生影响,特别是在大规模性能测试中。可以通过优化脚本和减少不必要的操作来提高性能。
  5. 错误处理

    • 在脚本中添加适当的错误处理逻辑,确保脚本在遇到异常时能够优雅地处理。
  6. 日志记录

    • 使用日志记录功能可以帮助调试和分析脚本执行情况,确保日志文件路径有效且有足够的写权限。

示例配置详细说明

假设我们有一个简单的测试计划,包含一个线程组和一个HTTP请求,并希望在发送请求之前动态生成一个唯一的请求ID。

  1. 创建测试计划

    • 右键点击"测试计划" -> 新建 -> 输入测试计划名称(例如"Web应用性能测试")。
  2. 添加线程组

    • 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如"用户模拟")。
    • 配置线程组:
      • 线程数:1(模拟1个用户)
      • 循环次数:1(每个用户发送1次请求)
      • 启动延迟:0(立即启动)
  3. 添加HTTP请求

    • 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
    • 配置HTTP请求:
      • 名称:首页请求
      • 服务器名称或IPexample.com
      • 端口号:80
      • 协议:HTTP
      • 方法:GET
      • 路径:/
      • 参数
        • 名称:requestId
        • :${request_id}
  4. 添加 BeanShell 预处理器

    • 右键点击HTTP请求 -> 添加 -> 预处理器 -> BeanShell 预处理器。
    • 配置 BeanShell 预处理器:
      • 名称:生成请求ID

      • 脚本 :在脚本编辑框中编写以下 BeanShell 脚本:

        java 复制代码
        import java.util.Date;
        import java.text.SimpleDateFormat;
        
        // 获取当前时间
        Date now = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String timestamp = sdf.format(now);
        
        // 生成唯一请求ID
        String requestId = "req_" + timestamp;
        
        // 将请求ID存储为JMeter变量
        vars.put("request_id", requestId);
  5. 运行测试

    • 点击工具栏上的"启动"按钮,运行测试。

相关推荐
囷囷菌1 小时前
Postman接口测试(断言、关联、参数化、输出测试报告)
测试工具·postman
zaim11 小时前
计算机的错误计算(一百五十六)
matlab·1024程序员节·双曲反余切·反双曲余切·acoth
问道飞鱼4 小时前
【Java知识】Java性能测试工具JMeter
java·测试工具·jmeter
古人诚不我欺4 小时前
jmeter常用配置元件介绍总结之断言
jmeter
惜.己6 小时前
Jmeter中的监听器(二)
测试工具·jmeter·1024程序员节
CSXB997 小时前
三十八、Python(pytest框架-上)
python·功能测试·测试工具·单元测试·pytest
江_小_白9 小时前
关于selenium元素找不到的问题(Unable to locate element: {“method“:“xpath“,“selector“:“)
selenium·测试工具
无所事事的海绵宝宝9 小时前
selenium元素定位校验以及遇到的元素操作问题记录
python·功能测试·selenium·测试工具
ccsd1113 小时前
jmeter并发测试
java·jmeter