JMeter - 使用While Controller with JDBC Request Child的替代方案?

时间:2015-03-11 15:22:11

标签: loops jdbc while-loop jmeter

我的环境:JMeter v2.11,Oracle 12,JDK 7

系统:8000个XML提交/小时,写入数据库,然后经过一些内部处理后,DB中的状态值被更新(表示提交/应用程序已被批准)。我有一些beanhell采样器设置来从csv文件中获取值来模拟XML提交,我有JDBC Request来检查数据库状态属性何时更新。

JDBC请求包含在我的线程末尾的While Controller中,以便我的JDBC请求一直执行,直到更新application.status列。

我的测试对单个实例(1个循环)运行良好,但对于后续循环,不执行JDBC请求。也就是说,如果循环计数大于1,则对于每个后续循环,都不会执行JDBC请求。

我目前的设置:

Thread Group: No. of Users-->1, Loop Count -->3
-CSV Data Config: Recycle on EOF = TRUE, STOP THREAD ON EOF = FALSE
-Beanshell Samplers: (to create and submit the XML, using csv data)
--While Controller: (${__javaScript("${status_1}" != "6")})
---JDBC Request: select status from application where applicationID = (select max(applicationID) from application); VariableName: status

如上所述 - 线程在Loop = 1时运行正常,但如果设置了Loop> 1,则后续循环不执行JDBC请求,因为它与While Controller的关系。

我尝试将一个父简单控制器添加到While控制器,我尝试使用多个循环控制器并将父循环控制器设置为While控制器,但我没有做任何工作,我只是没有&# 39;知道如何继续。

我花了3天时间(真的!3天!)在网上寻找一种方法让While Controller包含在后续循环中 - 我发现在论坛上只有3个问题的实例回来了到2006年,但每个问题都没有得到实际回答。

我甚至想到创建8000个线程组,循环为1 !!这将是一场噩梦,但实际上会完成我所需要的 - 但显然我会在这里直到明年设置它,我怀疑JMeter会耗尽资源试图执行所有这些线程组。

任何人都可以建议我的方法的一些替代方案。我开始相信While Controller不包含在后续循环中是预期/标准JMeter功能。

也许我可以使用其他一些控制器来做我需要的事情?

一如既往,感谢任何帮助,建议,提示,提示。

1 个答案:

答案 0 :(得分:1)

这是你的考试方式:

  1. 第一个循环:status_1变量为空白,而Controller正在执行
  2. 第二个循环:status_1变量值为 6 ,而Controller为 NOT ,因为条件为false。
  3. 在您的While Controller之前添加Debug Sampler以自行查看

    解决方案就像将下一行添加到您的Beanshell采样器之一一样简单:

    vars.remove("status_1");
    ResponseMessage="variablescleared";
    ResponseCode=200;
    

    此行将清除" status_1"值" 6"并且您的While Controller将在下一次迭代时执行。