• jmeter接口测试-调用java的jar包-csv参数化请求-BeanShellPreProcessor生成验签作为请求验证参数-中文乱码----实战


    背景及思路:
    需求:要做 创建新卡 接口的测试,要求:
    1. 不需要每次手动修改请求参数。
    方案:文中先用excle将数据准备好,导出为csv格式,再用jmeter的csv请求进行参数化
    2. 卡号需要唯一;
    方案:文中用jmeter的beanshell按时间戳加随机数生成
    3. 请求参数中有一个参数,会根据相应的请求参数生成(文中的sign值),接口请求会验证sign是否和相应请求参数对应;
    方案:
    1. 文中将生成sign的源码打包放在jmeter的libext 下,
    2. 再用jmeter的beanshell引用jar包,
    3. 用同样的规则生成sign保证其一致性。

    -----下面正式开始实战------:

    1. 将生成验签的java源码生成jar包,并将jar包放置在 libext目录下
      1.1 将生成sign规则的java类 打jar包 包路径:com.util.lt


       
      1.png

    1.2 选择JAR file


     
    2.png

    1.3 放置在jmeter的 libext下面 取名为 AppLoginUtils


     
    3.png

    1.4 如果对路径不熟悉的话,可以将刚刚生成的jar包放在D盘, 解压,查看目录路径


     
    4.png

    进 META-INF


     
    5.png

    -----至此---java生成jar包并放在jmeter相应目录准备工作做好了.-----

    1. 参数化 excle 准备数据
      2.1 excle 列出个参数及值


       
      6.png

    2.2 另存为csv格式


     
    7.png

    2.3 用文本编辑器(如:editplus)打开文本,第一行为参数名,下面为参数,剪切第一行数据为jmeter csv参数行,实际数据去掉第一行数据


     
    8.png

    -------------至此----测试参数准备好了.----------------

    1. jmeter 开始进行测试 添加线程组


       
      9.png

    3.1 jmeter设置csv参数 variableNames行数据为上面剪切的第一行数据


     
    10.png

     
    11.png

    3.2 BeanShell PreProcessor 添加脚本生成需要的信息字段(生成cardNo为时间戳唯一数 为后续生成sign做准备)


     
    12.png

     
    13.png

    脚本如下:
    <pre>

    import java.sql.Date;
    import java.text.SimpleDateFormat;
    
    Long timeStamp = System.currentTimeMillis(); //获取当前时间戳
    SimpleDateFormat sdf = new SimpleDateFormat("yyMMddHHmmss"); //定义时间格式
    String timeNow = sdf.format(new Date(timeStamp)); // 时间戳转换成定义好的时间格式
    
    //(数据类型)(最小值+Math.random()(最大值-最小值+1))
    //从1到9999的int型随机数
    String cardNo = timeNow + (int)(1+Math.random()(9999-1+1));
    
    //vars.get("name"); 从jmeter中获得变量值
    //vars.put("key","value"); 数据存到jmeter变量中
    vars.put("cardNo",cardNo); //将生成的当前时间加随机数生成的唯一字符串保存到jemter变量cardNo中
    
    log.info("------------日志开始----------------");
    log.info("cardNo is:"+cardNo);
    log.info("------------日志结束----------------");
    View Code

    </pre>

    3.3 BeanShell PreProcessor 调用jar包的方法 生成sign值
    同上添加 BeanShell PreProcessor 步骤,


     
    12.png

     
    111.png

    脚本如下:
    <pre>

     1 import java.util.*;
     2 import com.util.lt.AppLoginUtils;
     3 
     4 public static getSign(String cardNo){
     5 Map paras = new HashMap();
     6 //取出刚刚csv参数化的数据,放到map中
     7 paras.put("sex",vars.get("sex"));
     8 paras.put("xxx", vars.get("xxx"));
     9 paras.put("xxxx", vars.get("xxxx"));
    10 paras.put("xxxxx", vars.get("xxxxx"));
    11 paras.put("type",vars.get("type"));
    12 paras.put("operator", vars.get("operator"));
    13 paras.put("cardNo",cardNo); //传参
    14 paras.put("codeName", vars.get("codeName"));
    15 paras.put("operatorName", vars.get("operatorName"));
    16 paras.put("xxxxxx", vars.get("xxxxxx"));
    17 
    18     //调用 上面java打包的 生成验签码的方法
    19 String sign = AppLoginUtils.getParametersToString(paras,"xxxxxxxxxxxxxxxxxxxxxxx");
    20 vars.put("sign",sign);      //将生成的sign存到jmeter变量sign中,供后续请求用
    21 return sign;
    22 }
    23 
    24 //vars.get("name"); 从jmeter中获得变量值
    25 //vars.put("key","value"); 数据存到jmeter变量中
    26 
    27 log.info("------------日志开始----------------");
    28 //下面供调试使用 使用上面 beanshell生成的 cardNo作为请求参数 以此保证使用的是一套数据
    29 log.info("sign is:"+ getSign("${cardNo}"));
    30 log.info("------------日志结束----------------");
    View Code

    </pre>

    3.4 http请求 输入相应的地址 端口号 路径 编码格式


     
    14.png

    3.4.1 parameters请求信息形式:


     
    15.png

    3.4.2 或者用 bodydata请求信息形式(与上面的请求形式二选一 其中一个可以右键--禁用):


     
    16.png

    3.5 添加 debug sample 进行测试调试用 (可不用添加)


     
    17.png

    3.6 添加监控器 查看结果树 聚合报告:


     
    18.png

    3.6.1监测的请求:


     
    19.png

     
    20.png

    3.6.2 监测的返回:


     
    21.png

    3.6.3 监测的 debug Sample:


     
    22.png

     
    23.png

    -------至此----一个完整的调用和监控结束了.-------

    接下来是 在做的过程中的一些注意点:
    一. 怎么调试:
    1.可以用beanShellSample 进行请求,debugSample 在查看结果树中 进行调试 。
    2.也可以打印日志 log.info() 进行调试,需要先打开查看日志的选项:


     
    24.png

    二. 编码问题:
    jmeter乱码 修改jmeterinjmeter.properties文件:

    1. 把“jsyntaxtextarea.font.family=Hack”这行的“#”注释去掉 或者添加一行 用中文字体都行


       
      25.png
    2. sampleresult.default.encoding="utf-8"


       
      26.png
    3. 参数化的话 文件另存为utf-8 的话 ,编码需要 utf-8,系统默认的话就不用


       
      27.png

       
      28.png
    4. http请求的 content encoding:utf-8


       
      29.png
    5. 生成加密的java源码的方法中指定请求编码类型: s.getBytes("utf-8")


       
      30.png


    作者:Alisa168
    链接:https://www.jianshu.com/p/86569ae63d96
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    栈实现队列
    朋友圈的数量
    岛屿的数量
    岛屿的最大面积
    单词最短路径
    矩阵中查找单词
    拨号问题
    CDN原理
    TCP建立连接的三次握手过程
    JavaScript手写几种常见的排序算法:冒泡、选择、插入、希尔、归并、快排
  • 原文地址:https://www.cnblogs.com/a00ium/p/10351994.html
Copyright © 2020-2023  润新知