如何使用Jmeter成批发送请求

如何使用Jmeter成批发送请求,jmeter,Jmeter,我有一个场景,在这个场景中,我需要按用户定义的编号(例如1K、5K、10K等)以指定的间隔批量发送请求 假设批处理之间的间隔为30秒,我必须发送每个批的“N”个请求,例如1K。发送1K请求在10秒内完成,因此在接下来的20秒内不应发出任何请求。一旦间隔超过,应发送另一批1K 输入:数据来自CSV,对于第二批,最好从1001开始 尝试的选项:恒定吞吐量计时器。这样我就限制了请求的速度,这是我不想做的 有人能帮我做其他选择吗?在您的请求前后添加JSR223采样器。您的测试计划应如下所示: JSR22

我有一个场景,在这个场景中,我需要按用户定义的编号(例如1K、5K、10K等)以指定的间隔批量发送请求

假设批处理之间的间隔为30秒,我必须发送每个批的“N”个请求,例如1K。发送1K请求在10秒内完成,因此在接下来的20秒内不应发出任何请求。一旦间隔超过,应发送另一批1K

输入:数据来自CSV,对于第二批,最好从1001开始

尝试的选项:恒定吞吐量计时器。这样我就限制了请求的速度,这是我不想做的


有人能帮我做其他选择吗?

在您的请求前后添加JSR223采样器。您的测试计划应如下所示:

JSR223取样器1

你的要求

JSR223取样器2

将此代码添加到您的第一个JSR223采样器中:

interval = 30000     //Specify the desired interval here
startTime = System.currentTimeMillis()
vars.put("startTime", startTime.toString())
vars.put("interval", Long.toString(interval))
startTime = Long.parseLong(vars.get("startTime"))
interval = Long.parseLong(vars.get("interval"))
endTime = System.currentTimeMillis()
duration = endTime - startTime
if (duration < interval) {
    sleepTime = interval - duration
    log.info("Sleeping for ${sleepTime} ms")
    Thread.sleep(sleepTime)
}
将此代码添加到第二个JSR223采样器中:

interval = 30000     //Specify the desired interval here
startTime = System.currentTimeMillis()
vars.put("startTime", startTime.toString())
vars.put("interval", Long.toString(interval))
startTime = Long.parseLong(vars.get("startTime"))
interval = Long.parseLong(vars.get("interval"))
endTime = System.currentTimeMillis()
duration = endTime - startTime
if (duration < interval) {
    sleepTime = interval - duration
    log.info("Sleeping for ${sleepTime} ms")
    Thread.sleep(sleepTime)
}
startTime=Long.parseLong(vars.get(“startTime”))
interval=Long.parseLong(vars.get(“interval”))
endTime=System.currentTimeMillis()
持续时间=结束时间-开始时间
if(持续时间<间隔){
睡眠时间=间隔-持续时间
log.info(“睡眠时间${sleepTime}ms”)
线程。睡眠(睡眠时间)
}
这将使线程休眠,直到间隔结束(如果它们已经完成了工作)


如果需要更高的精度,您可以修改此解决方案,使所有线程在请求前后都遵守相同的时间间隔。您的测试计划应如下所示:

JSR223取样器1

你的要求

JSR223取样器2

将此代码添加到您的第一个JSR223采样器中:

interval = 30000     //Specify the desired interval here
startTime = System.currentTimeMillis()
vars.put("startTime", startTime.toString())
vars.put("interval", Long.toString(interval))
startTime = Long.parseLong(vars.get("startTime"))
interval = Long.parseLong(vars.get("interval"))
endTime = System.currentTimeMillis()
duration = endTime - startTime
if (duration < interval) {
    sleepTime = interval - duration
    log.info("Sleeping for ${sleepTime} ms")
    Thread.sleep(sleepTime)
}
将此代码添加到第二个JSR223采样器中:

interval = 30000     //Specify the desired interval here
startTime = System.currentTimeMillis()
vars.put("startTime", startTime.toString())
vars.put("interval", Long.toString(interval))
startTime = Long.parseLong(vars.get("startTime"))
interval = Long.parseLong(vars.get("interval"))
endTime = System.currentTimeMillis()
duration = endTime - startTime
if (duration < interval) {
    sleepTime = interval - duration
    log.info("Sleeping for ${sleepTime} ms")
    Thread.sleep(sleepTime)
}
startTime=Long.parseLong(vars.get(“startTime”))
interval=Long.parseLong(vars.get(“interval”))
endTime=System.currentTimeMillis()
持续时间=结束时间-开始时间
if(持续时间<间隔){
睡眠时间=间隔-持续时间
log.info(“睡眠时间${sleepTime}ms”)
线程。睡眠(睡眠时间)
}
这将使线程休眠,直到间隔结束(如果它们已经完成了工作)


如果您需要更高的精度,您可以修改此解决方案,使所有线程都遵守相同的时间间隔,也可以使用beanshell/JSR223计时器(在线程组中的所有样本之后),而不是像建议的那样使用采样器或后处理器。 以及预处理器(在线程组中的所有样本之前)来设置开始时间变量,而不是sampler


在这样的计时器中,您只需返回要应用的延迟(如
返回(interval-(endTime-startTime));

您还可以使用beanshell/JSR223计时器(在线程组中的所有样本之后),而不是像建议的那样使用采样器或后处理器。 以及预处理器(在线程组中的所有样本之前)来设置开始时间变量,而不是sampler


在这样一个计时器中,您只需返回要应用的延迟(如
返回(interval-(endTime-startTime));

忘记了,我只发送了一个请求'n'次。现在还不清楚该行为是什么,以及您希望实现什么。你能提供准确的场景,当前的结果和期望的结果吗?你不能使用常数计时器吗?嗨,基里尔。我当前的设置:我只使用了一个HTTP请求,输入来自CSV文件。现在我的情况是这样的。1.多次发送请求(例如1K请求,因此理想情况下从CSV文件读取前1K行)2。提供间隔3。多次发送相同的请求。(这里的请求应该从1001开始,直到我们在步骤1中发送的1000为止)。批处理大小是在线程组级别通过提供循环计数来处理的。使用常量计时器,它只会在开始发送请求之前提供一个延迟。忘了提及,我只发送了一个请求“n”次。现在不太清楚该行为是什么,以及您希望实现什么。你能提供准确的场景,当前的结果和期望的结果吗?你不能使用常数计时器吗?嗨,基里尔。我当前的设置:我只使用了一个HTTP请求,输入来自CSV文件。现在我的情况是这样的。1.多次发送请求(例如1K请求,因此理想情况下从CSV文件读取前1K行)2。提供间隔3。多次发送相同的请求。(这里的请求应该从1001开始,直到我们在步骤1中发送的1000为止)。批处理大小是在线程组级别通过提供循环计数来处理的。使用恒定计时器,它只会在开始发送请求之前提供一个延迟。嗨,乔治,谢谢你的回复。通过这种方法,循环不会发生。我有-JSR223采样器1-HTTP请求采样器-JSR223采样器2。当我触发运行时,会触发JSR223采样器1&HTTP请求。一旦请求完成,interval就会被实现,interval死亡后JSR223采样器2就会被触发。我真正需要的是在给定的延迟/间隔之后,HTTP请求会再次被触发。嗨,George,谢谢你的回复。通过这种方法,循环不会发生。我有-JSR223采样器1-HTTP请求采样器-JSR223采样器2。当我触发运行时,会触发JSR223采样器1&HTTP请求。一旦请求完成,interval就会被实现,一旦interval死亡,JSR223采样器2就会被触发。我真正需要的是在给定的延迟/间隔之后,HTTP请求应该再次被触发。