1

我正在 JMeter 中运行一系列 Web 服务测试,我想知道如果前一个测试中的正则表达式提取器由于空响应或其他原因而无法提取值,是否有办法跳过测试。我知道我需要使用 If 控制器,但我不知道我应该把什么作为条件。上一个测试的正则表达式如下:

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

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

4

3 回答 3

2

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

架构如下:

采样器 1
    响应断言- 检查响应中是否存在带有 alarmStatus="raised" 的 alarmId;
    正则表达式提取器 - 你的提取器来获取 alarmId;
如果控制器
条件 = ${JMeterThread.last_sample_ok}
    采样器 2 - 获取作为参数的采样器提取的 alarmId;

Response Assertion 将 Sampler 1 的状态设置为“failed”,如果没有找到对应的 alarmId,If Controller 的条件将被评估为“false”,Sampler 2 将被跳过。

更好的方法似乎是这样的:

  1. 为正则表达式提取器的“默认值”字段设置值:(Default Value: NOT_FOUND如果正则表达式不匹配,将设置此值);
  2. 使用 javascript 比较 alarmId var 与默认值作为 If Controller 的条件:"${alarmId}"!="NOT_FOUND"- 如果不等于 Sampler 2,则执行。

在这种情况下,您不需要使用响应断言。

于 2012-07-07T10:30:59.430 回答
0

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

变量的语法是

${myVariable}

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

于 2012-07-06T16:16:03.937 回答
0

在您的 IF 控制器中,使用:

"${alarmId}"  == "raised"
于 2012-07-07T08:40:47.197 回答