zoukankan      html  css  js  c++  java
  • Jmeter BeanShell使用场景

      BeanShell简介

      Beanshell 是一种轻量级的 Java 脚本,纯 Java 编写的,能够动态的执行标准 java 语法及一些扩展脚本语法,类似于 javaScript 和 perl。

      场景使用

      场景1

      1、请求头中参数需要做哈希256加密,如果在内置函数处理不了的情况,首先考虑的就是使用beanShell取样器,如图:

       备注:这里可以将接口的请求报文放到beanshell里面,并且还可以使用内置函数进行参数化,当然也可以自己写。

      场景2

      1、两个接口A和B,接口A的响应报文中有一个List数据,是接口B请求报文的参数,这个时候使用正则或Json提取器都无法全部一次提取到这个列表,需要加个beanshell组合使用。

      列表数据格式是这样的:

    list = ["TEST001","TEST002","TEST003"...]
    

      用正则的话,只能匹配到一个一个的list,如图:

      正则提取器+beanShell组合使用

       遇到这种场景,想要拿到这个列表的数据,必须要用beanshell和正则配合使用。正则负责提取,beanshell负责遍历然后重新组装成需要的list。如:

    import com.alibaba.fastjson.JSON; // 因为列表中的元素要有双引号,需要转成json字符串
    
    
    String  getindex = vars.get("getlogisticsOrderNo_matchNr"); // matchNr返回正则匹配的元素总数,其中getlogisticsOrderNo这个是正则提取的
    log.info("获取数组元素总数: " + getindex);
    
    List list = new ArrayList();
    int toIntIndex = Integer.parseInt(getindex);
    log.info("+++++++++++++" + toIntIndex);
    for(int i = 0;i < toIntIndex;i++){
    	String valuess = vars.get("getlogisticsOrderNo_"+(i + 1));
    	log.info("+++++++++++++"+i);
    	log.info("--------"+valuess);
    //	String strResult =  "\"" + valuess +"\"";
    	list.add(valuess);
    	
    };
    String jsonString  = JSON.toJSONString(list);
    log.info("+++++++++++++"+jsonString);
    
    
    //vars.put("arr",list);
    

      这个需要引入fastjson.jar包。

      Json提取器+beanShell组合使用

      我们可以使用json提取器,这里有两种,一种跟上面一样,获取元素总数,一种是直接返回所有数据,但是这里返回的所有数据是用逗号隔开的,不是列表的,需要处理。

      1、第一种,使用Json提取器拿到总元素,后面的方法和上面一直,如:

      beanshell需要改一下,数组元素总数也会返回一个matchNr,如:

    import com.alibaba.fastjson.JSON; // 因为列表中的元素要有双引号,需要转成json字符串
    
    
    String  getindex = vars.get("get_logisticsOrderNo_matchNr"); // matchNr返回正则匹配的元素总数,其中getlogisticsOrderNo这个是正则提取的
    
    log.info("获取数组元素总数: " + getindex);
    
    List list = new ArrayList();
    int toIntIndex = Integer.parseInt(getindex);
    log.info("+++++++++++++" + toIntIndex);
    for(int i = 0;i < toIntIndex;i++){
    	String valuess = vars.get("get_logisticsOrderNo_"+(i + 1));
    	log.info("+++++++++++++"+i);
    	log.info("--------"+valuess);
    //	String strResult =  "\"" + valuess +"\"";
    	list.add(valuess);
    	
    };
    String jsonString  = JSON.toJSONString(list);
    log.info("+++++++++++++"+jsonString);
    
    
    //vars.put("arr",list);
    

      运行后:

       2、第二种,使用Json提取器中的_ALL下标来取,因为返回数据格式会是这样:TEST001,TEST002,TEST003... , 所以需要处理一下 ,如下:

      Json提取器还是不变:

      

      beanShell部分写法:

    import com.alibaba.fastjson.*; // 因为列表中的元素要有双引号,需要转成json字符串
    
    
    String  getindex = vars.get("get_logisticsOrderNo_ALL"); // matchNr返回正则匹配的元素总数,其中getlogisticsOrderNo这个是正则提取的
    
    List result = new ArrayList();
    for (String get_Str:getindex.split(",")){
    	log.info("+++++++++++++"+JSON.toJSONString(get_Str));
    	toStrJson = JSON.toJSONString(get_Str);
    	result.add(toStrJson);
    	
    };
    log.info("+++++++++++++"+result);
    vars.put("new_list",result.toString());
    

      运行结果:

      

       备注:这里主要利用split函数和for循环来重新组装数据。

      总结

      有兴趣加入测试交流群,欢迎测开爱好者加入我们~

    备:正则使用可以参考:https://www.cnblogs.com/zhangyqn/p/11820465.html


    作者:全栈测试开发日记
    出处:https://www.cnblogs.com/liudinglong/
    csdn:https://blog.csdn.net/liudinglong1989/
    微信公众号:全栈测试开发日记
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

     
  • 相关阅读:
    记一次5000并发的调试过程
    Thread Local Area内存溢出的处理方法
    关于不停机部署方案的选择
    Spring Cloud版本选择
    python学习记录-机器学习
    SAM宏观生态学空间分析帮助文档
    arcgis raster clip and mask difference 栅格 提取 clip 和 mask 方法的区别
    R语言 重命名目录下所有文件
    R语言并行运算示例 parallel 包
    R语言查看栅格值
  • 原文地址:https://www.cnblogs.com/liudinglong/p/15539094.html
Copyright © 2011-2022 走看看