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配置元件(详解教程)

Jmeter - 从入门到精通 - JMeter配置元件(详解教程)

JMeter基础:元件的顺序

Jmeter学习笔记2-原件作用域与执行顺序

JMeter元件的作用域和执行顺序