JMeter 机制,用于在来自多个不同线程组的线程之间协商全局变量分配并暂停它们,直到满足条件

问题描述 投票:0回答:1

我正在使用 JMeter,并且遇到一种情况,我想针对正在测试的目标系统发送特定负载的创建更新和删除操作。

我想将逻辑创建、更新和删除操作分成 3 个不同的线程组,这些线程组应该并行运行,因为我想单独控制它们的吞吐量。

但是,为了获得成功的操作请求,被测系统限制我使用唯一的全局序列号值(它在每个请求中都知道并期望该值)。问题是,只有在成功处理创建/更新/删除操作后,该全局序列号才由被测系统拥有(存储在系统数据库中)并递增,这可能需要可变的时间。

因此,为了让 JMeter 知道接下来要发送什么值,它需要等待先前发送的操作(创建/更新/删除)成功,该操作当前可能正在处理中并且尚未收到积极响应还没有。

我目前有一个 setUpThreadGroup,其中我只对系统数据库执行一次查询来获取这个唯一的全局预期序列号值,然后将其传递给 JMeter 属性,以便我知道需要从哪个 id 开始计数。

我的问题是,我想不出一种方法,来自不同线程组(1 个创建、1 个更新、1 个删除)的不同生成线程可以“协商”“currentGlobalId”值的使用,因为一旦某个值被分配给一个线程并且它请求一个操作,其他线程需要确认该值正在使用中,并且在操作成功之前不要使用相同的sequenceID或递增的sequenceID执行任何请求(因为只要系统不递增,它们就会失败)侧面的数字)。

我需要实现一种锁释放同步机制,以便当一个线程获取 Id 时,所有线程组中的所有其他线程都会等待,直到满足成功条件,然后根据其 ThreadGroup 定义的吞吐量,竞相获取下一个预期的序列 ID 并用它执行请求,但只有一个应该,其他应该等待。

任何人都可以给我一个关于如何/是否可以在 JMeter 中实现这一目标的正确方向的推动吗?

multithreading jmeter singleton performance-testing crud
1个回答
0
投票

行为良好的 JMeter 测试应该生成与使用被测系统的真实用户(或上游系统)相同的网络足迹。

如果在每个操作中客户端都会以某种方式调用数据库查询来生成序列 ID - 您应该做同样的事情。合适的测试元素是 JDBC PreProcessor

或者您可以使用线程间通信插件通过FIFO队列

在线程之间共享序列ID的值
© www.soinside.com 2019 - 2024. All rights reserved.