JMeter:控制器不终止于零计数

时间:2019-02-20 08:17:45

标签: while-loop jmeter

这是我的问题JMeter: How to benchmark data deletion from database table in batches?的继续。我采用了Dimitri T提出的解决方案,现在我正在使用Oracle DB的测试用例。

我的测试用例从在10个循环中使用100个线程插入1000个条目开始。之后,它将删除rownum < 250的位置。

但是,我的测试用例不再能够检测到该表为空。当我在结果树中查看响应数据时,会看到以下内容:

249 updates
249 updates
249 updates
249 updates
4 updates
0 updates
0 updates
0 updates
...

JMeter本身不报告任何错误。

我的线程组如下:

...(separate thread group to do INSERT)...

Thread Group: Do DELETE
   Txn Ctrl: DELETE
      While Loop: tbl still has data
         JDBC Request: DELETE from tbl
            JDBC PostProcessor

循环条件定义如下:

${__jexl3('${count_1} > 0',)}

(与上一个问题的解决方案稍有不同,我将条件用引号引起来,以防止出现歧义的表达错误。)

JDBC请求的定义如下:

delete from tbl where (entrydt < ${endDt}) and (rownum < ${deleteLimit})

(用户定义的变量endDtdeleteLimit的值分别为TO_DATE('2019/02/01 00:00:00', 'yyyy/mm/dd hh24:mi:ss')250。)

JDBC后处理器定义如下:

[Select statement] select count(*) from tbl

Variable names: count (All other fields are empty.)
Handle ResultSet: Store as String

我尝试过

  • 更改循环条件;引号无所谓;将${count_1}更改为${count}
  • 更改后处理器;变量名称,结果变量名称以及结果集的处理方式之间

1 个答案:

答案 0 :(得分:1)

谁告诉您用引号将表达式引起来?首先,您破坏了有效的解决方案,然后抱怨所提供的表达式不起作用。

只需通过User Defined Variablescount_1定义为正数,在 jmeter.log

中就不会有任何错误。

如果由于某种原因您不愿意或不能这样做-您可以考虑将count_1变量的额外检查设置为:{p> 3,以迁移到__groovy() function

${__groovy(vars.get('count_1') == null || (vars.get('count_1') as int) > 0,)}