在 JMeter 中随机提取 JSR223 后处理器中的相应值

问题描述

大家好 / Dimitri T 能否请您发表关于在一个代码块中随机提取相应值(例如 ItemID1 和 ItemSlot1)的宝贵想法。我能够在 Jsr223 后处理器代码下编写,并且工作正常。但是当 ItemSlot id 中有空格时,它们就无法获取。从下面的代码中,我在所需的正则表达式中的“匹配号”下传递 ${rannum}。

注意:对应的值会超过 100 个。在某些情况下,我们不会有 ItemSlot1.i.e 空白/空值出现在服务器响应中。因此,我的脚本没有选择相应的值。

应用服务器响应:

"viewSaleListingLink": "https://Example.com/cars/item/search/-/listing/ItemID1/100011142","销售国家": "","销售备注": "","bidLiveUrl": "https://Example.com/cars//registration?p_p_id=RegistrationPortlet_WAR_PWRWeb&p_p_lifecycle=1&p_p_state=normal&ItemSlot1=103009468",

JSR223 后处理器代码

导入 java.math.MathContext; 导入 java.math.RoundingMode;

// 从之前的响应中读取出现值 def Max = Integer.parseInt(vars.get("ItemID1_matchNr"));

int min=1;

int rannum = min + (int) (Math.random() * ((Max - min) + 1));

log.info("Values id="+rannum);

vars.put("rannum",rannum.toString());

enter image description here

解决方法

如果您需要使用正则表达式提取器从响应中提取随机匹配/匹配对 - 只需提供 0 作为“匹配号”,它会自动获取随机匹配组,以便您无需编写任何代码:

enter image description here

还要注意 Post-Processors 是按照它们出现的顺序(颠倒)执行的,所以:

  • 如果您的 JSR223 后处理器高于正则表达式提取器 - ItemID1_matchNr 将是未定义的
  • 如果您的 JSR223 后处理器低于正则表达式提取器 - 您的 rannum 变量将没有任何值

您的回复似乎也是 JSON,因此切换到更强大、更方便的 JSON JMESPath Extractor 是有意义的