【问题标题】:JMeter: JDBC Deletes Not ConsistentJMeter:JDBC 删除不一致
【发布时间】: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 你太棒了!

标签: jmeter


【解决方案1】:

解决方案

如果您使用分布在多个线程组中的多个 JDBC 连接,请确保将唯一的变量名称绑定到每个池。我为每个 JDBC 连接使用“myPool”(基本上是由于复制/粘贴),它导致了这个问题。 (我的错!

解决办法是:

  • 线程组 1,JDBC 连接配置,变量名 = myFooPool
  • 线程组 2,JDBC 连接配置,变量名称 = myBarPool
  • tearDown 线程组,JDBC 连接配置,变量名 = myTearDownPool

为每个池创建唯一的变量名称可以清楚地了解每个 JDBC 配置,并避免像我这样的问题。希望这对其他人有帮助。

【讨论】:

    猜你喜欢
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    相关资源
    最近更新 更多