这是我的问题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})
(用户定义的变量endDt
和deleteLimit
的值分别为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}
答案 0 :(得分:1)
谁告诉您用引号将表达式引起来?首先,您破坏了有效的解决方案,然后抱怨所提供的表达式不起作用。
只需通过User Defined Variables将count_1
定义为正数,在 jmeter.log
如果由于某种原因您不愿意或不能这样做-您可以考虑将count_1
变量的额外检查设置为:{p> 3,以迁移到__groovy() function,
${__groovy(vars.get('count_1') == null || (vars.get('count_1') as int) > 0,)}