当前位置: 首页 > news >正文

jmeter 执行顺序和组件作用域

本章节主要讲解“JMeter执行顺序与作用域”的内容,类似于运算符或操作符的优先级,当JMeter测试中包含多个不同的元素时,哪些元素先执行,哪些元素后执行,并不是严格按照它们出现的先后顺序依次有序执行的,而是会遵循一定的内部规则,我们称之为JMeter元素的执行顺序。

一.执行顺序

一般情况下JMeter元素按照如下顺序依次执行:

  • 0、 配置元件(Config Element) 
  • 1、前置处理器(Pre Processors) 
  • 2、定时器(Timer) 
  • 3、取样器(Sampler) 
  • 4、后置处理器(Post Processors) 
  • 5、断言(Assertions) 
  • 6、监听器(Listener)

  • 注意,只有取样器结果不为空的情况下才会执行4、5、6。

一个简单的例子:

二.组件作用域

1、JMeter测试树元素分类

  • 在JMeter的GUI界面,测试计划就是一颗树,Test Plan是树的根节点,其他元素都是其子孙从作用域的角度来看,测试树中的元素可以分为两大类:

01、具有层次结构的元素

  • 这类元素的作用域与其所处的层次有关.
  • 这类元素包括:配置元件,前置处理器,定时器,后置处理器,断言,监听器这6大组件.

02、具有顺序结构的元素

  • 这类元素一般严格按照其出现的先后顺序依次有序的执行.
  • 这类元素不会对其他元素的功能有影响,只是起控制作用,没有作用域的概念.这类元素包括取样器与逻辑控制器.

另外,还有剩下的线程组比较特殊,线程组也不会影响其他元素的功能,但是线程组的执行顺序是可以配置的,若测试计划下包含多个线程组,默认是并行执行的,若要按照其出现的顺序依次执行,需要在测试计划下勾选"Run Thread Groups consecutively (i.e. one at a time)".

2、作用域

  • JMeter组件作用域指的是JMeter组件(配置元件,前置处理器,定时器,后置处理器,断言,监听器)起作用的范围,在此范围内组件是有效的,可以影响取样器的行为.
  • 从前面的内容可以看出,JMeter作用域是针对组件而言的,只有层次结构的组件才有作用域的概念.

3、JMeter组件作用域规则

  • 按照组件的父节点不同,组件的作用域有如下类型:

(1)取样器作用域

  • 父节点为取样器的组件具有的作用域,仅对该取样器起作用;

(2)逻辑控制器作用域

  • 父节点为逻辑控制器的组件具有的作用域,对该逻辑控制器下的所有取样器起作用;

(3)线程组作用域

  • 父节点为线程组的组件具有的作用域,对该线程组下的所有取样器起作用;

(4)测试计划作用域

  • 父节点为测试计划的组件具有的作用域,对测试计划下的所有取样器起作用

特殊情况

1.配置元件(Config Elemnet)-->用户自定义变量组件(User Defined Variables):这个组件不管放在哪个位置,它定义的变量都会被整个线程所共享。

2.jmeter beanshell vars.put 变量作用域 :线程局部,执行线程所有当前和未执行的取样器都可以访问。

3.jmeter 中所有变量可见性至少是线程组级别的,所有变量至少是线程组内共用;用户定义的变量(配置元件)只运行一次赋值(初始化)操作,用户参数(前置处理器)根据其作用域每次取样器运行前都执行一次赋值(初始化)操作;用户定义的变量是全局的,同一个测试计划下所有线程组都可以访问,用户参数是局部的,只能被本线程组访问;

补充

1. 前一个组件定义的变量,在后续所有组件的执行过程中有效

2. 变量分为线程变量、线程组变量、全局共享变量

A:线程变量的修改一般只对本线程有效,只会影响本线程的下一次迭代,不会跨线程(重点)

B:线程组变量的修改会对整个线程组生效,在线程组内跨线程

(比如像 csv 配置元件中的线程组共享)

C:全局的变量的修改会对所有线程组生效

(比如像 csv 配置元件中的全局共享,全局 Counter 计数器等)

3. 变量的定义尽量往外层放置,最好不要放置在业务逻辑中,理解起来比较反常 (动态变量除外)

http://www.xdnf.cn/news/307333.html

相关文章:

  • Blender插件机制设计与Python实现
  • Qt学习Day0:Qt简介
  • [人机交互]协作与通信的设计
  • 数据管理平台是什么?企业应如何做好数据化管理?
  • 巧记英语四级单词 Unit7-下【晓艳老师版】
  • [java八股文][Java并发编程面试篇]并发安全
  • Android Service 从 1.0 到 16 的演进史
  • SQL报错注入成功特征
  • 人工智能100问☞第15问:人工智能的常见分类方式有哪些?
  • Unity Editor 扩展:查找缺失的 Image Sprite
  • 从入门到登峰-嵌入式Tracker定位算法全景之旅 Part 7 |TinyML 定位:深度模型在 MCU 上的部署
  • HarmonyOS开发:粒子动画使用详解
  • idea更换jdk版本操作
  • 分布式、高并发-Day03
  • 开源BI选型及DataEase搭建
  • 香港维尔利健康科技集团与亚洲医学研究院达成战略合作,联合打造智慧医疗应用技术实验室
  • ES6/ES11知识点 续五
  • 单调栈算法精解(Java实现):从原理到高频面试题
  • [250504] Moonshot AI 发布 Kimi-Audio:开源通用音频大模型,驱动多模态 AI 新浪潮
  • Android数据库全栈开发实战:Room+SQLCipher+Hilt企业级应用构建
  • 【计算机网络】TCP/IP四层模型是什么?与OSI七层模型哪些区别?
  • 提示词的 嵌入空间优化
  • ECMAScript 6(ES6):JavaScript 现代化的革命性升级
  • 使用蚁群算法求解VRPTW问题
  • 信息系统项目管理工程师备考计算类真题讲解十三
  • 光纤失效模式及其影响
  • n8n 与智能体构建:开发自动化 AI 作业的基础平台
  • 单例模式的实现方法
  • Android SDK 国内镜像及配置方法(2025最新,包好使!)
  • MySQL同步ES的6种方案!