zoukankan      html  css  js  c++  java
  • 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
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    Matlab 绘制三维立体图(以地质异常体为例)
    Azure DevOps的variable group实现array和hashtable参数的传递
    Azure DevOps 利用rest api设置variable group
    Azure AADSTS7000215 其中一种问题的解决
    Power BI 实现实时更新Streaming Dataset
    AAD Service Principal获取azure user list (Microsoft Graph API)
    Matlab 沿三维任意方向切割CT图的仿真计算
    Azure Powershell script检测登陆并部署ARM Template
    Azure KeyVault设置策略和自动化添加secrets键值对
    Azure登陆的两种常见方式(user 和 service principal登陆)
  • 原文地址:https://www.cnblogs.com/a00ium/p/10351994.html
Copyright © 2011-2022 走看看