干货分享 ▏JMeter-元件运行顺序

我们完成了用户行为模拟,这些元件的运行顺序又是怎样的呢?是否按我们的预期执行呢?

下面我们要讲一下元件运行的顺序, JMeter脚本显示的是树型结构(类似LoadRunner中的专家模式) , 元件的执行顺序类似二叉树的中序遍历, 先执行根节点再执行子节点。

下面用一个例子来说明一下,JMeter执行顺序逻辑如下。

● 配置元件(如果存在)。
● 前置处理器(如果存在)。
● 定时器(如果存在)。
● 取样器(如果存在)。
● 后置处理器(如果存在且取样器的结果不为空)。
● 断言(如果存在且取样器的结果不为空)。
● 监听器(如果存在且取样器的结果不为空)。干货分享 ▏JMeter-元件运行顺序

针对上图测试计划执行顺序如下。

(1)执行“线程组”,如果有多个线程组可以在测试计划中设置是顺序执行还是同时执行。
(2)执行“简单控制器”。
(3) 执行配置元件“HTTP Cookie管理器”。
(4)执行前置处理器“用户参数”。
(5) 执行定时器”Synchronizing Timer“, 类似于LoadRunner中的集合点。
(6) 执行取样器“HTTP请求1”。
(7)执行后置处理器“正则表达式提取器”。
(8)执行断言“响应断言”。
(9) 执行配置元件“HTTP Cookie管理器”。
(10)执行前置处理器“用户参数”。
(11) 执行定时器“Synchronizing Timer”, 类似于LoadRunner中的集合点。
(12) 执行取样器“HTTP请求2”。
(13)执行后置处理器“正则表达式提取器”。
(14)执行断言“响应断言”。
(15) 执行“HTTP请求3”, “HTTP Cookie管理器”将不覆盖此请求。
(16)执行过程中在“察看结查树”中可以看到结果,红色字体代表失败。此元件是在取样器之后开始工作的,严格来讲它应该与第6步并行。

简单控制器作为一个执行单元, 上面的“HTTP Cookie管理器”与“HTTP请求1”在一个单元, 所以它管理的Cookie范围是对“HTTP请求1/2”有效的, 这是Cookie的作用域(Cookie作用的范围) , 而“HTTP请求3”不在简单控制器下面, 与Cookie的根结节不一致, 所以Cookie的作用范围包括不了“HTTP请求3”。

回到我们的示例脚本。

Step 1是一个循环控制器, 如果我们选择永远循环,那么线程只会永远执行Step l节点下的元件, 另外每个线程模拟的用户也只需要登录一次(除非我们仅测试登录业务) , 所以我们在此把它改为循环次数为1。

Step 2(进入模块) 与Step 3 (发帖) 我们希望它一直执行下去, 由于Step 2在Step 3前面, 所以Step 2为永远时, Step 3是不会执行的,所以我们只能是去掉它们,我们把它放到事务控制器下面方便事务统计,最终我们修改成如图所示。
干货分享 ▏JMeter-元件运行顺序

最后执行逻辑如下:

(1)线程组
(2) Http Cookie Manger
(3) User Defined Variables
(4) HTTP Header Manager
(5) Step1CSV DataSet Config
(6)进入登录页面
(7) Session验证
(8)登录事务
(9) Synchronizing Timer
(10)登录
(11)正则表达式提取器
(12)检查登录
(13) Session验证
(14)固定定时器
(15)进入板块事务
(16)进入板块
(17) Session验证

(18)进入新帖编辑页面事务
(19) Session验证
(20)发帖事务
(21)发帖

(22) Session验证
(23) 察看结果树、Debug Sampler、聚合报告在执行“进入登录页面”时已经开始运行第二次迭代开始
(24) Http Cookie Manger
(25) User Defined Variables
(26) HTTP Header Manager
(27)固定定时器
(28)进入板块事务
(29)进入板块
(30) Session验证
(31)进入新帖编辑页面事务
(32) Session验证
(33)发帖事务
(34)发帖
(35) Session验证

第三次迭代开始,重复执行24~35步的内容。

脚本的执行顺序容易引起混乱,在开发脚本的过程中可以按照层级先后顺序来添加你的元件;比如为取样器服务的配置管理器在取样器前,后置处理器在取样器后或者节点下面;这样脚本就不会混乱了

最后:

欢迎大家关注公众号:程序员一凡,获取软件测试大厂面试资料。