如何在JMeter中使用并行/吞吐量控制器迭代请求

7ivaypg9  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(143)

从我之前的问题链接开始。
这是工作的罚款与这三个参数的小值,我收到从以前的后处理器,

def imgUIDArrayList = vars.getObject("imageUIDListVal");
def fileListArrayList = vars.getObject("fileListVal");
def filePathListArrayList = vars.getObject("filePathListVal");

1.upto(imgUIDArrayList.size(),{ vars.put('imageUUIDA_' + it, imgUIDArrayList.get(it - 1))})
1.upto(fileListArrayList.size(), { vars.put('fileUUIDA_' + it, fileListArrayList.get(it - 1))})
1.upto(filePathListArrayList.size(), { vars.put('filePathUUIDA_' + it, filePathListArrayList.get(it - 1))})

字符串
例如,该值的大小是10(其在数量上较小),工作良好,并且像真实的API那样仿真。但是当大小增加超过100时,有时超过1000。JMeter的执行时间非常长,超过30分钟,有时接近一小时。对于1个用户,它随着并发性而增长,但在使用API时没有看到类似的行为。我没有为我的交易设置任何计时器。
考虑使用并行控制器或吞吐量控制器。在这种情况下,我如何使用这3个值来迭代的次数等于大小的数量?或者更好的选择?
for-each控制器中的当前配置,


的数据
在控制器内部我调用了另外两个变量
${__V(fileUUIDA_${__counter(,)})}vars.get('filePathUUIDA_' + ((vars.get('__jm__ForEach Controller__idx') as int) + 1))

lqfhib0f

lqfhib0f1#

并行控制器并行执行其子对象,这意味着您需要预先定义相关的采样器。
如果您的请求是简单的GET请求,您可以考虑切换到并行采样器,您可以使用JSR 223预处理器和以下代码动态创建/添加URL:

0.upto(vars.getObject('imageUIDListVal').size() - 1, index -> {
    sampler.addURL('your-url-prefix-' + imageUIDListVal[index])
})

字符串
更多信息:How to Use the Parallel Controller in JMeter
此外,您不应该“快速”发送请求,您应该准确地复制真实的用户(或上游系统)的网络足迹,因此值得仔细检查您的需求。也许值得将有效负载写入CSV文件,并使用CSV数据集配置和多线程来执行请求。

相关问题