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

脚本如下:

<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>

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

</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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

原文地址:https://www.cnblogs.com/a00ium/p/10351994.html

时间: 2024-10-12 11:23:34

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

C++调用Java的Jar包

一个简单需求:用C++调用Jar包. 实现基本思路:调用CreateProcess API来启动cmd.exe执行jar包. 调用类CJarAppCall. JarAppCall.h #pragma once class CJarAppCall { public: CJarAppCall(void); ~CJarAppCall(void); /* @brief 运行Jar包调用,等待运行完毕返回 @param[in] strJarDir jar包文件夹 @param[in] strJarName

VS2010 C++调用Java的Jar包

在网上看了一圈,只有一个示例代码,而且运行有错误,下面给出正确代码: JarAppCall.h 1 #pragma once 2 3 4 class CJarAppCall 5 { 6 public: 7 CJarAppCall(void); 8 ~CJarAppCall(void); 9 10 /* 11 @brief 执行Jar包调用,等待执行完成返回 12 @param[in] strJarDir jar包目录 13 @param[in] strJarName jar包名称 14 @ret

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字节码库 3 ASM asm-util-2.2.3.jar Java字节码操纵和分析框架 4 COMMONS commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期管理的常用方法. 5 COMMONS commons-beanuti

Java常见Jar包的用途

jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期管理的常用方法. jaxrpc.jar Axis运行所需要的组件包 saaj.jar 创建到端点的点到点连接的方法.创建并处理SOAP消息和附件的方法,以及接收和处理SOAP错误的方法. wsdl4j-1.5.1.jar Axis运行所需要的组件包 activation.jar JAF框架的jar包 annotations-a

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

(转)java 从jar包中读取资源文件 博客分类: java 源自:http://blog.csdn.net/b_h_l/article/details/7767829 在代码中读取一些资源文件(比如图片,音乐,文本等等),在集成环境(Eclipse)中运行的时候没有问题.但当打包成一个可执行的jar包(将资源文件一并打包)以后,这些资源文件找不到,如下代码:Java代码 [java] view plaincopy //源代码1: package edu.hxraid; import java

SoapUI调用自写Jar包

soapui能够使用groovy脚本,脚本中可以调用自己编写的jar包,使用中会遇到一些问题,下面进行一些记录 soapui调用自写jar包 1.编写jar代码并调试测试成功 2.打包jar包 eclipse中鼠标右键到需要打包的项目-Export-Java-JAR file-Next-选中项目下manifest.mf文件和需要打包的方法-指定jar包存储路径和jar包名称-Finish 3.拷贝jar到指定soapui路径 * \SoapUI-Pro-5.1.2\bin\ext\ *为soap

Kettle中调用用户自定义的jar包

ETL工具断断续续的也接触了 Informatica,Kettle, SSIS,个人感觉Info很强大但是也很贵,而且有着一些神秘感.Kettle 4.0版本以来已经有了User  defined java class组件,使用户可以写Java代码 让kettle来调用,这就说明了很多kettle不能处理的东西我们可以通过Java代码来实现,步骤如下: 一:创建Java  Project   二:导出Jar包 在main方法中测试Java Project方法无误后 ,导出为jar包,如下图所示

C++项目通过JNI使用Java第三方jar包

最近在C++项目中碰到了需要使用第三方公司开发的Java jar包的问题,最后使用了JNI来解决. 参考了网络上不少的方法介绍, 大多数介绍JNI的文章讲的的都是Java通过JNI来调C的本地代码,其实这个也可以反过来用就是C的本地代码通过创建Java虚拟机调用java方法.下面贴一下解决实例C2JavaJym.c,注释不是很多. #include <jni.h> #include <stdlib.h> #include <string.h> /*C字符串转JNI字符串

C#调用java的jar文件的方法(转)

一.将已经编译后的java中Class文件进行打包: Eclipse或myeclipse进行Export选择jar即可.或者使用命令 如:将某目录下的所有class文件夹全部进行打包处理: 使用的命令:jar cvf test.jar -C com/ . 其中test.jar为要生成的jar包:com/ . 为指定的当前目录下的文件夹,该文件夹包括子文件夹及class文件: cmd->到java class文件目录下->jar  cvf    要生成的jar包名称.jar    java类文件