JMeter - 将 While Controller 与 JDBC Request Child 一起使用的替代方案?

JMeter - alternatives to using While Controller with JDBC Request Child?

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

系统:8000 XML 提交/小时,写入数据库,然后经过一些内部处理,更新数据库中的状态值(表明 submission/application 已被批准)。我有一些 beanshell 采样器设置为从 csv 文件获取值以模拟 XML 提交,并且我有 JDBC 请求检查数据库状态属性何时更新。

JDBC 请求包含在线程末尾的 While 控制器中,因此我的 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 控制器。

我试过将父级简单控制器添加到 While 控制器,我尝试使用多个循环控制器并将父级循环控制器设置到 While 控制器,但我所做的一切都不起作用,我只是不知道如何进行。

我花了 3 天(真的!3 天!)在网上搜索一种方法,让 While 控制器包含在后续循环中 - 我发现论坛上只有 3 个这样的问题被问及到 2006 年,但每个问题都没有真正得到回答。

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

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

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

一如既往,我们非常感谢任何帮助、建议、提示和技巧。

你的测试是这样的:

  1. 第一个循环:status_1变量为空,而 Controller 正在执行
  2. 第二个循环:status_1 变量值为 6,而控制器 NOT 执行,因为条件为假。

在你的 While Controller 前面加一个 Debug Sampler 自己看看

解决方法很简单,只需将下一行添加到您的一个 Beanshell 采样器中即可:

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

此行将清除“6”的 "status_1" 值,您的 While 控制器将在下一次迭代中执行。