jemeter(10)-从入门到精通-逻辑控制器(中)
4.1Critical Section Controller
The Critical Section Controller ensures that its children elements (samplers/controllers, etc.) will be executed by only one thread as a named lock will be taken before executing children of controller
翻译:临界区控制器确保其子元素(采样器/控制器等)将仅由一个线程执行,因为在执行控制器的子元素之前将获取命名锁
2、关键参数说明如下:
Name:名称,可以随意设置,甚至为空;
Comments:注释,可随意设置,可以为空;
Lock name:锁名称,这里可以填入其子节点下执行的线程的名称,这个线程作为一个全局锁存在
4.1.2锁名分类
(1)锁名为空,认为每个锁为不同的锁
(2)锁名相同,多个锁认为是同一个锁,同一个时间点只能存在一个运行中
(3)锁名为变量,根据变量值来判断是不是属于同一个锁,变量值为相同时,则认为是同一个锁
4.2ForEach Controller
ForEach 控制器:一般搭配用户变量使用。依次调用用户定义的变量,直到最后一个,结束循环。为了满足ForEach Controller提取数据,变量命名的格式一般为“变量名_数字”,其中数字从1开始。
1、即遍历循环控制器,顾名思义是定义一个循环规则。
2、用来遍历当前元素的所有可执行场景。
3、在用户自定义变量中读取一系列相关的变量,该控制器下的采样器或控制器都会被执行一次或多次,每次读取不同的变量值。
4、这个控制器一般配合配置元件 → 正则表达式提取器来一起使用,可对页面上的某些元素进行重复处理。
Name:名称,可以随意设置,甚至为空;
Comments:注释,可随意设置,可以为空;
Input variable prefix:输入变量前缀,可以在“用户自定义变量”中定义一组变量,循环控制器可以从中获取到变量对应的值,然后作为循环控制器的循环条件,还可以输出变量作为取样器的参数。
Start index for loop:循环变量下标起点。循环指数开始(唯一)→ 遍历查询的变量范围,开始的值(这里如果不填写,默认从 1 开始,如果没有 1 开始的变量,执行时会报错)
End index for loop:循环变量下标终点。循环指数结束(包含)→ 遍历查询的变量范围,结束的值
Output variable name:输出变量名称,循环控制器生成的变量名称。后续可通过${}引用
Add "_" before number ?: 变量前缀后是否加“_”作为分隔符。如果定义的变量名中有下划线的话就要勾选此项,否则找不到;反之,没有的话不要勾选,否则同样找不
循环遍历的例子:
1、用户自定义变量
2、foreach controller
3、加一个请求
4.3Include Controller
Include控制器用来导入外部的测试片段(非完整的测试计划),在执行时会执行导入的测试计划,但是被导入的测试计划有特殊要求,它不能有线程组,只能包含简单的控制器及控制器下的元件。换句话说就是相当于加了一个执行单元,一个封装了的业务操作单元,类似我们程序开发中的函数(方法)一样。例如一个查询学生信息的业务操作我们用取样器来模拟,然后放到简单控制器中作为一个执行单元,别的地方也要用到时,我们可以不用重复造轮子直接引用过来。
一般来说,Include控制器和测试片段(Test Fragment)配合使用的比较常见。
2、关键参数说明如下:
Name:名称,可以随意设置,甚至为空;
Comments:注释,可随意设置,可以为空;
Filename:文件名,必输字段,如果没有,就会报错。通过Filename的路径和文件名引用外部的jmx文件。
宏哥推荐小伙伴或者童鞋们可以将 Include控制器 与 Module控制器(传送门)一起对比着学习,Include控制器 是从外部文件引用,只能引用整个测试片段的内容,Module控制器 是从内部文件中引用,引用上相对比较灵活,可以只引用部分测试片段或模块内容。这样一内一外不仅容易理解也容易记忆和学习。
到这里,大家应该理解了 Include Controller 和 Test Fragment 了吧。宏哥的理解就是,Test Fragment 相当于一个独立的部分,可以被其他测试计划引用,实现 样例的片段化,模块化,遇到重复需要的,比如登录、注册之类的,就可以用Test Fragment 和 Include Controller 了。这样可以避免重复造轮子,做许多无用功。
include controll 控制器 例子
4.3.1实例
(1)当Filename路径的值为空,程序执行报错,脚本执行中止,不会继续执行下面的脚本内容。
1、首先创建一个Filename路径为空的测试计划,如下图所示:
2、运行JMeter,查看结果树(程序执行报错,脚本执行中止,不会继续执行下面 访问博客园首页 的取样器),如下图所示:
(2)当Filename路径中的文件不存在,程序直接弹窗报错并停止执行。
1、首先创建一个Filename路径中的文件不存在的测试计划,点击“保存”按钮的时候,就会直接弹窗报错。如下图所示:
(3)当Filename路径的文件中不包含测试片段,跳过控制器,继续向下执行。
1、首先创建一个外部引用没有测试片段的测试计划,如下图所示:
2、创建一个Filename路径的文件中不包含测试片段的测试计划,将上边的外部引用-无测试片段文件添加到Include控制器中,如下图所示:
3、运行JMeter,查看结果树(跳过控制器,继续向下执行 访问博客园首页 的取样器),如下图所示:
(3)当Filename路径的文件中包含测试片段,执行完控制器,再继续向下执行。
1、首先创建一个外部引用有测试片段的测试计划,如下图所示:
2、创建一个Filename路径的文件中包含测试片段的测试计划,将上边的外部引用-有测试片段文件添加到Include控制器中,如下图所示:
3、运行JMeter,查看结果树(执行完控制器里的测试片段,再继续向下执行 访问博客园首页 的取样器),如下图所示:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律