当前位置: 首页 > 知识库问答 >
问题:

JMeter防止任何用户同时在不同线程上运行

计向晨
2023-03-14

线程n:usern:task1->task2->Task3,usern:task1->task2->Task3,usern:task1->task2->Task3,...

然而,我还不知道如何做到这一点。每次我运行测试时,所有线程似乎都在迭代CSV文件并混合用户时选择用户,直到同时在两个不同的线程上找到一个用户。

像这样:

线程n:usern:task1->task2->Task3,...,user1:task1->task2->Task3,user2:task1->task2->Task3

关于为什么会发生这种情况,以及如何实现第一种情况,有什么想法吗?

共有1个答案

闻人栋
2023-03-14

那么您想要的是将每个CSV行分配给线程一次?我认为可以通过next算法来实现:

  1. 创建setup线程组(1个线程,1个循环),其中包含groovy脚本(JSR223采样器)。将CSV文件读取到行/对象,将每个行/对象放入编号属性(行的索引将被视为线程号)
  2. 在主线程组中添加另一个groovy脚本作为第一个采样器,读取索引属性并将其赋值到常规变量中。

下面是上述两个步骤的实现。我使用groovycsv将CSV解析为对象(不要忘记在lib/ext中添加额外的lib),但是您可以在步骤1中将文件读入行中,然后在步骤2中用分隔符拆分行。拥有下一个文件users.csv:

username,password
user1,password1
user2,password2
user3,password3
user4,password4

脚本:

  1. 步骤1:
// setUp Thread Group > groovy JSR223 Sampler

import static com.xlson.groovycsv.CsvParser.parseCsv

List users = parseCsv(new File("users.csv").text).findAll() 
// you can even shuffle them
// Collections.shuffle(users)

users.eachWithIndex { user, i -> props.put("USER_${i}", user) }
// now we have properties named 'USER_0', 'USER_1', 'USER_2'... 'USER_N'
// main thread group > groovy JSR223 Sampler

// 1st thread will always read 'USER_0' property, 2nd 'USER_1' and so on
def user = props.get("USER_${ctx.threadNum}")

vars.put('USERNAME', user.username)
vars.put('PASSWORD', user.password)
// now all next samplers in thread group can use 'USERNAME' and 'PASSWORD' variables, like ${USERNAME}

//test that once selected user sticks to same thread
log.info("Thread num: ${ctx.threadNum}, user: ${user}")

希望能有所帮助。

 类似资料:
  • 问题内容: 使用JMeter,我要检查仅允许1次更新的锁定部分 我正在运行具有10个线程的线程组,并且期望只有1个(并非总是第一个)线程返回0,而其他9个线程返回1如何断言呢? 线程组(10)-HTTP采样器– 断言 编辑 10实际上是一个动态属性。因此,我需要任何线程计数来期望只有1个断言才能返回成功。 该测试是为了检查记录锁定是否正常工作,即使在压力/负载测试中也只能更新一次记录。 编辑2 使

  • 我有一个情况,我需要启动两个线程一个接一个。我尝试了以下代码片段,在这里我可以启动Thread12,但不能启动Thread2。我怎样才能开始两个......?如何启动两个线程一个接一个...? 代码片段

  • 我正在运行RxJava并创建一个主题以使用方法生成数据。我正在使用Spring。 这是我的设置: 在RxJava流上生成新数据的方式是通过Autowire private SubjectObserver SubjectObserver,然后调用SubjectObserver。发布(newDataObjGenerated) 无论我为subscribeOn()指定了什么 Schedulers.io()

  • 我有一个情况,我很难找到一个干净的解决方案。我会尽量详细解释的。 我有一个树状的结构: 我需要处理根节点: 换句话说,一旦处理了和,就可以处理。我以递归的方式处理节点,没有什么壮观的。 到目前为止,一切都很好。现在我要声明一个全局执行器服务,它有固定数量的线程。我想并行处理一个节点的子节点。因此,和可以在各自的线程中进行处理。代码如下所示: 这里的问题是:当达到一定深度时,。我们已经到了缺线的情况

  • 问题内容: 我有几个使用共享资源(数据库)的作业,有时这会在(碰巧)同时触发作业的(罕见)事件中导致构建失败。 例如,给定作业A到E,是否有任何方法可以指定A和C 绝不能同时运行 ? 除上述资源外,构建彼此独立(例如,不存在上游/下游关系)。 “强力”方式将执行者的数量限制为一个,但是如果大多数作业可以很好地同时执行并且在构建服务器上不缺少计算资源,那么显然这不是理想的选择。 问题答案: 当前有两

  • 问题内容: 我已经研究了很多关于Java线程的教程,但是找不到答案。 我的问题是:如何同时运行两个独立的线程? 我的情况是:我有两个任务; 保存一些数据到数据库 在移动设备上发送推送通知。 由于这两个任务是独立的,因此我想同时执行它们。 我尝试使用具有两个线程的线程池,但是问题是数据库任务很快完成,但是发送推送通知需要一些时间。 因此,当一个任务完成而另一个任务仍未完成时,它将引发异常。 我的代码