Jmeter-按顺序执行请求
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jmeter-按顺序执行请求相关的知识,希望对你有一定的参考价值。
参考技术A 一、背景在Jmeter进行并发测试的时候,请求有时候并不能按照我们想要的顺序执行。
二、原因
这个是因为多线程会存在竞争。多线程执行并发操作,肯定是谁跑得快谁就先执行,线程才不会进行排队。所以就导致请求的顺序不会按照我们录入的先后来执行。
三、解决方案
使用jmeter自带的一个事物锁控制器:官方把它定义为线程锁控制器( Critical Section Controller) ,中文翻译是临界部分控制器。
使用了这个控制器,在锁下面的请求,在相同的时间点只会有一个线程去执行它,不会产生竞争。这样子的话,我们把需要按照顺序执行的请求,直接放在这个控制器下面,就可以按照顺序执行了。
四、举个例子
上述截图中,我们调用下单接口之前,是需要先执行预下单接口的,故我们按照顺序把两个请求,放在同一个临界部分控制器下面,那么执行线程组的时候,就可以看到请求是按照预下单,下单的顺序执行了。
jmeter如何并行执行多个线程组
需要控制线程组内的操作在满足某一条件才执行,那么就需要使用if或者while;
要使用if或者while都需要一个变量,而这个变量要在两个或多个线程组内使用,那么if使用变量就需要是全局变量,while使用的变量就需要是局部变量;
同一个线程组的请求是按照顺序执行,不同线程组顺序不固定,想让线程组允许执行,需要勾选一个选项。
第一顺序执行线程组---------------------
首先使用BeanShell Sampler给全局变量赋予初始值$__setProperty(newswitch,1,);
然后使用If Controller作为操作的父类,条件为"$__P(newswitch,)"=="1";
最后使用BeanShell Sampler(父类线程组)给全局变量赋值$__setProperty(newswitch,2,);,下一个顺序执行线程组的If Controller条件;
第二或N顺序执行线程组---------------------
1.使用BeanShell Sampler(父类线程组),定义一个局部变量vars.put("whileswitch","1");
2.使用While Controller作为If Controller的父类,条件为$__javaScript("$__P(whileswitch,)"!="0") ;
3.使用If Controller作为操作的父类,条件为"$__P(newswitch,)"=="2";(值根据第几个顺序而变化,第二个是2,第三个是3。。。)
4.在If Controller下建立子类BeanShell Sampler给局部变量赋值vars.put("whileswitch","0");,结束While Controller;给全局变量赋值$__setProperty(newswitch,3,);,下一个顺序执行线程组的If Controller条件,如果没有下一个顺序执行线程组给全局变量赋予初始值$__setProperty(newswitch,1,);。
参考技术A 貌似我以前都回答过了,不知道是不是同一人问的。其实这样的问题你尝试下就知道了,不要动不动就提问。Jmeter 你如果设置的是多个线程组的情况,直接运行的话,本身就并发执行的。本回答被提问者和网友采纳 参考技术B 我尝试了 一个测试计划中多个线程组同时执行 只执行了第一个线程组中的数据
以上是关于Jmeter-按顺序执行请求的主要内容,如果未能解决你的问题,请参考以下文章