问题描述
大家好 / 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());
解决方法
如果您需要使用正则表达式提取器从响应中提取随机匹配/匹配对 - 只需提供 0
作为“匹配号”,它会自动获取随机匹配组,以便您无需编写任何代码:
还要注意 Post-Processors 是按照它们出现的顺序(颠倒)执行的,所以:
- 如果您的 JSR223 后处理器高于正则表达式提取器 -
ItemID1_matchNr
将是未定义的 - 如果您的 JSR223 后处理器低于正则表达式提取器 - 您的
rannum
变量将没有任何值
您的回复似乎也是 JSON,因此切换到更强大、更方便的 JSON JMESPath Extractor 是有意义的