`
yeluowuhen
  • 浏览: 151065 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Jmeter发送请求中的参数替换

阅读更多

        因为项目的需要,需要在压测脚本中发送曝光请求给后台服务,记录一下如何来替换请求中的某个参数。

       首先介绍下题外话。曝光请求是从上一步的服务请求结果中得到的,这就需要在发送请求中添加Json Path Processor。 作为后置处理器,Json Path Processor需要下载插件才能使用。下载jmeter-plugins-json-2.3.jar放入Jmeter的lib/ext下重启jmeter即可。
        之后,配置JSON Path PostProcessor,在variable names中填写参数名称,如astr,此参数将保存Json path expressions中表达式按路径截取的字符串参数,$表示返回的所有字符串,此插件将返回结果进行Json化,通过$.ads[0].monitor[0].url即可取得相应的曝光记录。
       然后,再添加正则表达式提取器,选择应用的范围限为上一步设置的Jmeter Variables,如astr, 正则表达式中输入对str的正则提取: .+\?(.*), 其中小括号中的数据将被用来赋于引用名称中bstr,这样, bstr就是通过对astr进行正则提取后的值。
       如上面操作,曝光请求的参数即被存放入bstr中,因为项目中此值存在${loction}这种字符,导致第二次请求无法在Jmeter中发送。这时需要做替换。将其用location=10这样的字符串替换出来。接下来重点介绍一下替换的方式。
       在第二次请求添加前置处理器:BeanShell PreProcessor 。内置的script如下:
try {
  String surl1 = vars.get("bstr");
  if(surl1 != null){
  if(surl1 != null @and surl1.length() > 0) {
  String path_replaced = surl1.split("\\$")[0]+"10";
  String other = surl1.split("\\$")[1].split("\\}")[1];
  vars.put("NEW_PATH",path_replaced+other);
  }
  }
}
catch (Throwable ex) {
  log.error("Failed to do this or that", ex);
}
      Beanshell中,vars.get()可以取得系统中设置的参数,vars.put()可以添加参数及及值。需要注意split和try catch的使用。有些样本返回中bstr 空,只用if else就会报错。
      拿到NEX_PATH后,曝光请求的路径就可以设置成/s?${NEW_PATH}, 这样就会将${locaiton}替换掉。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics