【问题标题】:JMeter While ControllerJMeter 控制器
【发布时间】:2011-10-25 07:42:23
【问题描述】:

我已经疯狂地在整个网络上搜索解决我的问题的方法,但目前还没有。我的问题是我必须检查是否在 HTTP 请求中获得特定文本,该请求在一个 while 循环中,如果我这样做了,那么我应该离开循环并继续线程,或者如果文本不存在则完全停止线程.我设置如下:

Thread Group
.. While controller
   .. HTTP request
      .. Response Assertion
Listener

我在 while 控制器中使用了 LAST 并将 HTTP 响应设置为假文本,但它不起作用。

【问题讨论】:

    标签: controller while-loop jmeter


    【解决方案1】:

    希望以下对您有用:

    线程组 HTTP 请求 //设置找到条件 ${__setProperty(txtFound,FALSE,)} 当控制器 // 在条件中反转值 - 将在 txtFound == FALSE 时执行 条件 = ${__BeanShell(!props.get("txtFound")} . . . [在这里执行你的测试逻辑] . . . 您的 HTTP 请求 响应断言 // 在这里设置你的文本断言 // 如果找到文本,这将导致 ${JMeterThread.last_sample_ok} = TRUE IF 控制器 --FOUND // 如果找到文本设置单独的变量或属性 - 例如${txtFound} - 变为 TRUE 条件 = ${JMeterThread.last_sample_ok} HTTP 请求 //设置找到条件 ${__setProperty(txtFound,TRUE,)} // 这将在下一个 WHILE 循环的条件下反转为 FALSE,退出 WHILE 循环 . . .

    我认为您也可以轻松地使用附加到 YOUR HTTP 请求 的 JSR / BSF / BeanShell PostProcessor 将 txtFound 属性设置为 TRUE,而不是使用 IF 进行繁琐的构造。

    【讨论】:

    • 感谢您的想法...使用 BSF 预处理器作为 While 控制器的子级,让我可以让 While 控制器正确评估条件。
    【解决方案2】:

    试试这个

    线程组 xpath_Extractor 或 regex_extractor( 变量 = VAR_1 ) .. 虽然控制器( ${__javaScript("${VAR_1}" != "REQUIRED")} ) .. HTTP 请求 听众

    【讨论】:

      【解决方案3】:

      http://jmeter.apache.org/usermanual/component_reference.html#While_Controller

      WHILE 控制器将一直执行,直到将某些内容设置为 FALSE。通过将条件设置为LAST,您将在最后一个样本FAILS 之前退出控制器。如果样本包含您想要的文本,您是否使用断言使样本失败?

      更简洁的方法可能是使用 beanshell 断言将值设置为 false。

      【讨论】:

      • 是的,如果文本不存在,我正在使用响应断言使示例失败。
      【解决方案4】:

      我为解决这个问题所做的是创建一个正则表达式提取器并对其进行设置,使其不可避免地失败并将我的变量设置为 FAIL。然后我将我的 while 循环设置为 ${__javaScript("${projLoad}" != "SUCCESS")}

      在我的条件下,我创建了相同的 RegEx 提取器再次失败,但将默认值更改为 SUCCESS

      它可能不是最干净的,但它就像一个魅力

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-15
        • 1970-01-01
        相关资源
        最近更新 更多