JMeter接口测试:BeanShell实现接口的加密和解密(调用加密函数)

前些天用JMeter写了一个接口的自动化脚本,请求参数加密和响应数据解密都覆盖到了,中间涉及了BeanShell脚本编写和导入jar包的一些方法,想着挺有代表性的,分享给大家,希望对大家的接口自动化测试有所启发。

这是一个注册接口,请求方法是get,请求参数有两个,一个是salt,一个是params,salt取随机值,params需要调用开发同学提供的jar包。

JMeter接口测试:BeanShell实现接口的加密和解密(调用加密函数)_第1张图片

下面主要分为四个步骤来介绍:

一、安装JD-GUI工具

二、导入jar包

三、JMeter的BeanShell基础知识科普

四、BeanShell脚本实例解析

一、安装JD-GUI工具

这个工具可用来查看jar包,安装步骤如下:

一)官网下载安装包

进入Java Decompiler,点击Download,下载文件:jd-gui-windows-1.6.6.zip

JMeter接口测试:BeanShell实现接口的加密和解密(调用加密函数)_第2张图片

二)解压后安装

将文件解压,双击jd-gui.exe文件打开文件

JMeter接口测试:BeanShell实现接口的加密和解密(调用加密函数)_第3张图片

三)将jar包拖入JD-GUI,即可查看文件

JMeter接口测试:BeanShell实现接口的加密和解密(调用加密函数)_第4张图片

二、导入jar包

jar包是由开发同学提供的,里面封装了加密和解密的函数,测试同学不用关心怎么实现的,直接调用即可。导入jar包主要有两种方法:

一)将jar包放到JMeter的lib/ext目录下

放好后,再重启JMeter即可。

JMeter接口测试:BeanShell实现接口的加密和解密(调用加密函数)_第5张图片

二)在测试计划中引入

右键测试计划--Add directory or jar to classpath--浏览,添加jar包即可,不需要重启JMeter。

JMeter接口测试:BeanShell实现接口的加密和解密(调用加密函数)_第6张图片

三、JMeter的BeanShell基础知识科普

一)BeanShell的特点

在 JMeter 中,BeanShell 是一种支持使用 Java 编程语言进行脚本编写和执行的可扩展功能,以下是关于 JMeter 的 BeanShell 的一些关键特点:

  1. 脚本语言:BeanShell 是一种脚本语言,它与 Java 语言高度相似,几乎支持所有 Java 语法和语言特性。这使得 Java 开发人员可以轻松地使用 BeanShell 编写脚本,而不需要学习全新的脚本语言。
  2. 支持 Java 类:BeanShell 允许直接导入和使用 Java 类和包。这意味着你可以在脚本中使用 Java 类的方法和属性。
  3. 引入第三方库:通过使用 BeanShell 可以引入第三方 Java 库,从而扩展 JMeter 的功能。
  4. BeanShell Sampler:JMeter 提供了 BeanShell Sampler,它允许你在测试计划中直接编写和执行 BeanShell 脚本,从而可以自定义测试逻辑和操作。

由于 BeanShell 脚本在运行时会被动态解释执行,可能会对性能产生一定影响,特别是当脚本非常复杂或执行频率较高时。如果性能是一个关键问题,建议使用 JMeter 的原生元件来实现测试逻辑。

二)BeanShell脚本常用函数

1、log(infoMessage)

用于将信息输出到 JMeter 的日志文件,例如:

log.info("This is an informational message.");

2、vars

代表 JMeter 的 JMeterVariables 对象,用于访问和操作用户定义的变量,vars对象只能操作String类型 ,例如:

// 设置一个自定义变量

vars.put("myVar", "Hello, World!");

// 获取自定义变量的值

String myValue = vars.get("myVar");

log.info("myVar value: " + myValue);

3、 getResponseDataAsString()

是 JMeter 中 SampleResult 对象的一个方法,用于获取当前采样结果的响应数据(Response Data)并将其作为字符串返回。这个方法通常在 Beanshell Sampler 或 Beanshell PostProcessor 中使用。

// 在 Beanshell PostProcessor 中获取响应数据并处理

import org.apache.jmeter.protocol.http.sampler.HTTPSampleResult;

// 获取前一个请求的 SampleResult 对象

SampleResult prevResult = prev;

// 判断响应是否成功

if (prevResult.isSuccessful()) {

// 获取响应数据作为字符串

String responseData = prevResult.getResponseDataAsString();

log.info("Response Data: " + responseData);

// 在这里你可以对响应数据进行进一步的处理,如解析 JSON、提取数据等

// 例如,假设响应数据是 JSON 格式的,你可以使用 JSON 解析库对其进行解析

// 假设响应数据包含 "name" 字段,并提取该字段的值

String name = parseNameFromJson(responseData);

log.info("Extracted Name: " + name);

// 将提取的数据存储到 JMeter 变量中

vars.put("extractedName", name);

}

4、getResponseCode()

是 JMeter 中 SampleResult 对象的一个方法,用于获取当前采样结果的响应代码(Response Code)。该方法返回一个字符串,表示服务器对请求的响应状态码。

// 在 Beanshell PostProcessor 中获取响应状态码并判断请求是否成功

import org.apache.jmeter.protocol.http.sampler.HTTPSampleResult;

// 获取前一个请求的 SampleResult 对象

SampleResult prevResult = prev;

// 获取响应状态码

String responseCode = prevResult.getResponseCode();

log.info("Response Code: " + responseCode);

// 判断响应是否成功

if (responseCode.equals("200")) {

// 请求成功的处理逻辑

log.info("Request was successful.");

} else {

// 请求失败的处理逻辑

log.warn("Request failed. Response Code: " + responseCode);

}

三)BeanShell脚本导入jar包的方法

1、导入jar的类

格式是:import 包名.类名

2、调用函数

格式是:类名.函数名(参数)

四、BeanShell脚本实例解析

一)新建线程组

JMeter接口测试:BeanShell实现接口的加密和解密(调用加密函数)_第7张图片

二)添加HTTP请求默认值

JMeter接口测试:BeanShell实现接口的加密和解密(调用加密函数)_第8张图片

三)添加前置处理器BeanShell PreProcessor

1、给请求参数salt赋值

JMeter接口测试:BeanShell实现接口的加密和解密(调用加密函数)_第9张图片

2、给请求参数key赋值

JMeter接口测试:BeanShell实现接口的加密和解密(调用加密函数)_第10张图片

3、给请求参数params赋值

先导入jar包的类,如下图的import com.tkx.util.EncryptUtil,然后调用类的函数,如下图的String [] = EncryptUtil.encrypt(content,key,salt);

JMeter接口测试:BeanShell实现接口的加密和解密(调用加密函数)_第11张图片

JMeter接口测试:BeanShell实现接口的加密和解密(调用加密函数)_第12张图片

四)添加HTTP请求

JMeter接口测试:BeanShell实现接口的加密和解密(调用加密函数)_第13张图片

五、添加后置处理器BeanShell PostProcessor

用来解密请求,同前置处理器的方法,先导入jar包的类,然后调用类的函数

JMeter接口测试:BeanShell实现接口的加密和解密(调用加密函数)_第14张图片

六、添加BeanShell断言

先获取响应信息,然后进行状态码或响应数据的断言

JMeter接口测试:BeanShell实现接口的加密和解密(调用加密函数)_第15张图片

代码如下:

import java.lang.String;

import org.apache.jmeter.protocol.http.sampler.HTTPSampleResult;

//获取响应信息

String response = prev.getResponseDataAsString();

log.info("响应状态码:"+ ResponseCode);

log.info("响应头信息:"+ ResponseHeaders);

log.info("响应体数据:"+ response);

//状态码断言

log.info("状态码:" + ResponseCode);

if(ResponseCode.equals("200")){

Failure=false; // 表示断言成功

}

else{

Failure=true; // 表示断言失败

FailureMessage="响应状态码非200"; // 自定义的失败信息

}

//响应数据断言

if(response.contains("注册成功")){

Failure=false; // 表示断言成功

}

else{

Failure=true; // 表示断言失败

FailureMessage="注册失败";

}

七、添加察看结果树

JMeter接口测试:BeanShell实现接口的加密和解密(调用加密函数)_第16张图片

这样,一个接口的加密和解密过程就完全自动化了。

你可能感兴趣的:(JMeter,jmeter,功能测试)