目录
0、加入控制器后的执行顺序
-
1)配置元件优先执行【没有在控制器里面的先执行】,用户自定义配置元件优先执行【无论是否在控制器内】
-
2)按深度优先算法,依次寻找取样器,找到取样器后,逐个执行,遵循第3条规则
-
3)执行总体顺序:
- 控制器(父元件) ---> 配置元件(控制器里面的) ---> 前置处理器 ---> 定时器 ---> 取样器 ---> 后置处理器 ---> 断言 ---> 监听器
-
4)控制器可以添加任意组件作为子元素
-
5)在按深度优先算法寻找取样器时,控制器总会被执行
-
6)控制器的后代中必须含有取样器为子元素,否则所有的后代元素执行时会无效(配置元件除外),但自身总会被执行
-
7)取样器在执行前后组件时,总是先判断父类控制器(控制器内的配置元件在控制器后执行)
1、简单控制器
-
简单控制器
- 通常用来指定一个执行单元
-
该控制器不改变元件的执行顺序
-
可以嵌套其他的控制器
-
利用该控制器通常用于定义元件的执行顺序
-
示例:
- 一个线程,循环9次,简单控制器里面3个请求
- 最后生成27个请求的响应
- 最后生成27个请求的响应
- 一个线程,循环9次,简单控制器里面3个请求
2、ForEach控制器(不常用)
-
说明:
- 名称:控制器名称
-
输入变量前缀:定义变量,循环控制器可从中获取到变量对应的值,作为循环控制器的循环条件
-
开始循环字段:循环变量起点
-
结束循环字段:循环变量终点
-
输出变量名称:循环控制器生成的变量名称
-
- 名称:控制器名称
-
示例:
- 设置用户定义的变量
- 设置用户参数不得行
- 设置用户参数不得行
- 设置用户定义的变量
-
使用场景:
- 1)结合用户自定义的变量
-
2)结合json提取器或者正则表达式提取器,获取数据后,再结合业务进行循环处理
-
实际使用场景
- processon登录后,可以看到登录用户的一个目录结构
-
首先调试脚本,发http请求
-
添加json处理器,将所有的title提取到
-
最后用foreach循环来进行输出
3、if控制器
-
如果条件满足,就执行if控制器下面的元件
-
注意,if控制器的条件要以jexl3或者groovy函数来表示,否则无法识别
-
字符串的判断,需要在${VARIABLE}外面加引号
-
Interpret Conditon as Variable Expression?
- 勾选,
- 表示需要使用__jexl3/__groovy函数的计算结果为true或者false
-
不勾选
- 表示把条件框中的表达式当做js脚本,进行计算,然后使用计算的结果为真/假,来执行逻辑操作
- 勾选,
-
注意:
- 1)字符串,必须放到引号里面,如"${username}"
-
2)数字,可以直接用 ${count_num}==1
-
3)bool,直接用${flag}==true
-
判断条件总结:
- 1)可以直接判断:
- “${name}” == “admin"
-
2)使用函数的方式 jexl3/groovy
- 1)可以直接判断:
4、交替控制器(不常用)
-
交替控制器
- 其节点下的取样器会交替执行
-
示例:
- 一个线程,循环9次【当然也可以用循环控制器来实现循环】,交替控制器里面3个请求
-
如果使用简单控制器,那区别就是,每次循环都是执行里面的3个请求,最后就是 9 * 3 = 27个响应
- 使用交替控制器,是一次循环只执行里面的一个请求,然后交替执行,最后总共只有9个响应
-
- 一个线程,循环9次【当然也可以用循环控制器来实现循环】,交替控制器里面3个请求
5、事务控制器
-
组合出一个新的计量单位,就是把几个组合在一起而已
-
事务
- 在性能结果分析统计时,TPS代表每秒处理的事务数,通常情况下,每个请求,如JDBC请求,对应一个事务
-
但是根据业务需求,有时需要把多个操作统计成一个事务,如果其中一个操作或者请求失败,则判定整个事务就失败
-
通过逻辑控制器中的事务控制器来实现对事务的封装
-
事务控制器
-
Generate parent sample
-
还可以看到每个取样器,任何子事务失败,则整个事务失败
-
如果事务控制器下有多个取样器
-
如果选中该选项,则在查看结果树中可以看到事务控制器
- 同时,这个事务控制器下面的取样器跟它成树形结构
-
聚合报告里也有区别,如果勾选了,那么聚合报告里面不会显示取样器,而只会显示事务控制器的名字
-
-
Include duration of timer and pre-post processors in generated sample
- 是否包含定时器、预处理和后置处理器的延迟时间
-
6、循环控制器
-
就是循环运行多少次
7、仅一次控制器
-
就是只运行一次【针对的是每个线程用户】
- 就算这个仅一次控制器放到了循环控制器里面,它也只运行里面的元件只跑一次
-
包括线程组设置了循环次数,它也只运行一次
-
场景:
- 一般用于登录,全局参数设置这种只执行一次的业务逻辑控制
-
但是它控制不了线程组的线程数(用户)哈,比如线程组里面设置了3次,最后还是要运行3次
- 不能控制父级的父级哈
8、while控制器(不常用)
-
while控制器一般需要结合一个计数器来使用【配置元件--->计数器】
- 否则,你想,是不是需要写代码,来使循环条件变量变化等。
-
而且while控制器的循环条件写法跟if控制器类似,要使用groovy函数或者jexl3来作为条件
-
备注,while控制器会多执行一次,比如可能条件是<5,但是到了5的时候,它要运行一次才退出
-
示例1):
-
-
示例2:
- 通过脚本的方式来控制条件,这个时候需要用到groovy的语法
9、include控制器
-
要点就是:可以将一个保存的测试片段,在include控制器里面进行一个调用
-
步骤:
- 1)保存一个测试片段,叫test_fragment.jmx
-
2)新建一个测试计划,然后线程组,然后新建一个include 控制器
10、临界部分控制器
-
加了这个控制器,会变成串行执行
-
用处不大