在JMeter中使用CSV的替代方案(用于生成用户名)

在JMeter中使用CSV的替代方案(用于生成用户名),jmeter,beanshell,Jmeter,Beanshell,我有一个具有以下结构的JMeter测试计划 Test Plan **ThreadGroup1** --CSV Data Config-001 ----SimpleController --------------LoginRequest --------------Action-abc-Request **ThreadGroup2** --CSV Data Config-002 ----SimpleController --------------LoginRequest ---------

我有一个具有以下结构的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文件

请建议通过I是否有任何替代省时、高效的方法可以满足我的场景要求(无需使用CSV文件)


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

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

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

Username${thread1Count} 
对于第一个线程和

用户名${thread2Count}

第二,另一个想法是使用

Username${{uuuu threadNum}

对于第一个线程组和

Username${\uuu BeanShell(ctx.getThreadNum()+Z+1)}


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

此外,是否有人可以评论使用CSV比任何其他方法可能带来的性能优势?为什么我看到大多数人只使用它?朱姆,谢谢你的回答。我已经尝试过这个解决方案,尽管它可以工作,但我观察到使用这种方法执行请求的模式有一些变化(与使用CSV相比)。当我使用CSV运行JMeter脚本时,所有登录请求几乎同时执行,时间间隔很小。而对于计数器,请求执行的模式是循环中的。例如,如果一个线程组中总共有5个请求,那么请求的执行顺序如下。。1) user1-5请求2)user2-5请求等等..我使用了您以前的解决方案(以及同步计时器),它对我来说非常有用。我更喜欢你的这个解决方案,因为它进一步简化了事情。但我对这个解决方案有一个小问题。第二个函数中的.getThreadNum()返回“0”“第一个线程的值,正因为如此,我得到的用户名实际上是从ThreadGroup1执行操作的。您能否建议一种解决方法?例如,如果我为ThreadGroup1配置3个用户,为ThreadGroup2配置3个用户。那么结果是这样的。。。ThreadGroup1的username1、username2和username3。其中,对于ThreadGroup2,用户名为username3、username4和username5。[USERNAME3已登录两次]。我更新了上面的答案,以便现在可以使用ThreadGroup2。这非常简单。这个解决方案现在运行得很好。被接受为答案。非常感谢您的时间和帮助。