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. 错误处理

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

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


相关推荐
独行soc34 分钟前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
White_Mountain1 小时前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship1 小时前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站1 小时前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
装不满的克莱因瓶1 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
梦想平凡3 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
TianyaOAO3 小时前
mysql的事务控制和数据库的备份和恢复
数据库·mysql
Ewen Seong3 小时前
mysql系列5—Innodb的缓存
数据库·mysql·缓存
码农老起4 小时前
企业如何通过TDSQL实现高效数据库迁移与性能优化
数据库·性能优化
夏木~5 小时前
Oracle 中什么情况下 可以使用 EXISTS 替代 IN 提高查询效率
数据库·oracle