首页 > 解决方案 > 在JMeter中随机提取JSR223后处理器中的对应值

问题描述

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

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

应用服务器响应:

“viewSaleListingLink”:“https://Example.com/cars/item/search/-/listing/ItemID1/100011142”,“saleCountry”:“”,“saleNote”:“”,“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"));

整数最小值=1;

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

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

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

在此处输入图像描述

标签: jmeterbeanshell

解决方案


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

在此处输入图像描述

另请注意,后处理器按照它们出现的顺序(倒置)执行,因此:

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

此外,您的响应似乎是JSON,因此切换到更强大、更方便的JSON JMESPath Extractor是有意义的


推荐阅读