JMeter元件作用域实践指南
从一个问题说起
对于以下测试脚本:

为了能调用进入房间接口,需要从考场接口获取考场token。为了调用考场接口,需要从登陆接口获取登陆token。元件说明如下:
学生登录,提取登录
${token}传入下个接口参数。添加HTTP Header Manager:

考场token,提取考场
${exam_token}传入下个接口参数。添加HTTP Header Manager:

进入房间
貌似挺合理,HTTP Header Manager会给下方的接口添加请求头,运行结果真的如我们所料么?
运行顺序
在回答这个问题之前,有必要搞懂JMeter元件的运行顺序,它是由2 个维度来决定的:从上往下和元件类型。
从上往下,即目录树从上往下。元件类型,分为3类:
- 线程组、逻辑控制器。
- 取样器。
- 配置元件、前置处理器、定时器、后置处理器、断言、监听器。
它们的运行顺序如下:
配置元件(如果存在)
前置处理器(如果存在)
定时器(如果存在)
取样器(如果存在)
后置处理器(如果存在且取样器的结果不为空)
断言(如果存在且取样器的结果不为空)
监听器(如果存在且取样器的结果不为空)
换句话说,假设我们新建了1个线程,想用这个线程去发请求。
第一步,初始化配置,比如参数化、设置Header、Cookie等,用到配置元件。
第二步,可能需要给线程加点参数,比如用户参数,用到前置处理器。
第三步,在发送请求前可能会等待一段时间,用到定时器。
第四步,发送请求,用到取样器。
第五步,可能需要提取响应数据,比如正则表达式提取器、JMESPath提取器,用到后置处理器。
第六步,验证结果符合预期,用到断言。
第七步,查看请求响应数据和测试结果,用到监听器。
实践指南
对于以下所列元件:

JMeter会按以下步骤运行:
- 线程组(如果有多个线程组可以在测试计划设置是顺序执行还是同时执行)
- 简单控制器(父节点)
- HTTP Cookie管理器(配置元件)
- 用户参数(前置处理器)
- Synchronizing Timer(定时器)
- HTTP 请求1(取样器)
- 正则表达式提取器(后置处理器)
- 响应断言(断言)
- HTTP Cookie管理器(配置元件)
- 用户参数(前置处理器)
- Synchronizing Timer(定时器)
- HTTP 请求2(取样器)
- 正则表达式提取器(后置处理器)
- 响应断言(断言)
- HTTP 请求3(取样器)
- 察看结果树(严格来讲是与第 6 步并行,也就是取样器之后)
作用域
其中有个观察作用域实际效果的关键元件:HTTP请求2,它的前后并没有元件,但是也被作用上了。在JMeter中,同一层级的元件具有相同的作用域!
简单控制器是一个执行单元,本身没有内容,它的作用是把元件进行分组:
因为简单控制器通过分组给元件划分了层级,所以简单控制器下面的这些同层级元件,作用域相同,既会作用于 HTTP请求1,也会作用于HTTP请求2。注意了!配置元件、前置处理器、定时器、后置处理器、断言、监听器,这六个组件,会作用到范围内的所有取样器。
除了同级作用域,还有上下级,JMeter的上级作用域包含下级作用域,但是下级是不能作用到上级。比如HTTP请求3,简单控制器下级的元件,是不会作用到HTTP请求3的。
回答开头的问题

HTTP Header Manager是配置元件,会作用到范围内的所有取样器。这里有2个HTTP Header Manager,都位于同一层级,它们会一起执行。在JMeter同一执行单元中,如果相同类型的元件有多个,那么它们会被当做一个一起执行!
测试一下,把最后一个HTTP Header Manager的authorization重命名为authorization2,查看考场接口的Headers:

两个HTTP Header Manager都作用上了。
为了避免混乱,在实际使用时建议:
- 根据先后顺序,从上往下合理的放置元件的顺序。
- 对于配置元件、前置处理器、定时器、后置处理器、断言这六类元件,它们都是为取样器服务的,如果只想作用于单个取样器,那么最好放在这个取样器的下级。
按照建议调整后的测试脚本如下:

User Defined Variables和CSV Data Set Config,是配置元件,且跟取样器同级,会同时作用到这 3 个取样器上面。
小结
本文开头引入了我在实际工作中碰到的问题,为了解决,先搞懂了JMeter元件运行顺序,然后参考了实践指南,发现了同一层级作用域相同这个原理,总结出了使用建议,配置元件、前置处理器、定时器、后置处理器、断言这六类元件,最好放在取样器的下级,调整后脚本如期运行。
JMeter元件作用域实践指南的更多相关文章
- Jmeter元件作用域
转载自飞测团队
- Jmeter入门--元件作用域和执行顺序
一.元件作用域 8类可被执行的元件(测试计划于线程组不属于可执行元件),这些元件中,取样器(Sampler)是典型的不与其他元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效,而其他元件(配置 ...
- JMeter元件的作用域与执行顺序
元件的作用域 先来讨论一下元件有作用域.<JMeter基础元件介绍>一节中,我们介绍了8类可被执行的元件(测试计划与线程组不属于元件),这些元件中,取样器 是典型的不与其它元件发生交互作用 ...
- 学了元件作用域,我终于对JMeter开窍了
引子 先看一下这个例子,测试计划"进入考场"下面有一个线程组,线程组下面有 3 个 HTTP 请求,分别是学生登录.考场 token和进入房间: 它们的处理逻辑是: 学生登录后,在 ...
- 转 6 jmeter元件的作用域与执行顺序
6 jmeter元件的作用域与执行顺序 元件的作用域 配置元件(config elements)会影响其作用范围内的所有元件.前置处理程序(Per-processors)在其作用范围内的每一个sa ...
- jmeter元件,作用域与优先级
jmeter元件,作用域与优先级 一.jmeter元件 1.配置元件:优先级最高 1.1 重点使用元件:csv数据文件设置.用户定义变量.计数器 2.取样器:根据不同协议来编写请求脚本的元件 2.1 ...
- 性能测试工具Jmeter06-Jmeter元件作用域和执行顺序
元件作用域 8类可被执行的元件(测试计划与线程组不属于可执行元件),这些元件中,取样器(sampler)是典型的不与其它元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效,而其它元件(配置元件 ...
- jmeter元件作用及执行顺序
jmeter是一个开源的性能测试工具,它可以通过鼠标拖拽来随意改变元件之间的顺序以及元件的父子关系,那么随着它们的顺序和所在的域不同,它们在执行的时候,也会有很多不同. jmeter的test pla ...
- Celery的实践指南
http://www.cnblogs.com/ToDoToTry/p/5453149.html Celery的实践指南 Celery的实践指南 celery原理: celery实际上是实现了一个典 ...
随机推荐
- browsers simulator
browsers simulator https://developers.google.com/web/tools/chrome-devtools/device-mode/testing-other ...
- Flutter CodePen challenges
Flutter CodePen challenges 挑战赛 https://mp.weixin.qq.com/s/qIYokWN9SVgr-F7YxbJuOQ CodePen Flutter 编辑器 ...
- 为什么建议选择居住在墨尔本CBD以南2公里内
英国房地产公司PAUL ADAMS ARCHITECT ,简称PPA(公司编号:07635831)成立于2011年,是一家成立近十年的老牌房地产公司.PAA公司一直有着自己的房地产理念,秉持房子是用来 ...
- 「NGK每日快讯」11.23日NGK公链第21期官方快讯!
- ffmpeg:为视频添加静态水印
在ffmpeg中,添加水印需要用overlay滤镜,这是一个复杂滤镜,因为它需要两个输入,默认第一个输入是主画面,第二输入为水印,先执行一个简单的看看. 下面有两个文件,一个是可爱的大雄兔,一个是可爱 ...
- 第28天学习打卡(Date和Calendar类 基本类型的包装类 集合 增强for循环 )
Date和Calendar类 简介 日期和日历类,用于操作日期相关信息. 构造方法 Date(): 构造一个日期对象,当前系统时间,精确到毫秒. Date(long): 构造一个日期对象,时间为自&q ...
- SpringCloud(一):微服务架构概述
1-1. 系统进化理论概述 在系统架构与设计的实践中,经历了两个阶段,一个阶段是早些年常见的集中式系统,一个阶段是近年来流行的分布式系统: 集中式系统: 集中式系统也叫单体应用,就是把所有的程序.功 ...
- JUnit5学习之七:参数化测试(Parameterized Tests)进阶
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- C# ref and out
相同点: 1. ref 和 out 都是按地址传递的,使用后都将改变原来参数的数值: 2. 方法定义和调用方法都必须显式使用 ref 或者 out关键字: 3. 通过ref 和 ref 特性,一定程度 ...
- Blackduck的Hub安装教程
1 产品介绍 Black Duck 是最早进行开源代码检测工具开发的公司,其产品包括Protex 和HUB,Protex 强调检测的精度和准确性,而HUB 强调检测的速度和易用性. 1.1 Prote ...
