![](https://uploader.shimo.im/f/pHQ4Kiy7VB1aY3s0.png!thumbnail)
ForEach控制器
![](https://uploader.shimo.im/f/2s4O2xCQSAXtAVt6.png!thumbnail)
- 输入变了前缀:可在“用户自定义的变量”中定义一组变量,循环控制器可以从中获取到变量对应的值,然后作为循环控制器的循环条件,还可以输出变量作为取样器的参数。
- 开始循环字段(不包含):循环下标起点
- 结束循环字段(包含):循环下标终点
- 输出变量名称:循环控制器生成的变量名称
- 数字之前加上下划线“_”?:变量前缀后是否加“_”作为分隔符
例:
1、访问https://jmeter.apache.org/demos/
![](https://uploader.shimo.im/f/wornmTrwvsz4yrbT.png!thumbnail)
![](https://uploader.shimo.im/f/eYwQFo0fzrY5R54o.png!thumbnail)
2、正则表达式提取第一步中的所有链接【<a href="([^>]+.jmx)"】
![](https://uploader.shimo.im/f/DG5lUNjuMfUZr7Hb.png!thumbnail)
3、添加一个ForEach控制器
![](https://uploader.shimo.im/f/hyAK0Ca4yXmlftcr.png!thumbnail)
4、在ForEach控制器中添加一个HTTP请求,参数由ForEach控制器传递过来
![](https://uploader.shimo.im/f/2ogUMgsUXZammqli.png!thumbnail)
5、添加一个监控器-查看结果树,运行
![](https://uploader.shimo.im/f/EMlMvSnUJ5H1iViE.png!thumbnail)
简单控制器
![](https://uploader.shimo.im/f/HyJxVgb1BtyVy2AW.png!thumbnail)
Include控制器
用来导入外部测试片段,在执行时会导入的测试计划,但是被导入的测试计划有特殊要求,不能有线程组,只能包含配置元件。
![](https://uploader.shimo.im/f/LAf48w4XPjIK0H6O.png!thumbnail)
![](https://uploader.shimo.im/f/mR6cg0kQ8wwwPgJK.png!thumbnail)
![](https://uploader.shimo.im/f/gMCTCDh1o89Ew8DF.png!thumbnail)
Runtime控制器
![](https://uploader.shimo.im/f/sZ41URT8yJMo4lf8.png!thumbnail)
运行时控制器控制其子代运行多长时间。控制器将运行其子级,直到超过已配置的运行时间。
- Runtime(seconds):默认1,所需的运行时间(以秒为单位)。0表示不运行。
Switch控制器
![](https://uploader.shimo.im/f/rkQWf8asrZz83mps.png!thumbnail)
- Switch Value:JMeter会给节点下取样器编号(0开始)
- 可以是数字,如果编号超出了范围,则运行第0个取样器。
- 可以是字符,为字符时匹配取样器名称,如果匹配不上会默认找名称为default的取样器,没有则不运行。
While控制器
其节点下的元件将一直运行直到While条件为false
![](https://uploader.shimo.im/f/3G7w6icaq32nMjp1.png!thumbnail)
- Condition(function or variable):
- 接受变量表达式与变量, 如${inputvar}<10
- Blank:当循环中有取样器失败后停止
- LAST:当循环前有取样器失败则不进入循环
- Otherwise:当判断条件为false时停止循环
交替控制器
其节点下的取样器会交替执行
![](https://uploader.shimo.im/f/95UY2UnT0iuQWL7c.png!thumbnail)
- 忽略子控制器模块:即子控制器失败,由交替控制器接管。
![](https://uploader.shimo.im/f/GLeQXxjeHNadLA5Y.png!thumbnail)
仅一次控制器
控制器下的元件只运行一次
- 把仅一次控制器放在循环控制器下面,也只运行一次
- 把仅一次控制器放在线程组下面,也只运行一次
吞吐量控制器
![](https://uploader.shimo.im/f/YbdBorTjMg8b5Xyk.png!thumbnail)
用来控制其下元件的执行次数
- Percent Executions:按照执行次数百分百来计算执行次数,此时吞吐量的取值是0~100。
- Per User:
- 勾选:按虚拟用户数来计算执行总次数
- 不勾选:按照所有虚拟用户数来计算执行总次数
- Total Executions:按照吞吐量的值来指定执行次数,可以是任意整数,如果小于等于0则一次也不执行。
序号
|
线程数
|
循环次数
|
模式
|
吞吐量
|
Per User
|
执行次数
|
1
|
2
|
10
|
percent
|
50
|
Y
|
10
|
2
|
2
|
10
|
percent
|
50
|
N
|
10
|
3
|
2
|
10
|
total
|
7
|
Y
|
14
|
4
|
2
|
10
|
total
|
7
|
N
|
7
|
5
|
2
|
2
|
total
|
7
|
Y
|
4
|
6
|
2
|
2
|
total
|
7
|
N
|
4
|
- 序号1:线程2,循环次数10,总共20次,吞吐量50%,20*50%=10次。
- 序号2:线程2,循环次数10,总共20次,吞吐量50%,20*50%=10次。
- 序号3:线程2,循环次数10,总共20次,吞吐量7次,Per User勾选,2*7=14次。
- 序号4:线程2,循环次数10,总共20次,吞吐量7次,Per User不勾选,总共7次。
- 序号5:线程2,循环次数2,总共4次,吞吐量7次,由于线程总计划是4次,最多4次。
- 序号6:线程2,循环次数2,总共4次,吞吐量7次,由于线程总计划是4次,最多4次。
如果(If)控制器
If Controller允许用户控制其下的测试元素(其子元素)是否运行。
![](https://uploader.shimo.im/f/JuJ1Xh7T70advtP5.png!thumbnail)
- Evaluate for all children: 判断条件是否针对所有子节点
- $ {__ groovy(vars.get(“ myVar”)!=“ Invalid”)}(检查myVar不等于Invalid)
- $ {__ groovy(vars.get(“ myInt”)。toInteger()<= 4)}(检查myInt小于或等于4)
- $ {__ groovy(vars.get(“ myMissing”)!= null)}(仔细检查是否未设置myMissing变量)
- $ {__ jexl3($ {COUNT} <10)}
- $ {RESULT}
- $ {JMeterThread.last_sample_ok}(检查最后一个样本是否成功)
随机控制器
节点下的元件随机运行
随机顺序控制器
节点下的元件随机执行,不过每个元件只执行一次
循环控制器
![](https://uploader.shimo.im/f/gzTRPHjxTdnGy1IA.png!thumbnail)
录制控制器
使用JMeter代理进行录制时,录制脚本默认放在此控制器节点下。没有实际的逻辑作用。
![](https://uploader.shimo.im/f/p70Cxd6QQqdzez0S.png!thumbnail)
事务控制器
事务响应时间是我们衡量业务性能的主要指标,事务控制器可以把其节点下的取样器执行小号时间累加在一起,便于统计。
如果事务控制器下取样器有多个,那么只有每一个取样器都运行成功了,整个事务控制器定义的事务才算成功,这是充分必要条件。
![](https://uploader.shimo.im/f/251TMJcfUTfMjQIo.png!thumbnail)
- Generate Parent sample:是否生成一个父取样结果
- Include duration of timer and pre-post processors in generated sample:是否包含定时器,选中将在取样器前后加上延时