JMeter元件作用域及执行顺序

时间:2022-11-08 08:35:35

JMeter的体系结构可被分解为一个三维图,如下图。
JMeter元件作用域及执行顺序
上述所说的8类可被执行的元件,在目录树中的相对节点关系为:TestPlan=》ThreadGroup=》Others。值得注意的是,每个测试脚本中有且只能有一个TestPlan,该TestPlan下至少包含一个以上的ThreadGroup。

元件作用域

在JMeter中,元件作用域是靠TestPlan树型结构中元件的父子关系来决定的,具体如下:
1. 配置元件(Config Element)
该元件作用于元件父节点下的所有元件
2. 前置处理器(PerProcessors)
该元件作用于元件父节点下的每一个Sampler元件,且在Sampler元件被执行前执行。
3. 定时器(Timers)
该元件作用于元件父节点下的每一个Sampler元件
4. 取样器(Sampler)
该元件不对其他元件发生交互作用,而是其他元件对其发生交互作用。
5. 后置处理器(PostProcessors)
该元件作用于元件父节点下的每一个Sampler元件,且在Sampler元件被执行后执行。
6. 断言(Assertions)
该元件对元件父节点下的每一个Sampler元件执行后的结果进行校验。
7. 监听器(Listeners)
该元件收集并记录其父节点下的每一个Sampler元件测试结果
综上可知,JMeter元件作用域的基本原则为:
1)取样器(Sampler)由于只能被交互,因此不存在作用域问题。
2)逻辑控制器(LogicConrtollers)提供一个块的结构,仅对其子节点中的取样器(Sampler)和逻辑控制器(LogicConrtollers)起作用。
3)父节点下的每一个Sampler元件是指父节点下的所有后代节点,包括子节点、子子节点等。

元件执行顺序

JMeter脚本显示的是树型结构,元件的执行顺序类似二叉树的中序遍历,先执行根节点再执行子节点,具体:
Step1:配置元件(如果存在);
Step2:前置处理器(如果存在);
Step3:定时器(如果存在);
Step4:取样器(如果存在);
Step5:后置处理器(如果存在且取样器返回结果非空);
Step6:断言(如果存在且取样器返回结果非空);
Step7:监听器(如果存在且取样器返回结果非空);

注:1)如果元件的作用对象不存在,则其不会被执行,如断言作用域内没有取样器,则断言不被执
2)同一作用域范围内存在多个同一类型的元件,则这些元件按其在TestPlan中的上下顺序依次被执行;
3)如果选择某个Step为永远循环,那么线程只会永远执行该Step节点下的元件,其前后面所有的Step都不会被执行。

【参考来源】
[1] 陈志勇,马利伟,万龙. 全栈性能测试修炼宝典.2017.北京:人民邮电出版社
[2]https://yq.aliyun.com/articles/35230