【问题标题】:Alternatives to using CSV in JMeter (for generating usernames)在 JMeter 中使用 CSV 的替代方法(用于生成用户名)
【发布时间】:2015-11-25 08:15:07
【问题描述】:

我有一个具有以下结构的 JMeter 测试计划

Test Plan

**ThreadGroup1**
--CSV Data Config-001
----SimpleController
--------------LoginRequest
--------------Action-abc-Request

**ThreadGroup2**
--CSV Data Config-002
----SimpleController
--------------LoginRequest
--------------Action-xyz-Request

我有两个 CSV 文件,其中包含这样的用户列表..

**CSV-001**
Username1
Username2
.. ..
Username50

**CSV-002**
Username51
Username52
.. ..
Username100

在我的场景中,我需要对 100 个用户进行负载测试。 50 个用户从 ThreadGroup1 登录,其他 50 个用户从 ThreadGroup2 登录。来自两个线程组的用户同时登录。

目前,每当我更改用户总数时,我都必须手动创建/编辑这些 CSV 文件。

请建议是否有任何 替代的省时和高效方法可以满足我的场景要求(不使用 CSV 文件)。

如果您能用一些细节解释替代解决方案,我将不胜感激,因为我对 JMeter 的东西还很陌生。谢谢。

【问题讨论】:

  • 此外,有人可以评论一下使用 CSV 相对于任何其他方法可能带来的性能优势吗?为什么我看到大多数人只使用它?

标签: jmeter beanshell


【解决方案1】:

另一个想法是使用

Username${__threadNum}

对于第一个线程组和

Username${__BeanShell(ctx.getThreadNum()+Z+1)}

对于第二个,其中 Z 等于线程组 1 中的线程总数。您还需要添加 1,因为 ctx.getThreadNum() 使用基于 0 的索引返回线程编号,而 __threadNum 函数基于 1。

【讨论】:

  • 我使用了您以前的解决方案(以及同步计时器),它对我很有用。我更喜欢你的这个解决方案,因为它进一步简化了事情。但是我对这个解决方案有一个小问题。 “第二个函数中的 .getThreadNum() 为第一个线程返回“0”值,因此我得到了实际上是从 ThreadGroup1 执行操作的用户名。你能建议一个解决方法吗??
  • 例如,如果我为 ThreadGroup1 配置 3 个用户,为 ThreadGroup2 配置 3 个用户。然后结果是这样的...... ThreadGroup1 的用户名1、用户名2 和用户名3。其中 ThreadGroup2 的用户名 3、用户名 4 和用户名 5。 [USERNAME3 登录两次]。
  • 我更新了上面的答案,现在应该可以使用 ThreadGroup2。
  • 这很简单。解决方案现在完美运行。接受为答案。非常感谢您的所有时间和帮助。
【解决方案2】:

您可以在每个线程中使用一个计数器。第一个线程中计数器的起始值为 1,第二个线程为 51。确保未选中“为每个用户单独跟踪计数器”复选框。

如果将引用名称分别设置为thread1Count和thread2Count,则可以使用

Username${thread1Count} 

对于第一个线程和

用户名${thread2Count}

第二次。

【讨论】:

  • JusMe,感谢您的回答。我已经尝试过这个解决方案,即使它有效,但我观察到使用这种方法的请求执行模式有一些变化(与使用 CSV 相比)。当我使用 CSV 运行 JMeter 脚本时,所有登录请求几乎同时执行,几乎没有时间间隔。而对于计数器,请求执行的模式是循环的。例如,如果一个线程组中总共有 5 个请求,那么请求执行的顺序是这样的.. 1) user1 - 5 个请求 2) user2 - 5 个请求等等..
猜你喜欢
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
相关资源
最近更新 更多