Jmeter -- 元件的作用域与执行顺序
一、概念:
Jmeter共有8类可被执行的元件(测试计划与线程组不属于元件),这些元件中,取样器是典型的不与其它元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效,而其它元件(config elements 、pre-processors、timers 、post-processors、assertions、listeners、)需要与取样器(sampler)等元件交互。
1. 配置元件(config elements ) 会影响其作用范围内的所有元件。
2. 前置处理程序(Pre-processors)在其作用范围内的每一个sampler元件之前执行。
3. 定时器(timers )对其作用范围内的每一个sampler 有效
4. 后置处理程序(Post-processors)在其作用范围内的每一个sampler元件之后执行。
5. 断言(Assertions)对其作用范围内的每一个sampler 元件执行后的结果执行校验。
6. 监听器(Listeners)收集其作用范围的每一个sampler元件的信息并呈现。
二、作用域
在JMeter中,元件的作用域是靠测试计划的树型结构中元件的父子关系来确定的,作用域的原则是:
1. 取样器(sampler)元件不和其它元件相互作用,因此不存在作用域的问题。
2. 逻辑控制器(Logic Controller)元件只对其子节点中的取样器 和 逻辑控制器作用。
3. 除取样器和逻辑控制器元件外,其他6类元件,如果是某个sampler的子节点,则该元件会对其父子节点起作用。
4. 除取样器和逻辑控制器元件外,其他6类元件,如果其父节点不是sampler ,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)。
(除取样器和逻辑控制器外,其他均无法创建子节点)
举两个栗子:
栗子一,上图中,
- HTTP Request1、HTTP Request2、HTTP Request3没有作用域的概念
- Loop Controller的作用域是其子节点HTTP Request2、HTTP Request3
- Graph Results的作用域是HTTP Request2、HTTP Request3
- Aggregate Report的作用域是HTTP Request1、HTTP Request2、HTTP Request3
栗子二,上图中,
- HTTP Request1、HTTP Request2、HTTP Request3、HTTP Request4没有作用域的概念
- 循环控制器Loop Controller的作用域,是HTTP Request2、HTTP Request3、和Random Controller
- 固定定时器Constant Timer的作用域,是HTTP Request1
- 随机定时器Uniform Random Timer的作用域,是HTTP Request1、HTTP Request2、HTTP Request3、HTTP Request4
- 响应断言Response Assertion的作用域,是HTTP Request4
- XML断言XML Assertion的作用域,是HTTP Request2、HTTP Request3、HTTP Request4
- 图形结果Graph Results的作用域,是HTTP Request2、HTTP Request3、HTTP Request4
- 聚合报告Aggregate Report的作用域,是HTTP Request1、HTTP Request2、HTTP Request3、HTTP Request4
三、执行顺序
在同一作用域范围内,测试计划中的元件按照如下顺序执行。
(1)配置元件(config elements )
(2)前置处理程序(Per-processors)
(3)定时器(timers )
(4)取样器(Sampler)
(5)后置处理程序(Post-processors) (除非Sampler 得到的返回结果为空)。
(6)断言(Assertions)(除非Sampler 得到的返回结果为空)。
(7)监听器(Listeners)(除非Sampler 得到的返回结果为空)。
注意:
前置处理器、后置处理器和断言等元件均能对取样器作用,因此,如果在它们的作用域内没有任何取样器,则不会被执行。
如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序一次执行。