2015-06-08 3 views
1

Я научился использовать jmeter (в первый раз), чтобы провести некоторое тестирование производительности с нашей базой данных геопространственных данных (postgis). Я хочу использовать sql-запрос JDBC-запроса для непрерывного попадания в базу данных, однако мне нужно изменить временные метки в запросе, проблема в том, что они не являются нормальными параметрами, они находятся внутри строки в вызове функции.Как передать переменную timestamp в запрос JDBC для jmeter

SELECT int_temp_f, 
     observed_utc, 
     encode(ST_AsBinary(ST_Force_2D("geometry_4326"),'NDR'),'hex') AS geom, 
     "ogc_featureid" 
FROM fn_surfaceobs_temperature(ST_GeomFromText('POLYGON((-180 -90,-180 90,180 90,180 -90,-180 -90))',4326), 
           NULL, 
           0, 
           'latest', 
           'observed >= ''2015-06-08 14:00:00Z'' AND observed < ''2015-06-09 15:00:00Z'' ', 
           TRUE) 
WHERE (geometry_4326 && ST_GeomFromText('POLYGON((-180 -90,-180 90,180 90,180 -90,-180 -90))',4326)) 
ORDER BY COALESCE(priority,0) DESC, observed DESC; 

Как я могу использовать JMeter переменные, чтобы заменить определение пользователя внутри строки?

'observed >= ''2015-06-08 14:00:00Z'' AND observed < ''2015-06-09 15:00:00Z'' ', 

Я хочу сделать что-то вроде этого:

'observed >= ''${start_timestamp}'' AND observed < ''${end_timestamp}'' ', 

даже возможно ли это?

В конечном счете, я хочу обновить временные метки, чтобы всегда быть «сегодня». Но после изучения того, как сделать переменную timestamp в обычной ситуации с заменой SQL, я думаю, что я согласен на то, что просто заменил временные метки как пользовательскую переменную.

+0

Какой пробник вы используете? – RaGe

+0

JDBC запрос пробник. –

+1

Что-то вроде этого может работать: '$ {__ BeanShell (новый java.text.SimpleDateFormat (" yyyy-MM-dd HH: mm: ss "). Format (new Date()))}' – RaGe

ответ

1

Вы действительно можете использовать jmeter vars в запросах JDBC.

SELECT int_temp_f, 
     observed_utc, 
     encode(ST_AsBinary(ST_Force_2D("geometry_4326"),'NDR'),'hex') AS geom, 
     "ogc_featureid" 
FROM fn_surfaceobs_temperature(ST_GeomFromText('POLYGON((-180 -90,-180 90,180 90,180 -90,-180 -90))',4326), 
    NULL, 
    0, 
    'latest', 
    'observed >= ''${StartDate}'' AND observed < ''${EndDateHour}'' ', 
    TRUE) 
WHERE (geometry_4326 && ST_GeomFromText('POLYGON((-180 -90,-180 90,180 90,180 -90,-180 -90))',4326)) 
ORDER BY COALESCE(priority,0) DESC, observed DESC; 

Уловка здесь заключается в том, чтобы получить действительную метку времени. Как указал RaGe, beanShell - это ответ.

Вы можете создать простой пользователь назначенного переменные так:

${__BeanShell(new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))} 


или в моем случае, мне нужно, чтобы сделать некоторые дополнительные мастерить с метками времени, так что я создал Beanshell препроцессор. https://stackoverflow.com/a/21847313/2532408 имеет пару объяснений.

Вот что я положил в шахте:

import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.TimeZone; 
import java.util.Calendar; 

int backhour = -5 
int forehour = 1 
int foremin = 5 

Date date = new Date(); 
date.setDate(date.getDate()); 
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ"); // needs to be 2015-06-09 15:00:00Z 
Calendar c = Calendar.getInstance(); // get Java Calendar instance 
c.setTime(date); // set Calendar time to now 
c.set(Calendar.MINUTE, 0); 
c.set(Calendar.SECOND, 0); 

c.add(Calendar.HOUR, backhour); // add -X hours 
df.setTimeZone(TimeZone.getTimeZone("UTC")); // set the dateformat to use UTC 
String startDate = df.format(c.getTime()); //create string of calendar object 
vars.put("StartDate",startDate); // set the jmeter var to StartDate 

//set the next var 1 hour ahead 
c.add(Calendar.HOUR, forehour); // add 1 hour 
String endDateHour = df.format(c.getTime()); //create string of calendar object 
vars.put("EndDateHour",endDateHour); // set the jmeter var to EndDate 
c.add(Calendar.HOUR, -forehour); // minus the hour so we can resuse c 
+1

Вы должны принять ваш ответ – RaGe

+0

Я был очень уверен, что вы ответите, чтобы я мог дать вам кредит. –

1

Вы можете использовать функцию __time() Jmeter прямо внутри вашего SQL запроса, он возвращает текущую дату в виде управляемой с помощью SimpleDataFormat шаблона.

+0

Мне понравился ваш предыдущий ответ - http://stackoverflow.com/a/21847313/2532408 –

+0

@MarcelWilson Это о «будущей» отметке времени, если вам нужно текущее время, лучше использовать функцию __time(), поскольку Beanshell вызывает некоторые издержки производительности. –

+0

Ах, хорошо знать. Я интерпретировал это как __time() было просто. Но, как вы говорите, в этом случае проще. –

Смежные вопросы