Jmeter线程组-上

这篇具有很好参考价值的文章主要介绍了Jmeter线程组-上。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

线程组


线程组作为JMeter测试计划的核心组件之一,对于模拟并发用户的行为至关重要。线程组元件是整个测试计划的入口,所有的取样器和控制器必须放置在线程组下。

可以将线程组视为一个虚拟用户池,其中每个线程可被理解为一个虚拟用户,多个虚拟用户同时执行相同的一批任务。

在这个虚拟用户池中,每个线程之间是相互隔离且互不影响的。每个线程的执行过程中,操作的变量不会对其他线程的变量值产生影响。

线程组的关键任务之一是定义并发用户的行为,包括设置线程数、循环次数、启动延迟等关键参数。通过适当配置线程组,测试人员可以模拟多用户在系统中同时执行任务的场景,从而评估系统的性能和稳定性。

通过灵活使用setup线程组、线程组、tearDown线程组、开放模型线程组,配置前置操作、主要操作、后置操作,更能真实、详细的评估系统。

线程组分为四类:

  • 线程组
  • setUp线程组
  • tearDown线程组
  • 开放模型线程组

线程组、setUp线程组、tearDown线程组控制面板中的元素基本一致:

  • 名称、注释
  • 在取样器错误后执行的动作
  • 线程数
  • Ramp-Up时间
  • Same user on each iteration
  • 延迟创建线程直到需要(只有线程组有)
  • 调度器

开放模型线程组控制面板中的元素:

  • 名称、注释
  • 在取样器错误后执行的动作
  • 调度计划
  • 随机种子

执行顺序


在JMeter中,setUp线程组拥有最高的优先级,而tearDown线程组则具有最低的优先级。这一优先级关系可用表达式表示为:setUp线程组 > 线程组 = 开放模型线程组 > tearDown线程组

这意味着在测试计划执行过程中,setUp线程组将首先执行,其后是线程组开放模型线程组,最后执行tearDown线程组

通常情况下,setUp线程组用于在测试执行之前进行一些初始化工作,而tearDown线程组用于测试执行结束后的清理工作。
其他线程组在测试执行过程中按照它们在测试计划中的顺序执行。

示例接口代码


@ThreadGroup.route('/api/ThreadGroup/', methods=['GET', 'POST'])
def threadgroup1():
    sleep(3)  # 接口设置了休眠三秒,即接口在接收到请求数据三秒后,返回响应数据。
    return "我是响应"

示例Jmeter脚本


  • 测试计划中,分别添加tearDown线程组、线程组、setUp线程组

  • tearDown线程组、线程组、setUp线程组下分别添加HTTP请求取样器

    名称分别为:tearDown线程组线程组setUp线程组

    请求地址:HTTP://127.0.0.1:5000/api/ThreadGroup1/

    请求方式:GET

  • 测试计划下添加查看结果树

Jmeter线程组-上

演示内容


运行,查看结果树

Jmeter线程组-上

可以观察到在2024-04-03 15:00:07 时,setUp线程组中的取样器发送了请求。

随后,在 2024-04-03 15:00:10 时,线程组中的请求取样器也发出了请求。

最后,在 2024-04-03 15:00:13时,tearDown线程组请求取样器发出了请求。

这与接口设置的休眠时间一致,表明 JMeter 先执行setUp线程组,随后执行线程组,最后执行 tearDown线程组 。即使脚本中的顺序不是这样。

Jmeter中线程组的执行顺序可以归纳为:setUp线程组 > 线程组 = 开放模型线程组 > tearDown线程组


线程数


线程组中的线程数指的是同时运行的虚拟用户数量。这个数量决定了你的测试将模拟多少个用户同时访问目标应用程序或服务。

在JMeter的线程组配置中,你可以根据你的需求来设置线程数,通常是根据你想要模拟的用户负载量和你的系统资源来决定的。

需要注意的是,线程数设置得太高可能会导致测试机器资源不足,影响测试结果的准确性;而设置得太低可能无法模拟真实的负载情况。因此,需要根据具体情况进行合理的设置。

示例接口代码


@ThreadGroup.route('/api/ThreadGroup2/', methods=['GET', 'POST'])
def threadgroup1():
    return "我是响应"

示例Jmeter脚本


  • 测试计划下,添加1个线程组

    线程数:3

  • 线程组下,添加HTTP请求取样器

    请求地址:HTTP://127.0.0.1:5000/api/ThreadGroup2/

    请求方式:GET

  • 测试计划中,添加查看结果树

Jmeter线程组-上

演示内容


运行,查看结果树

Jmeter线程组-上

图中取样器结果中的Thread Name分别为线程组 1-1线程组 1-2线程组 1-3。这是因为线程组线程数值为3,Jmeter启功了3个线程,每个线程皆执行1次线程组

在Jmeter中1个线程就代表1个用户,现在就相当于3个用户一起执行线程组


循环次数


在JMeter中,循环次数是指每个线程(即虚拟用户)执行其测试计划的次数。这个数量决定了你的测试将模拟用户访问目标应用程序或服务的次数。

在JMeter的线程组配置中,你可以根据你的需求来设置循环次数,通常是根据你想要模拟的用户访问上限值,如抽奖次数。

需要注意的是,循环次数设置得太高,特别设置循环次数为永远,可能会导致测试机器资源不足,影响测试结果的准确性;而设置得太低可能无法达到测试要求。因此,需要根据具体情况进行合理的设置。

示例接口代码


@ThreadGroup.route('/api/ThreadGroup2/', methods=['GET', 'POST'])
def threadgroup1():
    return "我是响应"

示例Jmeter脚本


  • 测试计划下,添加1个线程组

    循环次数:3

  • 线程组下,添加HTTP请求取样器

    请求地址:HTTP://127.0.0.1:5000/api/ThreadGroup2/

    请求方式:GET

  • 测试计划中,添加查看结果树

Jmeter线程组-上

演示内容


运行,查看结果树

Jmeter线程组-上

图中取样器结果中的Thread Name皆为线程组 1-1。这是因为线程组循环次数值为3,Jmeter启功了1个线程,连续执行了3次线程组

在Jmeter中1个线程就代表1个用户,现在就相当于1个用户执行了3次线程组


取样器错误后执行的动作


在JMeter中,取样器(Sampler)是用于模拟用户请求发送到目标服务器的组件,例如HTTP请求、FTP请求等。当取样器执行过程中出现错误时,可以通过配置相应的动作来处理这些错误。以下是一些处理取样器错误时,线程组中常见方式:

  • 停止测试
  • 立即停止测试
  • 停止线程
  • 启动下一进程循环
  • 继续

通过合理配置这些错误处理方式,可以根据测试需求和场景来控制测试计划的行为,确保对错误有适当的响应和处理。


停止测试


设置取样器错误后执行的动作停止测试时,一旦任何一个取样器遇到错误,整个测试计划将会在所有当前正在执行的线程执行完毕后停止。这可以用于模拟在测试过程中发生重要错误或异常时的行为。

这种设置确保在测试执行中任何关键的错误都会导致测试的终止,以便进行及时的识别和处理。这对于模拟真实世界中的异常情况以及确保测试的准确性和可重复性都是非常重要的。

示例接口代码


@ThreadGroup.route('/api/ThreadGroup3/', methods=['GET', 'POST'])
def threadgroup3():
    if request.method == 'GET':  # `错误请求`立即响应
        return {'code': 200}
    sleep(3)  # 延长非`错误请求`的请求时间
    return {'code': 200}  # `非错误请求`延迟响应

单线程组


示例Jmeter脚本

  • 测试计划下添加线程组

  • 线程组下添加2个HTTP 请求取样器

    名称:错误请求正确请求

    请求地址:HTTP://127.0.0.1:5000/api/ThreadGroup3/

    正确请求的请求方式:POST

    错误请求的请求方式:GET

  • 错误请求取样器下添加响应断言

    值:1111

  • 测试计划中,添加查看结果树

Jmeter线程组-上

演示内容

运行,查看结果树

Jmeter线程组-上

图中连续请求了三次,结果是一致的。

取样器在线程组中一般是从上至下顺序执行。错误请求的结果报错后,因为设置取样器错误后执行的动作停止测试,同时没有其他正在执行的线程,Jmeter直接结束本次测试。

删除响应断言,再次运行

Jmeter线程组-上

图中连续请求了三次,结果是一致的。

取样器在线程组中一般是从上至下顺序执行。因为错误请求的结果没有报错,会继续执行正确请求

多线程组


示例Jmeter脚本

  • 测试计划下添加2个线程组

    名称:线程组1线程组2

  • 线程组1下添加HTTP 请求取样器

    名称:错误请求

    请求地址:HTTP://127.0.0.1:5000/api/ThreadGroup3/

    请求方式:GET

  • 线程组2下添加2个HTTP 请求取样器

    名称:与错误请求并行的正确请求错误请求之后的正确请求

    请求地址:HTTP://127.0.0.1:5000/api/ThreadGroup3/

    请求方式:POST

  • 错误请求取样器下添加响应断言

    值:1111

  • 错误请求之后的正确请求取样器下添加固定定时器(右键取样器-添加-定时器-固定定时器)

    线程延迟:3000

  • 测试计划中,添加查看结果树

Jmeter线程组-上

固定定时器可以延迟取样器的执行时间,设置为3秒,可以确保错误请求之后的正确请求错误请求结束后执行。

演示内容

运行,查看结果树

Jmeter线程组-上

图中连续请求了三次,结果是一致的。

取样器在线程组中一般是从上至下顺序执行,线程组一般并发执行的。错误请求的结果报错时,与错误请求并行的正确请求也正在执行,错误请求之后的正确请求还未执行。

因为设置取样器错误后执行的动作停止测试,待与错误请求并行的正确请求结束后不会执行错误请求之后的正确请求,Jmeter直接结束本次测试。

此时,测试计划中未勾选独立运行每个线程组

勾选独立运行每个线程组,再次运行

Jmeter线程组-上

图中连续运行了5次,但是结果不符合预期。预期结果应该是不会执行线程组2,但是执行了。应该是Jmeter的一个BUG(或许是独立运行每个线程组的问题)。读者请谨慎使用。


立即停止测试


设置取样器错误后执行的动作立即停止测试时,当取样器在执行过程中遇到错误时,JMeter会立即停止当前运行的测试,不再执行任何后续的请求或操作。

这有助于保护应用程序免受可能导致问题的异常或错误的影响,并确保测试结果的准确性。

这种设置对于测试场景中的稳定性和可靠性非常重要,特别是在模拟并发用户或大负载情况下,能够及时发现问题并停止测试,有助于减少潜在的影响和损害。

示例接口代码


@ThreadGroup.route('/api/ThreadGroup3/', methods=['GET', 'POST'])
def threadgroup3():
    if request.method == 'GET':  # `错误请求`立即响应
        return {'code': 200}
    sleep(3)  # 延长非`错误请求`的请求时间
    return {'code': 200}  # `非错误请求`延迟响应

单线程组


示例Jmeter脚本

  • 测试计划下添加线程组

  • 线程组下添加2个HTTP 请求取样器

    名称:错误请求正确请求

    请求地址:HTTP://127.0.0.1:5000/api/ThreadGroup3/

    正确请求的请求方式:POST

    错误请求的请求方式:GET

  • 错误请求取样器下添加响应断言

    值:1111

  • 测试计划中,添加查看结果树

Jmeter线程组-上

演示内容

运行,查看结果树

Jmeter线程组-上

图中连续请求了三次,结果是一致的。

取样器在线程组中一般是从上至下顺序执行。错误请求的结果报错后,因为设置取样器错误后执行的动作立即停止测试,Jmeter直接结束本次测试。

删除响应断言,再次运行

Jmeter线程组-上

图中连续请求了三次,结果是一致的。

取样器在线程组中一般是从上至下顺序执行。因为错误请求的结果没有报错,会继续执行正确请求

多线程组


示例Jmeter脚本

  • 测试计划下添加2个线程组

    名称:线程组1线程组2

  • 线程组1下添加HTTP 请求取样器

    名称:错误请求

    请求地址:HTTP://127.0.0.1:5000/api/ThreadGroup3/

    请求方式:GET

  • 线程组2下添加2个HTTP 请求取样器

    名称:与错误请求并行的正确请求错误请求之后的正确请求

    请求地址:HTTP://127.0.0.1:5000/api/ThreadGroup3/

    请求方式:POST

  • 错误请求取样器下添加响应断言

    值:1111

  • 错误请求之后的正确请求取样器下添加固定定时器(右键取样器-添加-定时器-固定定时器)

    线程延迟:3000

  • 测试计划中,添加查看结果树

Jmeter线程组-上

固定定时器可以延迟取样器的执行时间,设置为3秒,可以确保错误请求之后的正确请求错误请求结束后执行。

演示内容

运行,查看结果树

Jmeter线程组-上

图中连续请求了三次,结果是一致的。

取样器在线程组中一般是从上至下顺序执行,线程组一般并发执行的。错误请求的结果报错时,与错误请求并行的正确请求也正在执行,错误请求之后的正确请求还未执行。

因为设置取样器错误后执行的动作立即停止测试,不会等待与错误请求并行的正确请求结束,Jmeter会直接结束本次测试,因此与错误请求并行的正确请求的响应结果提示 Socket 关闭异常。

此时,测试计划中未勾选独立运行每个线程组

勾选独立运行每个线程组,再次运行

Jmeter线程组-上

图中连续运行了2次,但是结果不符合预期。预期结果应该是不会执行线程组2,但是执行了。应该是Jmeter的一个BUG(或许是独立运行每个线程组的问题)。读者请谨慎使用。


提示


本文示例接口源代码可从前言中下载。文章来源地址https://www.toymoban.com/news/detail-844410.html


到了这里,关于Jmeter线程组-上的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Jmeter(六) - 从入门到精通 - 建立数据库测试计划(详解教程)

    1.简介   在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,因此这篇文章主要介绍了jmeter连接和创建数据库测试计划的过程,在文中通过示例和代码非常详细地介绍给大家,希望对各位小伙伴和童鞋们的学习或者工作具有

    2024年02月13日
    浏览(75)
  • Jmeter(二) - 从入门到精通 - 创建测试计划(Test Plan)(详解教程)

    1.简介 上一篇中已经教你把JMeter的测试环境搭建起来了,那么这一篇我们就将JMeter启动起来,一睹其芳容,首先宏哥给大家介绍一下如何来创建一个测试计划(Test Plan)。 2.创建一个测试计划(Test Plan) 测试计划(Test Plan)描述了一系列Jmeter运行时将要执行的一系列步骤。完

    2024年02月14日
    浏览(41)
  • 测试工具Jmeter:界面介绍、核心选项说明、核心选项用途

    本文章主要介绍Jmeter的界面布局,以及各个选项的功能和它们的用途。 JMeter基本原理是建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,通过监听器来记录测试结果。 当我们打开Jmeter,首先映入眼帘的是以下界面: Jmeter主界面

    2024年02月03日
    浏览(46)
  • Jmeter(七) - 从入门到精通 - 建立数据库测试计划实战<MySQL数据库>(详解教程)

    1.简介   在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,上一篇文章主要介绍了jmeter连接和创建数据库测试计划的过程,在文中通过示例和代码非常详细地介绍给大家,希望对各位小伙伴和童鞋们的学习或者工作具有一

    2024年02月13日
    浏览(57)
  • 【测试沉思录】19. 如何设置 JMeter 线程组?

    作者:宋赟 编辑:毕小烦 最近有不少测试同学问我 JMeter 线程组如何设置并发的问题,发现很多人对线程组里的参数不是很清楚,今天就科普一下 JMeter 线程组的信息,也简单介绍一下不同场景的并发策略。 一个线程相当于一个虚拟用户,线程组顾名思义是多个线程的一个集

    2023年04月19日
    浏览(61)
  • Jmeter场景组合测试——多个线程组的设计方案

    我们绝大多数同学在使用jmeter进行性能测试时都会在一个线程组中完成测试工作,今天我来重点讲解一下jmeter多个线程组在测试中的应用,这也是关于jmeter性能测试面试过程中的进阶问题,希望能够帮到大家来解决工作中不同的测试需求。 首先大家需要明确一件事儿,在jm

    2023年04月15日
    浏览(42)
  • 接口测试之jmeter不同线程组之间的参数共享

    思路:创建两个线程组,第一个线程组里面的 “登陆接口” 中登陆成功后获取到的token,要作为第二个线程组的http请求头中的参数信息 【ps:很多时候跨线程无法获取到参数就是没有勾选这个选项导致的】 注意:jmeter本身的内置函数中,“__setProperty()” 函数可以把某参数的

    2023年04月09日
    浏览(43)
  • JMeter从数据库中获取数据并作为变量使用

    目录 前言: 1、JMeter连接MySQL数据库 2、线程组下新建一个 JDBC Connection Configuration 配置元件 3、实现数据库的查询-单值引用 4、实现数据库的查询-多值引用 前言: 在进行接口测试时,经常需要使用一些动态的数据,例如从数据库中获取用户信息、配置参数等。JMeter提供了多个

    2024年02月12日
    浏览(45)
  • JMeter如何从数据库中获取数据并作为变量使用?

    目录 前言 1、JMeter连接MySQL数据库 2、线程组下新建一个 JDBC Connection Configuration 配置元件 3、实现数据库的查询-单值引用 4、实现数据库的查询-多值引用 总结: JMeter 如何从数据库中获取数据并作为变量使用?这在我们使用 JMeter 做 接口测试 、 压力测试 时经常碰到,今天通

    2024年02月08日
    浏览(76)
  • 【Jmeter】Request1输出作为Request2输入-后置处理器

    【Jmeter】基础介绍-详细 接上文,继续介绍Jmeter,本文关注点为如何解决上文中提到的第一个问题,即: 需要实现Request1的返回作为Request2的RequestBody或Header Jmeter支持后置处理器,即对http请求(或其他取样器)的返回值进行提取并赋值给变量。 本例中从Request1的ResponseBody中提

    2023年04月20日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包