使用 JMeter 时卡在嵌套循环中.嵌套循环控制器和 CSV 数据集配置



在我的网站上,我有两个商家操作:搜索和浏览。搜索通常会触发三次浏览。

有一个JMeter测试,它使用商家和商家ID号的CSV文件,当大规模运行此测试时,我希望使用我网站上的所有商家。

我已经在JMeter中映射了它,如下所示:

  • 环路控制器
    • HTTP Sampler (Search/search/${merchant_name})
    • CSV 数据集配置(商家名称)
    • 环路控制器
      • HTTP Sampler (Browse/merchant/${merchant_id})
      • CSV 数据集配置(商家 ID)

我在外循环中设置loop count = 2,在内循环中设置loop count = 3

我希望两次搜索会触发 6 个浏览操作。但我得到的是搜索,然后是三次浏览,直到我中止测试。

我是否误解了循环结构?这是预期的行为吗?

如何实现运行搜索,然后进行三次浏览,两次的目标?

我认为您滥用了CSV数据集配置。

我让你的方案工作如下:

给定以下 CSV 文件:

merchants.csv包含:

merchant1name
merchant2name

和其他 2 个 CSV 文件:merchant1name.csvmerchant2name.csv,内容如下:

id1
id2
id3

并遵循测试计划结构:

    线程
  • 组(1 个线程、1 秒斜坡、1 个循环)
      环路
    • 控制器(2 个环路)
      • HTTP 请求/${商家名称}
        • Beanshell 后处理器(有关代码和说明,请参见下文)
      • CSV 数据集配置(文件名:商家的完整路径.csv文件,变量名称:商家名称,所有默认值)
      • 环路
      • 控制器(3 个环路)
        • HTTP Request/${merchantid}
          • CSV 数据集配置(文件名:商家名称 1 文件的完整路径,商家名称 1 应为属性,变量名称:商家 ID,所有默认值)

通过在CSV数据集配置中使用"所有默认值",我假设以下内容:

  • 文件编码 - 空白(我的 JMeter 使用 UTF-8 运行,在大多数情况下都很好)
  • 分隔符 - , (逗号)
  • 允许引用数据 - 假
  • EOF回收 - 真
  • EOF 上的停止线程 - 假
  • 共享模式 - 所有线程

豆子代码:

props.put("merchantname", vars.get("merchantname"));

这是必需的,因为 CSV 数据配置不允许在文件路径中使用变量。

内环中的路径:

C:jmeter${__P(merchantname,)}.csv

您可以参考 http://glinius.narod.ru/stackoverflow/nestedloop.zip 文件。解压缩从"嵌套循环"文件夹(1 个 jmx 文件和 3 个 CSV 文件)到 JMeter 的/bin 文件夹并运行测试。它将产生 8 个请求

参考资料:

  1. 使用 CSV 数据集配置
  2. 如何使用 BeanShell

最新更新