【问题标题】:JMeter - alternatives to using While Controller with JDBC Request Child?JMeter - 使用带 JDBC 请求子的 While 控制器的替代方案?
【发布时间】:2015-03-11 15:22:11
【问题描述】:

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

系统:8000 XML 提交/小时,写入数据库,然后经过一些内部处理,更新 DB 中的状态值(表示提交/申请已被批准)。我设置了一些 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 年,但从未真正回答过每个问题。

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

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

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

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

【问题讨论】:

    标签: loops jdbc while-loop jmeter


    【解决方案1】:

    你的测试是这样进行的:

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

    在您的 While 控制器前添加 Debug Sampler 以自己查看

    解决方案很简单,只需将下一行添加到您的 Beanshell 采样器之一:

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

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

    【讨论】:

    • 谢谢! @Dmitri T - 如果可以的话,只是一个简单的问题。我不是编码员-我已按照您的建议在以前的 beanshell 采样器中添加了该语句。我确实尝试在语句中添加一个新的 beanshell 采样器 - 但我得到了一个 Void Assignment 响应 - 我想知道为什么当这个语句在一个单独的 beanshell 采样器中时我得到这个响应但是在添加时没有得到这个响应声明到预先存在的 beanshell 采样器中。哦,是的 - 感谢您在 sqaforum.com 的 jmeter 论坛上回答问题!
    • 我无法复制您的Void Assignment 回复,实际上应该是空白的。
    • 啊! - 我在 vars.remove("appid_1"); 下方添加了 ResponseMessage=variablesclearedResponseCode=200 - 我为我的其他 beanshell 采样器添加了这些东西 - 但是当我使用 vars.remove 语句将它们添加到单独的 beanshell 采样器时,它似乎不喜欢它。所以 - 我删除了响应的东西,但我没有收到错误 - 已排序 - 不知道为什么 - 但已排序 - 再次如此 - 为回答干杯!
    • 啊,您需要用引号将variablescleared 括起来,因为它需要是Java 字符串。我已经用完整的代码更新了我的答案。值得阅读 How to use BeanShell: JMeter's favorite built-in component 指南以更好地理解 Apache JMeter 中的 Beanshell 脚本
    • gotcha - @Dmitri T. 我一直在寻找一些 Beanshell 的东西来解决这个问题 - 非常感谢你的帮助 - 我真的需要它! - 也为 Beanshell 链接欢呼 - 我会立即检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 2015-06-05
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多