JMeter - 如果前一个测试的正则表达式可以提取某个值,则只运行后续测试?

时间:2012-07-06 13:45:16

标签: javascript regex jmeter

我在JMeter中运行了一系列的webservice测试,我想知道如果前一个测试中的正则表达式提取器由于空响应或其他东西而无法提取值,是否有办法跳过测试。我知道我需要使用一个If控制器,但我无法弄清楚我应该把它作为条件。上一次测试的正则表达式如下:

Reference Name: alarmid
Regular Expression: alarmStatus="raised" [^>]+ alarmId="(.+?)"

因此,如果找不到具有“已提升”状态的警报ID,我希望跳过下一个测试,因为$ {alarmid}是它的参数,否则会出错500。有任何想法吗?提前谢谢!

3 个答案:

答案 0 :(得分:2)

您可以尝试将Response AssertionIf Controller组合使用javascript条件:${JMeterThread.last_sample_ok} (check if last sample succeeded)

如下所示的架构:

Sampler 1
    Response Assertion - to check if alarmId with alarmStatus="raised" is present in response;
    Regular Expression Extractor - your extractor to get alarmId;
If Controller
Condition = ${JMeterThread.last_sample_ok}
    Sampler 2 - sampler that gets as argument extracted alarmId; 

如果没有找到相应的alarmId,响应断言会将采样器1的状态设置为“失败”,如果控制器的状态将被评估为“假”,则将跳过采样器2。

更好的方式似乎是:

  1. 设置Regular Expression Extractor的“默认值”字段的值:Default Value: NOT_FOUND(如果正则表达式不匹配,则会设置此值);
  2. 使用alarmId var与默认值的javascript比较作为If Controller的条件:"${alarmId}"!="NOT_FOUND" - 如果不等于Sampler 2的执行。
  3. 在这种情况下,您不需要使用Response Assertion。

答案 1 :(得分:0)

您可以使用变量。将正则表达式的结果保存到变量,而不是在IF CONTROLLER中使用此变量。

变量的语法是

${myVariable}

这可以在JMeter的任何地方使用

答案 2 :(得分:0)

在IF Controller中,使用:

"${alarmId}"  == "raised"