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保证其一致性。

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

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


    1.png

1.2 选择JAR file


2.png

1.3 放置在jmeter的 lib\ext\下面 取名为 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

脚本如下:

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("------------日志结束----------------");

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


12.png

111.png

脚本如下:

import java.util.*;
import com.util.lt.AppLoginUtils;

public static getSign(String cardNo){
    Map paras = new HashMap();
        //取出刚刚csv参数化的数据,放到map中
        paras.put("sex",vars.get("sex"));
    paras.put("xxx", vars.get("xxx"));
        paras.put("xxxx", vars.get("xxxx"));
        paras.put("xxxxx", vars.get("xxxxx"));
    paras.put("type",vars.get("type"));
        paras.put("operator", vars.get("operator"));
        paras.put("cardNo",cardNo);    //传参
        paras.put("codeName", vars.get("codeName"));
        paras.put("operatorName", vars.get("operatorName"));
    paras.put("xxxxxx", vars.get("xxxxxx"));

        //调用 上面java打包的 生成验签码的方法
    String sign = AppLoginUtils.getParametersToString(paras,"xxxxxxxxxxxxxxxxxxxxxxx");
    vars.put("sign",sign);      //将生成的sign存到jmeter变量sign中,供后续请求用
    return sign;
}       

//vars.get("name");    从jmeter中获得变量值
//vars.put("key","value");   数据存到jmeter变量中

log.info("------------日志开始----------------");
//下面供调试使用  使用上面 beanshell生成的 cardNo作为请求参数  以此保证使用的是一套数据
log.info("sign is:"+ getSign("${cardNo}"));
log.info("------------日志结束----------------");

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乱码 修改jmeter\bin\jmeter.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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容