【问题标题】:How to configure delay until condition is true in Jmeter如何在Jmeter中配置延迟直到条件为真
【发布时间】:2017-11-13 07:29:56
【问题描述】:

我有一个关于 Jmeter 延迟的问题,我创建了一个测试计划,并在一个步骤中使用 JDBC 调用 DB,并将结果存储在 actual_vertica_results 参数中(计算临时表中的员工人数)。 我想将 Jmeter 配置为 Waite,直到 actual_vertica_results 为 0。 (数据库中的表会自行删除) 有人可以建议我如何在 Jmeter 中执行这种情况,今天我使用恒定计时器进行延迟,并在每次迭代时手动增加它以确保删除所有数据。 我如何要求 Jmeter 每 5 秒调用一次 DB 并检查结果,并且只有在从表中删除所有临时数据后才能进行下一步? 如果有人可以提供带有 PIC 的分步场景,那将非常有帮助 问候

【问题讨论】:

  • 你试过 While 控制器吗?
  • 不,这是唯一的方法吗?

标签: groovy jmeter


【解决方案1】:
  1. 将您的 JDBC 请求采样器放在 While Controller 下并使用以下条件:

    ${__javaScript("${Actual_vertica_results}" != "0",)}
    
  2. 在你的 JDBC Request sampler 后面添加Test Action sampler 并配置如下:

    • 目标:Current Thread
    • 操作:Pause
    • 持续时间:5000

有关更多信息,请参阅Using the While Controller in JMeter 文章。

【讨论】:

  • 唯一的变化是 ${__javaScript("${Actual_vertica_results_1}" != "0",)}
【解决方案2】:

我正在考虑两种选择:

  1. 我想干净的方法是包含一个事务控制器 + 常量定时器 + While 控制器(正如 Dmitri 所写 - 带有条件 ${__javaScript("${Actual_vertica_results}" != "0",)}),以便 JDBC 请求根据定时器延迟触发:

  1. “讨厌”的方式可能是在 JDBC 请求(可调用语句作为查询类型)和下面的代码(以 Oracle 为例)中使用匿名代码块:
declare
  var integer;
begin
  var := 1;
  while var <> 0
    loop
      select count(rec) into var from test_count;
      dbms_lock.sleep(5);
    end loop;
end;

但这假定您不需要将 Actual_vertica_results 变量用于其他目的,并且您的 db 用户已授予执行延迟/睡眠的权限(在 Oracle 示例中的 DBMS_LOCK 包上)。可能您还可以在数据库中创建一个具有给定返回值的函数(如果您倾向于在不同的表上进行一些验证)。

【讨论】:

    【解决方案3】:

    不同的解决方案:

    • 在另一个线程组中添加后续步骤

    • 在测试计划中选中 Run Thread group 复选框

    • Test Action 添加到目标当前线程和计数 = 0 时停止操作

    这样线程组会一直执行到count = 0,然后在不同的线程组继续下一步

    • 如果需要,您可以在第一个线程组中添加 Loop Count Forever

    【讨论】:

      猜你喜欢
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多