如何从Jmeter的JDBC Response对象中的数字引用的列中获取值?

时间:2017-11-01 20:21:06

标签: jdbc jmeter

我知道他们建议以这种方式获得单元格值:

columnValue = vars.getObject("resultObject").get(0).get("Column Name");

jMeter doc : component reference : JDBC_Request所述。

但是:如何通过一些列来访问相同的RS单元格值?

RS.get(0).get(4);

...而不是给它一个列名称/标签的字符串。

编辑1 :让我们使用Groovy / Java,而不是BeanShell。感谢。

编辑2 :最初的动机是列名称/标签之间的区别,因为这些似乎没有得到充分保证(?这里似乎不清楚,不是我),特别是由于案例-sensitivity(“id”/“ID”,“name”/“Name”/“NAME”..)

2 个答案:

答案 0 :(得分:1)

行本身是HashMap,在源代码中定义为:

HashMap<String, Object> row

因此,使用BeanShell语法,您可以将其作为

row = vars.getObject("resultObject").get(0); // returns HashMap

在HashMap中,您无法按ID访问项目(列)。但是,您可以应用其中一种方法hereHashMap不保证订单,因此您无法确定“第4列”将包含哪些内容。< / p>

如果您希望能够循环遍历所有列,最好以Map样式而不是索引来完成。例如,使用带有BeanShell的entrySet()

for(Map.Entry entry : row.entrySet())
{
    log.info(entry.getKey() + "=" + entry.getValue());
}

查看迭代Map here的各种方法。

答案 1 :(得分:1)

应该是这样的:

String value = (new ArrayList<String>(vars.getObject("resultObject").get(0).values())).get(4)

更多信息:Debugging JDBC Sampler Results in JMeter

根据HashMap documentation注意:

  

此课程不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。

因此列的顺序可能是一个很大的问号。