如何在Jmeter中配置延迟直到条件为真

时间:2017-11-13 07:29:57

标签: groovy jmeter

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

enter image description here

3 个答案:

答案 0 :(得分:1)

  1. 将您的JDBC请求采样器置于While Controller下并使用以下条件:

    ${__javaScript("${Actual_vertica_results}" != "0",)}
    
  2. 在JDBC Request采样器之后添加Test Action采样器,并按如下方式对其进行配置:

    • 目标:Current Thread
    • 行动:Pause
    • 持续时间:5000
  3. 有关详细信息,请参阅Using the While Controller in JMeter文章。

答案 1 :(得分:0)

我正在考虑两种选择:

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

    1. “令人讨厌”的方式可能是在JDBC请求中使用匿名代码块(可调用语句作为查询类型)和下面的代码(以Oracle为例):
    2. 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包上)。您可能还可以使用给定的返回值在数据库中创建一个函数(如果您倾向于对不同的表进行某些验证)。

答案 2 :(得分:0)

不同的解决方案:

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

  • 在“测试计划”

  • 中选中“运行线程组”复选框
  • 当count = 0时,添加Test Action目标当前线程和动作停止

这样线程组将执行直到count = 0,然后继续执行不同线程组中的后续步骤

  • 如果需要,可以在第一个线程组中添加循环计数永久