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-按顺序执行请求的主要内容,如果未能解决你的问题,请参考以下文章

jmeter压测混合业务有先后顺序怎么处理

Jmeter - 线程组详解

Jmeter八大可执行元件的执行顺序

Jmeter---参数化之用户参数

jmeter如何并行执行多个线程组

jmeter元件的作用域与执行顺序