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

摘要:
方案:文中先用excle将数据准备好,导出为csv格式,再用jmeter的csv请求进行参数化2.卡号需要唯一;方案:文中用jmeter的beanshell按时间戳加随机数生成3.请求参数中有一个参数,会根据相应的请求参数生成,接口请求会验证sign是否和相应请求参数对应;方案:1.文中将生成sign的源码打包放在jmeter的libext下,2.再用jmeter的beanshell引用jar包,3.用同样的规则生成sign保证其一致性。

背景及思路:
需求:要做 创建新卡 接口的测试,要求:
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


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

1.2 选择JAR file


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

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


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

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


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

进 META-INF


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

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

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


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

2.2 另存为csv格式


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

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


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

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

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


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

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


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

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

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


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

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

脚本如下:
<pre>

jmeter接口测试-调用java的jar包-csv参数化请求-BeanShellPreProcessor生成验签作为请求验证参数-中文乱码----实战第14张jmeter接口测试-调用java的jar包-csv参数化请求-BeanShellPreProcessor生成验签作为请求验证参数-中文乱码----实战第15张
importjava.sql.Date;
importjava.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 步骤,


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

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

脚本如下:
<pre>

jmeter接口测试-调用java的jar包-csv参数化请求-BeanShellPreProcessor生成验签作为请求验证参数-中文乱码----实战第14张jmeter接口测试-调用java的jar包-csv参数化请求-BeanShellPreProcessor生成验签作为请求验证参数-中文乱码----实战第19张
1 import java.util.*;
2 importcom.util.lt.AppLoginUtils;
3 
4 public staticgetSign(String cardNo){
5 Map paras = newHashMap();
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 returnsign;
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请求 输入相应的地址 端口号 路径 编码格式


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

3.4.1 parameters请求信息形式:


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

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


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

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


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

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


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

3.6.1监测的请求:


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

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

3.6.2 监测的返回:


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

3.6.3 监测的 debug Sample:


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

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

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

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


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

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

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


    jmeter接口测试-调用java的jar包-csv参数化请求-BeanShellPreProcessor生成验签作为请求验证参数-中文乱码----实战第31张
    25.png
  2. sampleresult.default.encoding="utf-8"


    jmeter接口测试-调用java的jar包-csv参数化请求-BeanShellPreProcessor生成验签作为请求验证参数-中文乱码----实战第32张
    26.png
  3. 参数化的话 文件另存为utf-8 的话 ,编码需要 utf-8,系统默认的话就不用


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

    jmeter接口测试-调用java的jar包-csv参数化请求-BeanShellPreProcessor生成验签作为请求验证参数-中文乱码----实战第34张
    28.png
  4. http请求的 content encoding:utf-8


    jmeter接口测试-调用java的jar包-csv参数化请求-BeanShellPreProcessor生成验签作为请求验证参数-中文乱码----实战第35张
    29.png
  5. 生成加密的java源码的方法中指定请求编码类型: s.getBytes("utf-8")


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

作者:Alisa168
链接:https://www.jianshu.com/p/86569ae63d96
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

免责声明:文章转载自《jmeter接口测试-调用java的jar包-csv参数化请求-BeanShellPreProcessor生成验签作为请求验证参数-中文乱码----实战》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇html5标签知多少Java精通并发-volatile与内存屏障的重要语义详细分析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

接口测试常见bug

一、接口参数数据类型:1. 数值型2. 字符串类型3. 数组或者 链表类型4. 结构体二、接口测试常见bug:1. 特殊值处理不当导致程序异常退出或者崩溃2. 类型边界溢出,导致数据读出和写入不一致3. 取值边界外值未返回正确的错误信息4. 参数 为null或空字符串“”等5. 权限未处理,可以访问其他用户的信息例如:无权限可以访问,或者 一般用户可以访问...

经验分享:程序员如何快速定位问题(BUG)

让我掉下眼泪的 不止内存泄漏 让我夜夜不眠的 不止你的需求 明天还要改多久 你攥着我的手 让我感到为难的 是善变的需求 发布总是在半夜 回滚是永远的愁 错误(Bug)随时的暴漏 困扰着我心头 作为程序员,以上这些场景你一定都经历过。今天就来聊聊如何快速定位问题。 先划重点,下文所写都是一家之言,本人工作经验不多,语言表达能力有限,如果写的不好,还望轻喷...

jmeter随笔(2)--post接口参数化问题

今天试着做了一下post接口测试,并对其输入的参数进行参数化设置,在这里总结一下测试的过程中遇到的问题,以及解决方式: 一、使用body data设置参数: 1,首先,使用Fiddler录制post请求,并发送成功,导成jmx格式,并用jmeter打开; 2,此时,不设置参数,运行,OK,运行成功,其传递的值为以下格式: {"tagid":"aaaaa",...

微信APP支付(Java后台生成签名具体步骤)

public class PayCommonUtil { //定义签名,微信根据参数字段的ASCII码值进行排序 加密签名,故使用SortMap进行参数排序public static String createSign(String characterEncoding,SortedMap<String,String> parameter...

接口测试基本理解

想必大家都做过功能测试,通过业务需求测试功能点是否达到预期(测试用例),一些小伙伴想要了解接口测试就会有一些疑问,接口是什么呢?怎么去做接口测试?接口测试为了实现什么? 我们一步一步来说明: 什么是接口? 接口分为对外接口和对内接口 对内接口: 个人理解:程序之间方法的调用,模块之间的交互,比如A开发写好了一个登录接口告诉B开发直接在权限模块调用就可以了。...

Mongo导出mongoexport和导入mongoimport介绍

 最近爬取mobike和ofo单车数据,需要存储在csv文件中,因为设计的程序没有写存储csv文件的方法,为了偷懒所以就继续存储到了MongoDB中。恰好MongoDB支持导出的数据可以是csv文件和json文件,所以下面介绍下MongoDB mongoexport和mongoimport方法; 一、导出工具mongoexport 简介,通过帮助先了解下m...