如何在HTTP请求中使用来自Jmeter JDBC请求的响应
问题内容:
这是我的情况:
我想做这个:
我有一个MySQL数据库中的URL列表,我想使用HTTP请求命中该URL,以查看响应是否为404的HTTP状态代码。
我已经做到了:
- 添加并配置了JDBC Config元素。
- 添加并配置了JDBC请求采样器。基本上,一条select语句返回一个包含8列的表。我为“变量名”字段提供了8个逗号分隔的变量,以便可以使用这些变量名来标识JDBC请求的结果。
- 创建了一个HTTP请求采样器,该采样器在“服务器名称或IP”字段中使用这些变量$ {url}之一。
尽管JDBC请求可以正常工作并返回包含一堆行的表,但问题是HTTP请求采样器从不从JDBC请求结果中提取变量。HTTP请求在“查看结果树”中如下所示:
GET http://${url}/
我已经尝试了以下解决方案:
- 将“将响应保存到文件”侦听器添加到JDBC请求。这将创建类型为“ .plain”而不是CSV的文件。如果是CSV,我可以通过创建CSV数据集配置来利用该CSV文件。因此,此尝试失败。
- 我已经尝试在上述尝试中强制文件名始终使用’C:\ JMETERTest \ data.csv’。但是最终创建了一个名为“ C:\ JMETERTest \ data.csv1.plain”的新文件。此尝试也失败了。
- 我试图在“ HTTP请求的服务器名称”字段中将URL列引用为$ {url_1}。有效。但是现在的问题是,在结果树中,所有请求都只针对结果集第一行中的URL。我看到这是由于在上面的$ {url_1}中指定了行号“ _1”。如果有人可以提出一种方法来将“ _1”参数化为我可以循环通过的变量(可能使用“ Counter”元素),则可以使用此方法。我通过引用名称“ loopCounter”创建了一个Counter Config元素。并在HTTP请求的“服务器名称”字段中使用了此命令:
$ {url _(“ $ {loopCounter}”)}
但是现在我的HTTP请求看起来更糟了:
GET http://${url_("${loopCounter}")}/
这也没有用。
解决方案3看起来更可行,因为只有我可以解决行号的参数化问题。我也欢迎JMeter插件建议。我们将继续尝试更新其他任何内容。
PS:如果我的问题仍然不清楚,请告诉我。
问题答案:
您是否尝试过将HTTP采样器包装在ForEach控制器(父代)中,该控制器的变量是从JDBC采样器获得的URL变量?
另外,ForEach中的输出变量将是您现在在HTTP采样器中使用的变量。
这样,它将从索引的开头到结尾遍历每个变量,并每次运行一次采样器。