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

脚本如下:
<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("------------日志结束----------------");

</pre>

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

 
12.png
 
111.png

脚本如下:
<pre>

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

</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乱码 修改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

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

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

  1. PHP通过php-java-bridge调用JAVA的jar包里class类

    正 文:   有的时候我们需要在PHP里调用JAVA平台封装好的jar包里的class类和方法,一般飘易推荐的做法是采用php-java-bridge做桥接,本文就来介绍一下大致的实现方法. 先简单说 ...

  2. Python3.5调用Java的jar包

    声明:这个是在一个博客上看到的,过了俩星期了突然找不到原博客了,如果原来的博主看到,请联系我删除~ 主要是怕自己忘记,所以在此记录: 环境 Python3.5+JDK1.8 安装命令:python3 ...

  3. C++调用Java的Jar包

    一个简单需求:用C++调用Jar包. 实现基本思路:调用CreateProcess API来启动cmd.exe执行jar包. 调用类CJarAppCall. JarAppCall.h #pragma ...

  4. 使用 jpype 库实现 Python 调用 java 的 jar 包中的功能

    一.what's the JPype JPype 是一个能够让 python 代码方便地调用 Java 代码的工具.在某些时候 java 的能力更强,我们可以用 java 写一个模块的功能然后用 Py ...

  5. 分享:根据webservice WSDL地址自动生成java调用代码及JAR包

    分享:根据webservice WSDL地址自动生成java调用代码及JAR包使用步骤:一.安装java 并配置JAVA_HOME 及 path二.安装ANT 并配置ANT_HOME三.解压WsdlT ...

  6. Java中Jar包调用命令行运行编译

    原文链接:https://www.toutiao.com/i6491877373942694413/ 记事本编写两个简单的类 文件结构目录 启动DOS,进入文件所在目录 进入到class所在文件的目录 ...

  7. Java常用jar包用途

    Java常用jar包用途: USAGE INDEX JAR NAME USAGE 1 ASM asm-2.2.3.jar ASM字节码库 2 ASM asm-commons-2.2.3.jar ASM ...

  8. (转)java 从jar包中读取资源文件

    (转)java 从jar包中读取资源文件 博客分类: java   源自:http://blog.csdn.net/b_h_l/article/details/7767829 在代码中读取一些资源文件 ...

  9. Java 操作jar包工具类以及如何快速修改Jar包里的文件内容

    需求背景:写了一个实时读取日志文件以及监控的小程序,打包成了Jar包可执行文件,通过我们的web主系统上传到各个服务器,然后调用ssh命令执行.每次上传前都要通过解压缩软件修改或者替换里面的配置文件, ...

随机推荐

  1. awk输出匹配内容的所在列数

    想要知道 TCPAbortFailed 所在列数 cat /proc/net/netstat  > test awk '/TCPAbortFailed/ {for (i=1;i<=NF;i ...

  2. Android窗口系统第一篇---Window的类型与Z-Order确定

    Android的窗口系统是UI架构很重要的一部分,数据结构比较多,细节比较多.本篇文章主要介绍窗口相关数据结构和抽象概念理解,关于[窗口部分的博客]计划如下. 1.窗口Z-Order的管理 2.应用程 ...

  3. rand()与srand()

    1.不用srand()的话 两次运行程序产生的随机数序列相同 2.用srand() 两次运行程序产生的随机数则不同 示例程序: #include<iostream> #include< ...

  4. HDU 1850 Being a Good Boy in Spring Festival(博弈·Nim游戏)

    Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32 ...

  5. Trustzone——利用硬件对数据加密,秘钥存在芯片里

    我是看 https://zhuanlan.zhihu.com/p/26441212 这个文章知道trustzone自身会存储秘钥,这个秘钥可以来自用户指纹,也可以来自云端下发的key. Truztzo ...

  6. 前端多媒体(4)—— video标签全面分析

    测试地址:https://young-cowboy.github.io/gallery/html5_video/index.html 属性 一些属性是只读的,一些属性是可以修改从而影响视频播放的. a ...

  7. HihoCoder1655 : 第K小最简真分数([Offer收割]编程练习赛39)(唯一分解+容斥定理+二分)(不错的数学题)

    描述 给一个整数N,请你求出以N为分母的最简(既约)真分数中第K小的是多少? 输入 两个整数N个K. 对于30%的数据,1 <= N <= 1000000 对于100%的数据,1 < ...

  8. [转]Mac技巧——让Mac轻松访问Windows网络共享

    Mac技巧——让Mac轻松访问Windows网络共享   用Mac(MacBook Pro)有段时间了,用一个字概括,那就是“爽”!当然,也有不爽的时候,比如说键盘键位变了,用eclipse的快捷键让 ...

  9. MongoDB主从复制,主主复制

    MongoDB主从复制,是不需要像mysql那样从数据库事先要完整的主数据快照背景介绍:mongodb支持一主一从或多从复制1)    master节点: mongod --dbpath=/usr/M ...

  10. win32 UNICODE 支持

    #include <string> #ifdef _UNICODE #define tstring std::wstring #define __T(quote) L##quote #el ...