繁体   English   中英

如何为jmeter中的每个线程发送唯一数据

[英]how to send unique data for each thread in jmeter

我正在使用jmeter测试我的REST API是否有10000个匹配项,为此,每个http匹配项都会在DB中存储一些数据。 我已遵循以下测试计划

在此处输入图片说明

我正在并行运行10个线程,每个线程的启动时间为20秒,并循环1000个以达到相同的效果。

在此处输入图片说明

但是这里的问题是我的线程没有获取唯一的数据集。 而我的后端HTTP URL期望每个http点击都具有唯一的字符串。

现在,我尝试了以下方法。

  1. 具有10000个唯一值的单个CSV数据集配置,并且线程组中的所有线程都读取相同的数据。

  2. 为每个线程设置不同的CSV数据,并使用filename {{__ threadNum} .csv

  3. 我使用jmeter _RandomString方法在运行时为每个http点击生成随机字符串,在http帖子正文中,我像

{“ tenantName”:“ $ { __RandomString (15,abcdefghijklmnofqrst1234567#@#%^&*,)}”}

  1. 使用BeanShell预处理程序始终在HTTP Request采样器中调用Java方法并生成唯一模式。

现在,以上方法都不适合我。 在某个时间点后运行测试计划时,2个线程试图使用相同的数据并访问我的HTTP url。 我从http响应中收到冲突错误。 我的错误计数一直在增加。

现在,我真的不明白这两个尝试如何使用相同的数据访问http吗?

有人可以解释一下这个问题,并帮助我设置正确的测试计划配置。

编辑:

所有线程的CSV数据集配置:

在此处输入图片说明

HTTP请求:

在此处输入图片说明


使用CSV数据集添加测试计划:

在此处输入图片说明

除了Ubik和DmitrT的所有建议之外,我还将CSV配置元素放在线程组之外。 让我知道。

CSV方法还可以,但是如何配置csv数据集并将其放入计划中?

确保将“在EOF上回收”设置为false,以确保没有数据被重用。

你能证明这个吗?

您还可以显示HTTP请求内容吗?

编辑2015年9月1日:

  • 您的csv配置未声明应包含tenantName的variableNames

ib fileName路径字段也用\\或/替换\\

如果您需要发送可以是随机的唯一数据,我相信__UUID()函数可以提供帮助。

每次被调用时,它都会生成随机的独占GUID结构,这似乎正是您要寻找的。

有关此和更多JMeter函数的说明和演示,请参阅如何使用JMeter函数帖子系列。

尽管对于这个问题我来不及了,但我认为有人可能会觉得有用。

  1. 为线程组创建一个随机变量
  2. 为该变量分配最小值和最大值。 请确保最小值和最大值之间的差异较大,以免发生碰撞。
  3. 将每个线程(用户)标记为TRUE

希望能帮助到你。

请参阅http://blog.developer.bazaarvoice.com/2016/05/19/quick-and-easy-web-service-load-testing-with-jmeter/

用户定义的变量元素也有相同的问题。 在其中,我创建了一个UUID并将其分配给变量。 我期望每个线程生成不同的UUID,但事实并非如此。

解决方案(对我有用)添加一个Beanshell Sampler。 在其中,使用UUID生成唯一值,然后使用put方法将值存储在“ vars”中。 每个线程将执行代码并具有自己的唯一值。

示例:为每个要使用的线程生成并存储唯一的accountId

String uniqueId = "${__UUID()}";
vars.put("accountId", uniqueId);

我希望这有帮助!

将csv数据集配置放在线程组之外并保持共享模式为“ ALL THREADS”的最简单方法,它将解决您的目的。 即使在多个线程组的情况下,您也可以在共享模式下使用此csv数据,并且每个线程都会自动选择唯一的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM