【问题标题】:how to send unique data for each thread in jmeter如何为jmeter中的每个线程发送唯一数据
【发布时间】:2015-08-27 03:38:28
【问题描述】:

我正在使用 jmeter 测试我的 REST API 的 10000 次命中,每个 http 命中都会在数据库中存储一些数据。我遵循了以下测试计划

我正在并行运行 10 个线程,每个线程的加速时间为 20 秒,循环 1000 以实现相同的效果。

但这里的问题是我的线程没有采用唯一的数据集。而我的后端 HTTP URL 期望每个 http 命中的唯一字符串。

现在我尝试了以下方法。

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

  2. 为每个线程设置不同的 CSV 数据,并使用 filename${__threadNum}.csv 为线程分配 csv 文件

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

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

  1. 使用 BeanShell 预处理器调用 java 方法并始终生成唯一模式 win HTTP 请求采样器。

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

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

谁能解释一下这个问题并帮助我设置正确的测试计划配置。

编辑:

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

HTTP 请求:


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

【问题讨论】:

  • 解决了吗?如果是,那么如何,你能分享解决方案吗?
  • sharing mode = all threads 应该为每次迭代提供唯一值。例如,如果有两个线程,那么线程 1 将读取第一个条目,线程 2 读取第二个条目,然后在下一次迭代中,线程 1 将读取第三个条目,线程 2 读取第四个条目,依此类推。

标签: java multithreading jmeter load-testing


【解决方案1】:

虽然我回答这个问题为时已晚,但我想有人可能会觉得它很有用。

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

希望对你有帮助。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      我希望这会有所帮助!

      【讨论】:

        【解决方案4】:

        除了 Ubik 和 DmitrT 的所有建议之外,我会将 CSV 配置元素放在线程组之外。 告诉我。

        【讨论】:

          【解决方案5】:

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

          它每次被调用时都会生成随机专有的GUID 结构,并且似乎正是您正在寻找的。

          有关此和更多 JMeter 函数的说明和演示,请参阅How to Use JMeter Functions 帖子系列

          【讨论】:

          • 嗨,我尝试在请求参数中使用 __uuid。但有时 2 个线程在点击 http 请求时向我传递相同的数据
          【解决方案6】:

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

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

          你能展示一下吗?

          你还能显示 HTTP 请求内容吗?

          2015 年 9 月 1 日编辑:

          • 您的 csv 配置未声明应包含租户名称的变量名称

          还有 ib 文件名路径字段将 \ 替换为 \ 或 /

          【讨论】:

          • 您好,使用 csv 数据集和 http 请求编辑了问题。请检查。
          • 添加了带有 CSV 数据集的测试计划。请检查。
          • 我已经在http请求中定义了变量,同样的变量名是csv头,所以它正在替换。此外,我认为文件路径分隔符不是问题,因为正在处理文件内容。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多