JMeter:JDBC 删除不一致
Posted
技术标签:
【中文标题】JMeter:JDBC 删除不一致【英文标题】:JMeter: JDBC Deletes Not Consistent 【发布时间】:2016-07-10 00:17:25 【问题描述】:在 JMeter (v2.13 r1665067) 中,我使用 tearDown 线程组来删除测试运行后剩余的所有剩余记录。
我不太明白的奇怪的事情:
当线程组被单独执行(即单独执行)时,我可以看到数据库中剩余的记录被删除了。
当线程组作为完整运行(即完整的端到端测试计划)的一部分运行时,剩余记录为未从数据库中删除。
查看 SQL Profiler,它“似乎”发送了 DELETE,但记录仍保留在数据库中。可能是我的恒定吞吐量设置或其他时间?任何人都可以解释为什么这只会在完整运行期间发生?
在测试计划中,在关闭主线程后运行拆解线程组已启用。
这是我的拆解线程组中的内容:
JDBC 连接配置
Variable Name = myPool
Connection Pool Config
Max # of Connections = 10
Pool Timeout = 5000
Idle Cleanup Interval (ms) = 60000
Auto Commit = True
Transaction Isolation = TRANSACTION_SERIALIZEABLE
Connection Validation by Pool
Keep-Alive = True
Max Connections Age = 5000
Validation Query = null
JDBC 请求 1
Variable Name = myPool
Query Type = Prepared Update Statement
DELETE FROM Foo
WHERE Foo.QualifierObjId IN
(SELECT Bar.ObjId FROM Bar WHERE Bar.DsplyName like '%myTest%');
JDBC 请求 2
Variable Name = myPool
Query Type = Prepared Update Statement
DELETE FROM Bar WHERE Bar.DsplyName like '%myTest%';
JDBC 请求 3
Variable Name = myPool
Query Type = Prepared Update Statement
DELETE FROM Master WHERE Master.DsplyName like '%myTest%';
【问题讨论】:
请说明您使用的 JMeter 版本。是最新的吗? JMeter 版本 2.13 r1665067。 可能与“变量名称 = myPool”有关...不确定您在哪里使用变量名称?可能会因为抑制某些删除调用而导致其获取同步问题? 是的!就是这样......这个线程组的 myPool 和以前的线程组的 myPool 混淆了。 @user1697575 你太棒了! 【参考方案1】:解决方案
如果您使用分布在多个线程组中的多个 JDBC 连接,请确保将唯一的变量名称绑定到每个池。我为每个 JDBC 连接使用“myPool”(基本上是由于复制/粘贴),它导致了这个问题。 (我的错!)
解决办法是:
线程组 1,JDBC 连接配置,变量名 = myFooPool 线程组 2,JDBC 连接配置,变量名称 = myBarPool tearDown 线程组,JDBC 连接配置,变量名 = myTearDownPool为每个池创建唯一的变量名称可以清楚地了解每个 JDBC 配置,并避免像我这样的问题。希望这对其他人有帮助。
【讨论】:
以上是关于JMeter:JDBC 删除不一致的主要内容,如果未能解决你的问题,请参考以下文章
springboot data jdbc 数据库日期和查询出来的结果不一致
使用jdbc更新数据后,hibernate 缓存对象不更新,与数据库不一致,同一个session中