2016-04-26 3 views
0

У меня есть запрос JDBC, содержащий запрос типа:Сравнить результаты запроса JDBC с JSON HTTP Request Response массив данных

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

Это возвращает 70 записей. Теперь у меня есть HTTP-запрос JSON, чтобы вытащить эти же данные в том же порядке из сетки на веб-странице. Я получаю 70 записей. Как я могу сравнить каждое значение в массивах из БД и массива из ответа JSON? Я нашел информацию о том, как проверить одно значение, но не сравнивать все значения между двумя наборами данных. Я попробовал следующее BeanShell Assertion, но он не работает. Я попытался использовать BSF PostProcessor, чтобы поместить значения JSON в переменные, но это тоже не сработало. Мой Debug Sampler показывает, что он получает значения, но, похоже, не сравнивает их. Любые идеи/мысли будут высоко оценены.

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; 
    } 
+0

Я лично сделать это путь в Java. 1) Создать класс Customer с помощью метода @override equals 2) загрузить данные из JSON и MySQL 3) сравнить два объекта класса Customer с использованием equals. Но, чтобы исправить ваш код, 1) поместите 'Failure = false' перед циклом For 2) удалите ваш' Failure = false; 'в условии if (3) (OPTIONAL) break после' Failure = true; 'Я предполагаю, что если один из поля в 70 записях не совпадают, это должно быть «Ошибка» true. – Tin

ответ

0

Ваш код не имеет большого смысла. вы используете Strings, что для меня не кажется правильным, так как выбор результата запроса обычно не похож на строку.

Этот подход для сравнения строк - json_customerId[intN] приведет к сбою в утверждении Beanshell Assertion, поскольку строка не относится к типу массива.

Я бы предложил использовать конфигурацию Debug Sampler и View Results Tree для проверки значений переменных из MySQL и JSON. Если вам не удастся определить нужный вариант - обновите свой вопрос с помощью конфигураций JDBC Sampler и JSON Path Extractor и значений JMeter Variables, которые вы хотите сравнить.

В настоящее время здесь некоторые ссылки ссылки:

+0

, поэтому код, который я использовал, работает для общего количества строк (см. Ниже), но, похоже, не работает для массива данных. Я новичок в этом, поэтому я уверен, что могу делать что-то неправильно. Я думал, что мне нужно будет поместить каждое значение в переменную, а затем сравнить переменную db и переменную json, и они должны совпадать. Для справки, вот что работает для одного общего значения: – joCha

+0

'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()); if (json_result.equals (db_result)) { Failure = false; print ("counts match" + json_result + db_result); } else { Failure = true; FailureMessage = "Разница обнаружена, json_result:" + json_result + "и db_result:" + db_result; } ' – joCha

+0

Дело в том, что я никогда не знаю, сколько строк будет возвращено, поэтому я не могу объявить переменные, как я сделал, с одним результатом в приведенном выше коде (db_count_1). – joCha