如何在Jmeter的JDBC Request对象中使用“Result Variable Name”

时间:2013-06-19 08:02:59

标签: jdbc jmeter

在JMeter中,我添加了oracle服务器的配置。然后我添加了一个JDBC请求对象,并将ResultSet变量名称放到status 测试执行正常,结果显示在treeview监听器中。

我想使用变量status并将其与字符串进行比较,但jmeter会抛出关于将arraylist转换为字符串的错误。

如何检索此变量并与While Controller中的字符串进行比较?

4 个答案:

答案 0 :(得分:5)

只是花了一些时间来弄清楚这一点,并认为接受的答案稍有不正确,因为JDBC请求采样器有两种类型的结果变量。

您在Variable names框中指定的地图会映射到您的查询返回的各个列,您可以通过说columnVariable_{index}来访问这些列。

您在Result variable name中指定的那个包含整个结果集,实际上这是一个映射到值的列表。在这种情况下,上述语法显然不起作用。

答案 1 :(得分:4)

在JMeter中使用JDBC请求返回的ResultSet变量位于for的数组中。因此,如果要使用变量status,则必须将其与索引一起使用。如果要使用第一个(或仅限)记录用户status_1。所以你需要像status_{index}一样使用它。

答案 2 :(得分:2)

 String host = vars.getObject("status").get(0).get("option_value");
 print(host);
 log.info("----- " + host);

表格完整信息阅读"黄色框"在这个链接: http://jmeter.apache.org/usermanual/component_reference.html#JDBC_Request

其他实用例子: http://jmeter.apache.org/usermanual/build-db-test-plan.html

答案 3 :(得分:0)

您可以在JSR233 PostProcessor中使用Beanshell / Groovy(相同的代码工作方式)来处理JDBC Request中的“结果变量名称”,如下所示:

ArrayList results = vars.getObject("status");

for (HashMap row: results){
    Iterator it = row.entrySet().iterator();
    while (it.hasNext()){
        Map.Entry pair = (Map.Entry)it.next();
        log.info(pair.getKey() + "=" + pair.getValue());
    }
}

使用选择的定界符添加到字符串中,而不是将输出记录到日志中。