Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将timestamp变量传入jmeter的JDBC请求_Jdbc_Jmeter_Postgis - Fatal编程技术网

如何将timestamp变量传入jmeter的JDBC请求

如何将timestamp变量传入jmeter的JDBC请求,jdbc,jmeter,postgis,Jdbc,Jmeter,Postgis,我正在学习使用jmeter(第一次)对我们的地理空间postgres(postgis)数据库进行一些性能测试。我想使用JDBC请求采样器sql查询来不断地访问数据库,但是我需要更改查询中的时间戳,问题是它们不是正常的参数,它们在函数调用的字符串中 选择内部温度, 世界时, 将(ST_作为二进制(ST_Force_2D(“geometry_4326”)、‘NDR’、‘hex’)编码为geom, “ogc_功能ID” 根据表面温度(ST_GeomFromText((-180-90,-180-9018

我正在学习使用jmeter(第一次)对我们的地理空间postgres(postgis)数据库进行一些性能测试。我想使用JDBC请求采样器sql查询来不断地访问数据库,但是我需要更改查询中的时间戳,问题是它们不是正常的参数,它们在函数调用的字符串中

选择内部温度,
世界时,
将(ST_作为二进制(ST_Force_2D(“geometry_4326”)、‘NDR’、‘hex’)编码为geom,
“ogc_功能ID”
根据表面温度(ST_GeomFromText((-180-90,-180-90180-90,-180-90)),4326,
无效的
0,
"最新",,
“观察到的>=”2015-06-08 14:00:00Z“和观察到的<”2015-06-09 15:00:00Z”,
(对)
其中(geometry_4326和ST_GeomeFromText((-180-90,-180-90180-90180-90,-180-90)),4326))
按合并顺序(优先级,0)描述,观察描述;
如何使用jmeter变量替换字符串中的用户定义?

'observed>=“2015-06-08 14:00:00Z”和observed<'2015-06-09 15:00:00Z',
我想这样做:

'observed>='${start\u timestamp}'和observed<'${end\u timestamp}',
这可能吗


最终,我希望将时间戳更新为“今天”。但是在研究了如何在正常的SQL替换情况下使用timestamp变量之后,我认为我现在可以接受将timestamp替换为用户定义的变量。

您确实可以在JDBC查询中使用jmeter变量

选择内部温度,
世界时,
将(ST_作为二进制(ST_Force_2D(“geometry_4326”)、‘NDR’、‘hex’)编码为geom,
“ogc_功能ID”
根据表面温度(ST_GeomFromText((-180-90,-180-90180-90,-180-90)),4326,
无效的
0,
"最新",,
'观察到的>='${StartDate}''和观察到的<'${EndDateHour}',
(对)
其中(geometry_4326和ST_GeomeFromText((-180-90,-180-90180-90180-90,-180-90)),4326))
按合并顺序(优先级,0)描述,观察描述;
这里的技巧是获取有效的时间戳。如上所述,beanShell就是答案。

您可以创建一个简单的用户指定变量,如下所示:

${u BeanShell(新的java.text.simpleDataFormat(“yyyy-MM-dd HH:MM:ss”).format(new-Date())}

或者在我的例子中,我需要对时间戳做一些额外的修补,所以我创建了一个beanshell预处理器。有一些解释

以下是我放在我的

import java.text.simpleDataFormat;
导入java.util.Date;
导入java.util.TimeZone;
导入java.util.Calendar;
int backhour=-5
整小时=1
int foremin=5
日期=新日期();
date.setDate(date.getDate());
SimpleDataFormat df=新的SimpleDataFormat(“yyyy-MM-dd HH:MM:ssZ”);//需要是2015-06-09 15:00:00Z
Calendar c=Calendar.getInstance();//获取Java日历实例
c、 设置时间(日期);//将日历时间设置为现在
c、 设置(日历分钟,0);
c、 设置(日历秒,0);
c、 添加(Calendar.HOUR,backhour);//加-X小时
df.setTimeZone(TimeZone.getTimeZone(“UTC”);//将日期格式设置为使用UTC
字符串startDate=df.format(c.getTime())//创建日历对象的字符串
变量put(“起始日期”,起始日期);//将jmeter变量设置为StartDate
//提前1小时设置下一个var
c、 添加(Calendar.HOUR,forehour);//加1小时
字符串endDateHour=df.format(c.getTime())//创建日历对象的字符串
变量put(“EndDateHour”,EndDateHour);//将jmeter变量设置为EndDate
c、 添加(Calendar.HOUR,-forehour);//减去小时,这样我们可以恢复c

您可以在SQL查询中使用JMeter函数,它以一种模式可以控制的形式返回当前日期。

您使用的是什么样的采样器?JDBC请求采样器。类似的功能可能会起作用:
${{u BeanShell(new java.text.SimpleDateFormat(“yyyy-MM-dd HH:MM:ss”).format(new date())}
,beanshell括号中的内容只是以指定格式返回当前日期的java代码。jmeter中的
${uuuu BeanShell()}
指令在运行时计算包含的代码并用该值替换整个字符串,这有点像动态变量替代。我之所以发表评论,是因为我不确定这是否会在JDBC采样器的查询框中起作用。看起来使用它的正确方法是这样的:查询中有问号,参数值框中有beanshell部分。我希望你能回答,这样我就可以给你评分了。@MarcelWilson这是关于“未来”时间戳,如果您需要当前时间,最好使用_time()函数,因为Beanshell会导致一些性能开销。啊,很高兴知道。我认为时间()很简单。但正如你所说,在这种情况下,简单更好。
'observed >= ''2015-06-08 14:00:00Z'' AND observed < ''2015-06-09 15:00:00Z'' ',
'observed >= ''${start_timestamp}'' AND observed < ''${end_timestamp}'' ',