Jmeter中的线程

1)线程(用户)


1--setUp 线程组
用途
  • 初始化环境:执行初始化任务,如创建数据库表、上传文件等。
  • 准备数据:准备测试所需的数据,如用户数据、产品数据等。
  • 建立连接:建立数据库连接、WebSocket连接等。
配置步骤
  1. 添加setUp线程组

    • 右键点击测试计划(Test Plan)。
    • 选择"添加" -> "线程组" -> "setUp线程组"。
  2. 配置setUp线程组

    • 名称:给setUp线程组一个有意义的名称。
    • 线程数(用户数):设置执行初始化任务的线程数。通常设置为1即可,因为初始化任务通常是顺序执行的。
    • 循环次数:设置初始化任务的执行次数。通常设置为1,除非需要多次执行初始化任务。
    • 调度器 :选择是否使用调度器来控制初始化任务的执行时间。
      • 启动延迟:设置初始化任务开始前的延迟时间。
      • 持续时间:设置初始化任务的总持续时间。
示例配置

假设我们需要在一个Web应用性能测试开始前,创建数据库表并插入一些初始数据。

  1. 创建测试计划

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

    • 右键点击测试计划 -> 添加 -> 线程组 -> setUp线程组。
    • 输入setUp线程组名称(例如"初始化任务")。
  3. 配置setUp线程组

    • 名称:初始化任务
    • 线程数(用户数):1
    • 循环次数:1
    • 调度器:不勾选(通常不需要设置调度器)
  4. 添加初始化任务

    • 右键点击setUp线程组 -> 添加 -> 取样器 -> JDBC请求。
    • 配置JDBC请求:
      • 数据库URL:数据库的连接字符串。

      • 驱动类:数据库驱动类。

      • 用户名和密码:数据库的认证信息。

      • SQL查询 :创建数据库表的SQL语句。

        sql 复制代码
        CREATE TABLE users (
            id INT AUTO_INCREMENT PRIMARY KEY,
            username VARCHAR(50),
            password VARCHAR(50)
        );
  5. 插入初始数据

    • 右键点击setUp线程组 -> 添加 -> 取样器 -> JDBC请求。
    • 配置JDBC请求:
      • 数据库URL:数据库的连接字符串。

      • 驱动类:数据库驱动类。

      • 用户名和密码:数据库的认证信息。

      • SQL查询 :插入初始数据的SQL语句。

        sql 复制代码
        INSERT INTO users (username, password) VALUES ('user1', 'pass1');
        INSERT INTO users (username, password) VALUES ('user2', 'pass2');
  6. 添加监听器

    • 右键点击setUp线程组 -> 添加 -> 监听器 -> 查看结果树。
    • 运行测试,查看结果。
优化建议
  1. 线程数

    • 通常设置为1,因为初始化任务通常是顺序执行的。
  2. 循环次数

    • 通常设置为1,除非需要多次执行初始化任务。
  3. 调度器

    • 通常不需要设置调度器,因为setUp线程组会在主测试线程组开始前立即执行。
  4. 错误处理

    • 使用断言和监听器来捕获和分析初始化任务的执行结果,确保初始化任务成功完成。
  5. 脚本编写

    • 使用JSR223取样器和Groovy脚本可以灵活地执行复杂的初始化任务,如文件操作、数据库操作等。

2--tearDown线程组
用途
  • 清理环境:执行清理任务,如删除临时文件、关闭数据库连接等。
  • 恢复状态:确保测试结束后系统恢复到初始状态,避免影响后续测试。
  • 资源释放:释放测试过程中占用的资源,如内存、文件句柄等。
配置步骤
  1. 添加tearDown线程组

    • 右键点击测试计划(Test Plan)。
    • 选择"添加" -> "线程组" -> "tearDown线程组"。
  2. 配置tearDown线程组

    • 名称:给tearDown线程组一个有意义的名称。
    • 线程数(用户数):设置执行清理任务的线程数。通常设置为1即可,因为清理任务通常是顺序执行的。
    • 循环次数:设置清理任务的执行次数。通常设置为1,除非需要多次执行清理任务。
    • 调度器 :选择是否使用调度器来控制清理任务的执行时间。
      • 启动延迟:设置清理任务开始前的延迟时间。
      • 持续时间:设置清理任务的总持续时间。
示例配置

假设我们需要在一个Web应用性能测试结束后,删除所有生成的临时文件并关闭数据库连接。

  1. 创建测试计划

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

    • 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如"主测试线程组")。
    • 配置主测试线程组(例如,设置线程数、循环次数等)。
    • 添加HTTP请求等取样器和监听器。
  3. 添加tearDown线程组

    • 右键点击测试计划 -> 添加 -> 线程组 -> tearDown线程组。
    • 输入tearDown线程组名称(例如"清理任务")。
  4. 配置tearDown线程组

    • 名称:清理任务
    • 线程数(用户数):1
    • 循环次数:1
    • 调度器:不勾选(通常不需要设置调度器)
  5. 添加清理任务

    • 右键点击tearDown线程组 -> 添加 -> 取样器 -> HTTP请求(或其他取样器)。
    • 配置清理任务:
      • 例如,删除临时文件:

        • 右键点击tearDown线程组 -> 添加 -> 取样器 -> JSR223取样器。

        • 语言:选择Groovy。

        • 脚本:

          Groovy 复制代码
          import java.nio.file.*
          
          def directory = new File("/path/to/temp/files")
          if (directory.exists() && directory.isDirectory()) {
              directory.eachFile { file ->
                  file.delete()
              }
          }
      • 例如,关闭数据库连接:

        • 右键点击tearDown线程组 -> 添加 -> 取样器 -> JDBC请求。
        • 配置JDBC请求,执行关闭连接的SQL语句(如果有)。
  6. 添加监听器

    • 右键点击tearDown线程组 -> 添加 -> 监听器 -> 查看结果树。
    • 运行测试,查看结果。
优化建议
  1. 线程数

    • 通常设置为1,因为清理任务通常是顺序执行的。
  2. 循环次数

    • 通常设置为1,除非需要多次执行清理任务。
  3. 调度器

    • 通常不需要设置调度器,因为tearDown线程组会在主测试线程组结束后立即执行。
  4. 错误处理

    • 使用断言和监听器来捕获和分析清理任务的执行结果,确保清理任务成功完成。
  5. 脚本编写

    • 使用JSR223取样器和Groovy脚本可以灵活地执行复杂的清理任务,如文件操作、数据库操作等。

3--开放模型线程组
用途
  • 模拟真实用户行为:每个线程可以根据不同的时间间隔和条件执行请求,更接近真实用户的访问模式。
  • 灵活的测试场景:适用于需要模拟复杂用户行为的测试场景,如登录、浏览页面、提交表单等。
配置步骤
  1. 添加开放模型线程组

    • 右键点击测试计划(Test Plan)。
    • 选择"添加" -> "线程组" -> "开放模型线程组"。
  2. 配置开放模型线程组

    • 名称:给开放模型线程组一个有意义的名称。
    • 线程数(用户数):设置模拟用户的数量。
    • 初始延迟:设置所有线程启动前的初始延迟时间。
    • 调度器 :选择是否使用调度器来控制测试的开始和结束时间。
      • 启动延迟:设置测试开始前的延迟时间。
      • 持续时间:设置测试的总持续时间。
    • 每秒启动的线程数:设置每秒钟启动的线程数。
    • 每秒启动的线程数上限:设置每秒钟启动的线程数的上限。
    • 每个用户的所有样本之间的延迟:设置每个用户在执行每个样本之间的延迟时间。
    • 每个用户的所有样本之间的延迟上限:设置每个用户在执行每个样本之间的延迟时间的上限。
    • 每个用户的所有样本之间的延迟下限:设置每个用户在执行每个样本之间的延迟时间的下限。
示例配置

假设我们需要测试一个Web应用,模拟100个用户并发访问,并且每个用户在执行每个样本之间有随机的延迟时间。

  1. 创建测试计划

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

    • 右键点击刚刚创建的测试计划 -> 添加 -> 线程组 -> 开放模型线程组。
    • 输入线程组名称(例如"用户模拟")。
  3. 配置开放模型线程组

    • 名称:用户模拟
    • 线程数(用户数):100
    • 初始延迟:0秒
    • 调度器 :勾选
      • 启动延迟:0秒
      • 持续时间:600秒(10分钟)
    • 每秒启动的线程数:10
    • 每秒启动的线程数上限:20
    • 每个用户的所有样本之间的延迟:1000毫秒(1秒)
    • 每个用户的所有样本之间的延迟上限:3000毫秒(3秒)
    • 每个用户的所有样本之间的延迟下限:500毫秒(0.5秒)
  4. 添加HTTP请求

    • 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
    • 配置HTTP请求:
      • 服务器名称或IP:目标服务器的地址。
      • 端口号:目标服务器的端口。
      • 协议:HTTP或HTTPS。
      • 方法:GET、POST等。
      • 路径:请求的路径(例如/index.html)。
  5. 添加监听器

    • 右键点击线程组 -> 添加 -> 监听器 -> 查看结果树。
    • 运行测试,查看结果。
优化建议
  1. 线程数

    • 根据测试目标和系统资源合理设置线程数。过多的线程可能导致系统资源不足,影响测试结果。
  2. 延迟时间

    • 设置合理的延迟时间和上下限,以模拟真实用户的访问模式。可以根据实际用户行为数据来调整这些参数。
  3. 调度器

    • 使用调度器可以更好地控制测试的开始和结束时间,避免测试时间过长或过短。
  4. 每秒启动的线程数

    • 设置合理的每秒启动的线程数,避免瞬间启动大量线程导致系统负载过高。
  5. 资源监控

    • 在测试过程中监控系统资源(如CPU、内存、网络带宽等),确保测试环境的稳定性。
  6. 错误处理

    • 使用断言和监听器来捕获和分析测试结果,及时发现和解决问题。

4--线程组
用途
  • 模拟用户:定义模拟用户的数量和行为。
  • 控制测试流程:设置测试的迭代次数、启动延迟等。
  • 资源分配:管理测试资源的分配,确保测试的稳定性和可靠性。
配置步骤
  1. 添加线程组

    • 右键点击测试计划(Test Plan)。
    • 选择"添加" -> "线程组" -> "线程组"。
  2. 配置线程组

    • 名称:给线程组一个有意义的名称。
    • 线程数(用户数):设置模拟用户的数量。
    • 循环次数:每个用户执行测试脚本的次数。
    • 调度器 :选择是否使用调度器来控制测试的开始和结束时间。
      • 启动延迟:设置测试开始前的延迟时间。
      • 持续时间:设置测试的总持续时间。
    • 启动时长(秒):设置所有线程启动的时间跨度,即所有线程不是同时启动,而是逐渐启动。
    • 处理完所有样本后停止线程:选择是否在所有样本处理完毕后停止线程。
示例配置

假设我们需要测试一个Web应用,模拟100个用户并发访问,并且每个用户执行测试脚本10次。

  1. 创建测试计划

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

    • 右键点击刚刚创建的测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如"用户模拟")。
  3. 配置线程组

    • 名称:用户模拟
    • 线程数(用户数):100
    • 循环次数:10
    • 调度器 :勾选
      • 启动延迟:0秒
      • 持续时间:600秒(10分钟)
    • 启动时长(秒):10秒
    • 处理完所有样本后停止线程:勾选
  4. 添加HTTP请求

    • 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
    • 配置HTTP请求:
      • 服务器名称或IP:目标服务器的地址。
      • 端口号:目标服务器的端口。
      • 协议:HTTP或HTTPS。
      • 方法:GET、POST等。
      • 路径:请求的路径(例如/index.html)。
  5. 添加监听器

    • 右键点击线程组 -> 添加 -> 监听器 -> 查看结果树。
    • 运行测试,查看结果。
优化建议
  1. 线程数

    • 根据测试目标和系统资源合理设置线程数。过多的线程可能导致系统资源不足,影响测试结果。
  2. 循环次数

    • 根据测试需求设置循环次数。对于长时间的测试,可以适当增加循环次数。
  3. 调度器

    • 使用调度器可以更好地控制测试的开始和结束时间,避免测试时间过长或过短。
  4. 启动时长

    • 设置适当的启动时长,使线程逐渐启动,避免瞬间启动大量线程导致系统负载过高。
  5. 资源监控

    • 在测试过程中监控系统资源(如CPU、内存、网络带宽等),确保测试环境的稳定性。
  6. 错误处理

    • 使用断言和监听器来捕获和分析测试结果,及时发现和解决问题。

通过合理配置和优化线程组,可以有效地模拟用户行为,提高测试的准确性和可靠性。


相关推荐
Elastic 中国社区官方博客2 小时前
在 Elasticsearch 中使用 Mistral Chat completions 进行上下文工程
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
编程爱好者熊浪4 小时前
两次连接池泄露的BUG
java·数据库
TDengine (老段)5 小时前
TDengine 字符串函数 CHAR 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
qq7422349845 小时前
Python操作数据库之pyodbc
开发语言·数据库·python
姚远Oracle ACE6 小时前
Oracle 如何计算 AWR 报告中的 Sessions 数量
数据库·oracle
Dxy12393102166 小时前
MySQL的SUBSTRING函数详解与应用
数据库·mysql
码力引擎6 小时前
【零基础学MySQL】第十二章:DCL详解
数据库·mysql·1024程序员节
杨云龙UP7 小时前
【MySQL迁移】MySQL数据库迁移实战(利用mysqldump从Windows 5.7迁至Linux 8.0)
linux·运维·数据库·mysql·mssql
l1t7 小时前
利用DeepSeek辅助修改luadbi-duckdb读取DuckDB decimal数据类型
c语言·数据库·单元测试·lua·duckdb
安当加密7 小时前
Nacos配置安全治理:把数据库密码从YAML里请出去
数据库·安全