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 数据库日期和查询出来的结果不一致

jmeter—JDBC request动态参数设置

使用jdbc更新数据后,hibernate 缓存对象不更新,与数据库不一致,同一个session中

jmeter分布式测试

Jmeter的JDBC Request,sql参数化及返回值取值

Jmeter 请求或响应中文乱码