如果以前样本的响应在失败后更改为OK,如何跳过JMeter上的if控制器?

时间:2015-02-06 16:07:14

标签: if-statement controller jmeter

我正在运行JMeter beanshell采样器测试,之后我有一个if控制器,如果最后一个JMeter样本没问题就应该运行。

我有这个工作,但是,我必须确保如果第一次测试失败,则需要将其更改为pass但不会继续使用if控制器。

我尝试在测试的响应断言中勾选忽略状态复选框,并添加一个BeanShell PostProcessor,将先前的测试响应更改为OK。这些不是选项,因为它会导致继续使用if控制器。

所以: - 如果测试通过继续,如果控制器 - 完成 - 如果测试失败,则更改为pass但跳过控制器

关于如何实现这一目标的任何建议?

由于

2 个答案:

答案 0 :(得分:2)

我建议您按如下方式设计测试:

  1. 添加Counter配置元素并将其配置如下:

    • 开始:1
    • 增量:1
    • 参考名称:N
  2. 添加Beanshell PostProcessor作为第一个测试的子项,并将下一个代码放入其“脚本”区域

    int test = Integer.parseInt(vars.get("N"));
    
    if (test == 1 && !prev.isSuccessful()) {
        prev.setSuccessful(true);
    }
    
  3. 在第一次测试后添加如果控制器并使用以下条件:

    ${JMeterThread.last_sample_ok} && "${N}" != 1
    
  4. 所以

    • 计数器将保存当前测试编号并将其存储到JMeter变量N
    • 如果“第一次”和“失败”
    • ,Beanshell PostProcessor会将您的测试标记为成功
    • 如果符合以下条件,Controller将执行嵌套采样器:

      • 以前的测试成功
      • 以前的测试不是“第一次”

    有关正确条件执行JMeter采样器的更多信息,请参阅How to use JMeter's 'IF' Controller and get Pie指南。

答案 1 :(得分:0)

您可以定义一个单独的变量来控制if控制器,或者在if控制器的条件被评估之后将变量从失败中更改为传递。