最近项目组遇到一个问题,想实现jmeter每隔一段时间跑一次线程组中的所有用例,因为不知道jmeter的作用域是怎么样的,胡乱试了很多都不清楚怎么解决,只知道应该用定时器,但不知道定时器要放在什么地方,最后还是一位开发叔叔帮忙解决了这个问题,涨知识了。
首先看看我是什么试的吧
1.想让线程组中的用例不停的跑,当然要让它循环次数“永远”
2.然后我想,要让线程组中每条用例都跑一遍再进行等待,定时器当然要放在线程组下面嘛,哈哈,结果我就这么设置了:
3.跑出来的结果让我傻眼,居然是跑一条用例执行一次定时器,再跑一条用例再执行一次定时器,和我想要的不一样啊
4.怎么办,开发叔叔过来一看,定时器加在了最前面一条用例下面,问题解决
5.现在知道了,原来是各种元素的执行顺序和作用域搞错了,那么这里面的规律是怎么样的呢,查看了官方文档后,答案终于揭晓了
6.官方文档一上来就告诉了我们各个元素的执行顺序
0.配置元件>1.前置处理器>2.定时器>3.sampler>4.后置处理器>5.断言>6.监听器
jmeter是树形结构,执行顺序是从上往下的,然后按照各个元素的执行顺序进行每一步操作
那么每个元素的作用域又是怎样的呢?官网直接给了个例子:
在这个图中,有用例,定时器和断言
每一条用例的执行顺序是按照从上到下执行的,(one,two,three,four,five代表了他们的执行顺序)
看看Timer #1的作用域,发现Timer #1和two、three、four有同一个父节点,所以Timer #1可以控制这三条用例
同理,Timer #2的父节点为线程组,所以它控制了全部的5条用例
同理,Assertion #1只对Three进行断言
结合元素的执行顺序和作用域后,得出完整的执行步骤
Timer #2→one→Timer #2→Timer #1→two→Timer #2→Timer #1→three→Timer #2→Timer #1→four→Timer #2→five→Assertion #1
7.回到我们最初的问题上来,现在不难理解了,为什么我把定时器放在线程组下面,我的每条用例都要受到定时器的控制了
而在第一条用例下面加定时器,会先执行定时器,再执行我所有的用例,再执行定时器,再执行所有用例,问题解决。