jmeter var.putobject 变量在其他 jdbc 请求中使用,但被忽略
Posted
技术标签:
【中文标题】jmeter var.putobject 变量在其他 jdbc 请求中使用,但被忽略【英文标题】:jmeter var.putobject variable use in other jdbc request, but it is ignored 【发布时间】:2014-01-18 21:38:45 【问题描述】:测试计划 线程组 JDBC 连接 JSR223 采样器 JDBC 请求 结果树
将代码放入 JSR223 Sampler:
int id = Integer.parseInt( vars.get("party_id") );
vars.putObject("id", new Integer(id));
然后在 JDBC Request 中使用 id:
select * from table where column = ?
Parameter Value: $id
parameter Type: NUMBER
似乎忽略了 JDBC 请求,结果树中没有显示任何输出。
请帮助调查问题...
提前致谢
【问题讨论】:
【参考方案1】:用户定义变量存储String
的值,但不存储Integer
。我想知道 JMeter 控制台(日志)中是否有任何错误/警告。
将整数转换为字符串以将其放入 UDV。
如果您希望它是一个整数,只需指定 $UDV。如果您希望在 SQL 查询中将其作为 varchar,请添加引号 ('$UDV')
【讨论】:
我还将调试采样器添加到测试计划中,变量“id”具有结果树中显示的值。从日志文件中观察问题“jmeter.threads.JMeterThread: Error while processing sampler 'try integer': java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String”。您知道如何获取其他采样器中使用的整数变量吗? 当您使用putObject
方法时,只需使用toString()
方法将整数转换为字符串。 vars.putObject("id", id.toString());
如果我使用字符串,它适用于我的选择语句,我可以将类型更改为 varchar。对于一个 jdbc 请求所需的数字参数,我有一个插入语句。当我传递“$ id”时,如果将其转换为字符串则不起作用。
我不确定我是否有您的选择。如果您有选择查询,则将其写为select * from table where condition = $id
。假设你的变量值为 5(它是字符串,因为用户定义的变量只存储字符串)下一个查询将被执行select * from table where condition = 5
。如果您在 SQL 查询中需要 varchar,您可以编写 select * from table where condition = '$id'
并且 next 将执行 select * from table where condition = '5'
。 JMeter HTTP 或 JDBC 采样器以下一种方式处理 $variable:只需从变量中获取文本并将其放入采样器主体。这是答案吗?
感谢您提供详细信息。方法 vars.putObject 可以为用户定义的变量存储任何类型的对象,例如整数。我想知道是否有某种方法可以获取类型不是字符串的变量。我使用 JSR223 采样器中定义的变量存储整数,在一个 jdbc 请求中有一个插入查询 [insert into table (id number) values ($id)] 所需的整数。正如您所提到的,$id 类型是字符串,有什么方法可以转换为整数?【参考方案2】:
已重现您的问题,看起来JDBC Sampler 不接受整数,只接受字符串。
我在 jmeter.log 中遇到以下错误,你也猜到了:
2014/01/04 11:30:14 错误 - jmeter.threads.JMeterThread:错误同时 处理采样器“JDBC 请求”:java.lang.ClassCastException: java.lang.Integer 不能转换为 java.lang.String
因此,您绝对不需要强制转换为整数。尝试将您的 JSR223 代码更改为以下内容:
vars.put("id", vars.get("party_id"));
它应该可以正常工作。
告诉 mysql 将变量绑定到哪个数据类型的位是 ParameterType
节。您需要在那里指定参数类型,而不是在 JSR223 中
【讨论】:
以上是关于jmeter var.putobject 变量在其他 jdbc 请求中使用,但被忽略的主要内容,如果未能解决你的问题,请参考以下文章
安装jmeter 环境变量都配置好了 可还是出现不是内部外部命令
Jmeter - 从入门到精通 - JMeter配置元件(详解教程)