【问题标题】:Compare JDBC Request results with JSON HTTP Request Response array data将 JDBC 请求结果与 JSON HTTP 请求响应数组数据进行比较
【发布时间】:2016-04-26 19:04:08
【问题描述】:

我有一个 JDBC 请求,其中包含如下查询:

SELECT CUSTOMER_ID, CUSTOMER_NAME, START_DATE, COMPLETE_DATE,          
        NUMBER_OF_FINDINGS FROM CUSTOMER ORDER BY START_DATE;

这将返回 70 条记录。现在,我有一个 JSON HTTP 请求,可以以相同的顺序从网页的网格中提取相同的数据。我得到了 70 条记录。如何比较数据库中的数组和 JSON 响应中的数组中的每个值?我找到了有关如何检查单个值但不比较两个数据集之间的所有值的信息。我已经尝试了下面的 BeanShell 断言,但它不起作用。我尝试使用 BSF PostProcessor 将 JSON 值放入变量中,但这也不起作用。我的调试采样器显示它正在获取值,但似乎没有比较它们。任何想法/想法将不胜感激。

String json_customerId = vars.get("customer_id");
String json_customerName = vars.get("customer_name");
String json_startedOn = vars.get("started_on");
String json_completedOn = vars.get("completed_on");
String json_numberOfFindings = vars.get("number_of_findings");
String db_customerId = vars.get("customer_id");
String db_customerName = vars.get("customer_name");
String db_startedOn = vars.get("started_on");
String db_completedOn = vars.get("completed_on");
String db_numberOfFindings = vars.get("number_of_findings");

int intN = 0

For (intN=0; intN=totalItems; intN++)
    if (json_customerId[intN].equals(db_customer_id[intN]))
    {
        Failure = false;
        print("counts match" + json_customerId + db_customer_id); 
    } else {
        Failure = true;
        FailureMessage = "Difference detected, json_result: " + 
                       json_customerID >+ " and db_result: " +  db_customer_id;
    }

【问题讨论】:

  • 我个人会在 Java 中这样做。 1) 使用@override equals 方法创建 Customer 类 2) 从 JSON 和 MySQL 加载数据 3) 使用 equals 比较 Customer 类的两个对象。但是要修复您的代码,1)在 For 循环之前放置 Failure = false 2)在 if 条件中删除您的 Failure = false; 3)(可选)在 Failure = true; 之后中断我假设如果 70 条记录中的一个字段不匹配,它应该是“失败”为真。

标签: mysql json jmeter beanshell


【解决方案1】:

您的代码没有多大意义。您正在使用Strings,这对我来说似乎不正确,因为 Select 查询结果通常看起来不像字符串。

这种比较字符串的方法 - json_customerId[intN] 将导致 Beanshell 断言失败,因为字符串不是数组类型。

我建议使用Debug SamplerView Results Tree 配置来检查来自MySQL 和JSON 的变量值。如果您无法确定正确的选项 - 使用 JDBC 采样器和 JSON 路径提取器配置以及您想要比较的结果 JMeter 变量值更新您的问题。

暂时这里有一些参考链接:

【讨论】:

  • 所以我使用的代码适用于总行数(见下文),但似乎不适用于数据数组。我是新手,所以我确定我可能做错了什么。我想我必须将每个值放入一个变量中,然后比较 db 变量和 json 变量,它们应该匹配。作为参考,以下是适用于单个总值的方法:
  • 'String json_result = vars.get("totalItems");字符串 db_result = vars.get("db_count_1"); //int json_result = Integer.parseInt(vars.get("totalItems").trim()); //int db_result = Integer.parseInt(vars.get("db_count_1").trim());如果(json_result.equals(db_result)){失败=假; print("计数匹配" + json_result + db_result); } else { 失败 = true; FailureMessage = "检测到差异,json_result:" + json_result + " 和 db_result:" + db_result; }'
  • 问题是,我不知道会返回多少行,所以我不能像上面代码中的一个结果(db_count_1)那样声明变量。
猜你喜欢
  • 2012-10-25
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-06
  • 2018-03-09
  • 2014-09-01
相关资源
最近更新 更多