在运行时动态增加/减少JMeter中的线程数

htzpubme  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(157)

我有一个要求,我需要增加/减少线程数在运行时的基础上提供的数据日志
例如:如果日志在1秒内有数千个请求,则numberOfThreads应该很高,在下一秒中,如果每秒的请求数减少,则numberOfThreads应该减少,依此类推
我尝试的第一种方法是使用带有吞吐量整形定时器和并发线程组的调度反馈功能,但我面临的问题是startRPS和endRPS要提前分配,这对我不起作用,因为我的日志有数百万个不同RPS速率的请求,静态分配数千个RPS是不可行的。变量,并根据日志从预处理器中更改它们,但吞吐量整形定时器只接受startRPS和endRPS的第一个值,而不接受其他值。因此,整个测试运行在一组RPS值上。
enter image description here

if(props.get("index") == null)
    props.put("index", 0);

int[] lst =  {15,20,31,21,99,50};

var i = vars.get("index");

if(i < lst.length)
{
    if(i == 0)
    {
        props.put("startRPS", "1");
        props.put("endRPS", lst[i]);
    }
    else
    {
        props.put("startRPS", lst[i-1]);
        props.put("endRPS", lst[i]);
    }
}

log.info("**** START: " + props.get("startRPS"));
log.info("**** END: " + props.get("endRPS"));

i = i + 1;
props.put("index", i);

字符串
我尝试的第二种方法是添加JSR 223采样器,并根据运行时每秒计算的请求数设置线程数。

int num_of_reqs = Integer.parseInt(parsedString[1]);
int threadCount = num_of_reqs / 5;

log.info( "Num of reqs" + num_of_reqs +  "Threads: " + threadCount);

ctx.getThreadGroup().setNumThreads(threadCount);
props.put("threads", threadCount);

log.info("&&&&" + ctx.getThreadGroup ().getNumberOfThreads());

kiayqfof

kiayqfof1#

你可以选择Constant Throughput Timer,尽管它的名字中有“constant”这个词,但它不一定是常量,你可以使用__P()函数来指定所需的吞吐量,并使用JSR223测试元素等从Beanshell服务器修改它。
如果你还想改变线程(虚拟用户)的数量,你可以这样做:
1.要添加新线程,请执行以下操作:

ctx.getThreadGroup().addNewThread(1,ctx.getEngine())

字符串
1.要停止线程,请执行以下操作:

ctx.getThreadGroup().stopThread('the name of the thread',false)

相关问题