在我的网站上,我有两个商家操作:搜索和浏览。搜索通常会触发三次浏览。
我有一个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.csv
和merchant2name.csv
,内容如下:
id1
id2
id3
并遵循测试计划结构:
- 线程
- 组(1 个线程、1 秒斜坡、1 个循环)
- 环路
- 控制器(2 个环路)
- HTTP 请求/${商家名称}
- Beanshell 后处理器(有关代码和说明,请参见下文)
- CSV 数据集配置(文件名:商家的完整路径.csv文件,变量名称:商家名称,所有默认值) 环路
- 控制器(3 个环路)
- HTTP Request/${merchantid}
- CSV 数据集配置(文件名:商家名称 1 文件的完整路径,商家名称 1 应为属性,变量名称:商家 ID,所有默认值)
- HTTP Request/${merchantid}
- HTTP 请求/${商家名称}
- 控制器(2 个环路)
通过在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 个请求
参考资料:
- 使用 CSV 数据集配置
- 如何使用 BeanShell