【问题标题】:JMeter JDBC Prepared Statements not binding variablesJMeter JDBC Prepared Statements不绑定变量
【发布时间】:2016-04-08 07:30:37
【问题描述】:

我正在使用 JDBC 采样器开发 JMeter。我创建了查询类型为 Prepared Select Statement 的采样器。我正在使用 MySQL 5.5。

我在查询部分写了一条 Select 语句。参数值部分中提到了这些参数以及参数类型部分中它们各自的类型。参数是从 CSV 文件中获取的。

我运行了查询并验证了来自 View Result Tree 侦听器的结果。我得到了预期的结果。当我在多线程/多迭代模式下运行测试时,从数据检索的角度来看,结果令人满意,但是,从 Mysql 日志文件中,我发现不仅设置绑定变量并执行查询,而是执行了整个查询再次好像它是简单的选择语句。

它给我的印象是,虽然我选择了 Prepared Select Statement 作为查询类型,但它正在将查询作为简单的 select 语句执行。

有人遇到过这个问题吗?我可以在哪些方面解决此问题? Configuration for my DB samplers

DB Sampler Info

【问题讨论】:

  • 你能展示一下你对测试元素的配置吗?
  • @UBIKLOADPACK:在原帖中添加了 JDBC 配置元素图像的链接。
  • 谢谢,但我想要一份 JBDC 请求
  • @UBIKLOADPACK:也添加了采样器快照
  • 嗨,我回答了,有什么反馈吗?谢谢

标签: jmeter


【解决方案1】:

根据您的显示,对我而言,JMeter 正在使用 PreparedStatements,因此正在发生绑定。

MySQL 中的哪些日志让您认为没有发生绑定? 你确定只有 JMeter 能击中 MySQL 吗?

能否在 user.properties 中设置:

log_level.jmeter.protocol.jdbc=DEBUG

重启并显示 jmeter.log

JMeter 工作正常,请阅读:

因此,在 JDBC 连接配置中更改属性“数据库 URL”以包含:

?useServerPrepStmts=true

【讨论】:

  • 以下是我的一些发现。 1) MySQL 允许客户端和服务器端的 Prepared Statements。默认情况下,服务器端准备好的语句未启用。在这种情况下,如果我们在 JMeter 查询类型中选择 Prepared Select Statement,它将模拟客户端的prepared statement。我们仍然会得到预期的结果,但是,在数据库端,该语句将作为简单的 SQL 语句执行。这是日志。
  • 3 Query SET character_set_results = NULL 3 Query SET autocommit=1 3 Query SET sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES' 3 Query SET autocommit=1 3 Query select a,b,c FROM TableName WHERE this_.STATUS "ERROR" AND this_.ACCOUNTID=1 AND this_.TIME_BLOCK BETWEEN '2015-10-20 15:10:02' AND '2015-11-03 11:39:00' 3 Query SET autocommit=1 3 Query select a,b,c FROM TableName this_WHERE this_.STATUS"ERROR" AND this_.ACCOUNTID=2 AND this_.TIME_BLOCK BETWEEN '2015-10-20 09:47:37' AND '2015-11-03 13:47 :37' 3 退出
  • 以上日志,我们没有看到任何准备语句被记录在 mysql 日志中。为了使服务器端准备好的语句,我们必须传递“useServerPrepStmts=true”和连接字符串。一旦我们通过了这个,我们将得到下面的日志。 34 准备 select a,b,c FROM TableName WHERE this_.STATUS? AND this_.ACCOUNTID=? AND this_.TIME_BLOCK BETWEEN ?和 ? 160104 12:51:16 34 Query SET autocommit=1 34 Query SET autocommit=1 34 Query SET autocommit=1 34 Query SET autocommit=1 34 Query SET autocommit=1 这表明服务器端准备好的语句正在工作。
  • 我更新了我的答案,如果好的,你应该接受我的答案并投票
猜你喜欢
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 2012-08-23
  • 2013-08-25
  • 2016-10-25
  • 1970-01-01
  • 2015-04-17
  • 2013-05-05
相关资源
最近更新 更多