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

背景及思路:

需求:要做 创建新卡 接口的测试,要求:

1. 不需要每次手动修改请求参数。

方案:文中先用excle将数据准备好,导出为csv格式,再用jmeter的csv请求进行参数化

2. 卡号需要唯一;

方案:文中用jmeter的beanshell按时间戳加随机数生成

3. 请求参数中有一个参数,会根据相应的请求参数生成(文中的sign值),接口请求会验证sign是否和相应请求参数对应;

方案:

1. 文中将生成sign的源码打包放在jmeter的lib\ext\ 下,

2. 再用jmeter的beanshell引用jar包,

3. 用同样的规则生成sign保证其一致性。

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

将生成验签的java源码生成jar包,并将jar包放置在 \lib\ext目录下

1.1 将生成sign规则的java类 打jar包 包路径:com.util.lt

format,png

1.png

1.2 选择JAR file

format,png

2.png

1.3 放置在jmeter的 lib\ext\下面 取名为 AppLoginUtils

format,png

3.png

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

format,png

4.png

进 META-INF

format,png

5.png

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

参数化 excle 准备数据

2.1 excle 列出个参数及值

format,png

6.png

2.2 另存为csv格式

format,png

7.png

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

format,png

8.png

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

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

format,png

9.png

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

format,png

10.png

format,png

11.png

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

format,png

12.png

format,png

13.png

脚本如下:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

3.3 BeanShell PreProcessor 调用jar包的方法 生成sign值

同上添加 BeanShell PreProcessor 步骤,

format,png

12.png

format,png

111.png

脚本如下:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

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

format,png

14.png

3.4.1 parameters请求信息形式:

format,png

15.png

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

format,png

16.png

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

format,png

17.png

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

format,png

18.png

3.6.1监测的请求:

format,png

19.png

format,png

20.png

3.6.2 监测的返回:

format,png

21.png

3.6.3 监测的 debug Sample:

format,png

22.png

format,png

23.png

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

接下来是 在做的过程中的一些注意点:

一. 怎么调试:

1.可以用beanShellSample 进行请求,debugSample 在查看结果树中 进行调试 。

2.也可以打印日志 log.info() 进行调试,需要先打开查看日志的选项:

format,png

24.png

二. 编码问题:

jmeter乱码 修改jmeter\bin\jmeter.properties文件:

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

format,png

25.png

sampleresult.default.encoding="utf-8"

format,png

26.png

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

format,png

27.png

format,png

28.png

http请求的 content encoding:utf-8

format,png

29.png

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

format,png

30.png


版权声明:本文为weixin_30310209原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。