如何在jmeter中获取jdbc请求的数组响应?

时间:2017-03-16 10:47:15

标签: jmeter

示例我有我的JDBC请求,响应如下:

X     Y     Z
a1    b1    c1
a2    b2    c2
a3    b3    c3
a4    b4    c4
a5    b5    c5
.     .     .
.     .     .
.     .     .

如何获得x,y和z的所有值?

然后我有HTTP请求,如果所有响应都与从JDBC中选择的数据匹配,我将断言。

示例回复:

{
    {
        "x":"a1",
        "y":"b1",
        "z": "c1"
    },
    {
        "x":"a2",
        "y":"b2",
        "z": "c2"
    },
    {
        "x":"a3",
        "y":"b3",
        "z": "c4"
    },
    {
        "x":"a4",
        "y":"b4",
        "z": "c4"
    },
    {
        "x":"a5",
        "y":"b5",
        "z": "c5"
    },
    {
        "x":"a6",
        "y":"b6",
        "z": "c6"
    },
    {
        "x":"a7",
        "y":"b7",
        "z": "c7"
    },
    {
        "x":"a8",
        "y":"b8",
        "z": "c8"
    },
    .
    .
    .                     
    .
}

2 个答案:

答案 0 :(得分:0)

根据JDBC Request sampler documentation

  

如果提供了“变量名称”列表,则对于Select语句返回的每一行,将使用相应列的值设置变量(如果提供了变量名称),并且还设置了行数起来。例如,如果Select语句返回2行3列,并且变量列表是A ,, C,则将设置以下变量:

A_#=2 (number of rows)
A_1=column 1, row 1
A_2=column 1, row 2
C_#=2 (number of rows)
C_1=column 3, row 1
C_2=column 3, row 2

因此,您提供了"变量名称"作为X,Y,Z,您应该能够以${X_1}${Y_2}等方式访问这些值。

JDBC Variable Names

有关使用JDBC测试元素结果和结果集的更多详细信息,请参阅Debugging JDBC Sampler Results in JMeter

答案 1 :(得分:0)

您应该声明"变量名称"字段并声明结果变量名称,如下所示。

JDBC ReqestSampler config view

然后您可以使用_1 _2方法访问它们。请在下面找到可以在beanshell后处理器中使用的示例代码。

import java.util.ArrayList;
import net.minidev.json.parser.JSONParser;
import net.minidev.json.JSONObject;
import net.minidev.json.JSONArray;

ArrayList items = vars.getObject("result1");


for ( int i = items.size() - 1; i >= 0; i--) {
    JSONObject jsonitemElement = new JSONObject();
    jsonitemElement.put("x", vars.get("x_" + (i + 1)));
    jsonitemElement.put("y", vars.get("y_" + (i + 1)));
    jsonitemElement.put("z", vars.get("z_" + (i + 1)));
    log.info(jsonitemElement.toString());
}

由于您将这些值作为HTTP请求的响应有效负载的响应,因此您应该添加代码以在断言或后处理器中解析该JSON响应,并将其与上面示例代码中的元素进行比较。

需要注意的一点 - 不同的应用程序以任何顺序发送目标JSON。因此,无法保证HTTP响应始终将响应发送为A1,B1,C1-A2,B2,C2等。它可以从A5,B5,C5等开始以任何顺序发送它们。最好是使用散列映射或编写数组比较以确保结果集完全匹配HTTp响应。