JMeter接口测试:BeanShell实现接口的加密和解密

news2024/11/13 20:44:01

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

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

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

一、安装JD-GUI工具

二、导入jar包

三、JMeter的BeanShell基础知识科普

四、BeanShell脚本实例解析

一、安装JD-GUI工具

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

一)官网下载安装包

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

二)解压后安装

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

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

二、导入jar包

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

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

放好后,再重启JMeter即可。

二)在测试计划中引入

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

三、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脚本实例解析

一)新建线程组

二)添加HTTP请求默认值

三)添加前置处理器BeanShell PreProcessor

1、给请求参数salt赋值

2、给请求参数key赋值

3、给请求参数params赋值

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

四)添加HTTP请求

五、添加后置处理器BeanShell PostProcessor

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

六、添加BeanShell断言

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

代码如下:

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="注册失败";

}

七、添加察看结果树

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/802081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简化Java单元测试数据

用EasyModeling简化Java单元测试 EasyModeling 是我在2021年圣诞假期期间开发的一个 Java 注解处理器,采用 Apache-2.0 开源协议。它可以帮助 Java 单元测试的编写者快速构造用于测试的数据模型实例,简化 Java 项目在单元测试中准备测试数据的工作&…

半路杀出个“程咬金”,谁在吹响智能化供应链重构号角

汽车智能化的竞争,不再是平行模式(车企与车企、Tier1与Tier1),也不再是一边倒的车企自研模式,更不是纯粹的B2C模式。 随着昨天大众集团对外官宣与小鹏、上汽的深度合作启动,围绕电动化、智能化的竞争无疑进…

PHP注册、登陆、6套主页-带Thinkphp目录解析-【白嫖项目】

强撸项目系列总目录在000集 PHP要怎么学–【思维导图知识范围】 文章目录 本系列校训本项目使用技术 上效果图主页注册,登陆 phpStudy 设置导数据库项目目录如图:代码部分:控制器前台的首页 其它配套页面展示直接给第二套方案的页面吧第三套…

Talk | 南洋理工大学博士后研究员李祥泰:基于Transformer的视觉分割模型总结、回顾与展望

​ 本期为TechBeat人工智能社区第517期线上Talk! 北京时间7月27日(周四)20:00,南洋理工大学博士后研究员—李祥泰的Talk已经准时在TechBeat人工智能社区开播了! 他与大家分享的主题是: “基于Transformer的视觉分割模型总结、回顾与展望”&am…

无涯教程-jQuery - animate()方法函数

animate()方法执行一组CSS属性的自定义动画。 animate( params, [duration, easing, callback] ) - 语法 selector.animate( params, [duration, easing, callback] ); 这是此方法使用的所有参数的说明 params - 动画将朝其移动的CSS属性图。duration - 这是可选…

idea常用技巧/idea常见问题

idea常见问题 idea全局搜索默认只显示100条解决方案 如上图,每次搜索时只显示100条,没法展示全。因版本的不同,配置也有些差异,以下也是经过各种搜索整理出了两个方案来解决这个问题。 方案一: 快捷键Ctrl shift a…

windows环境启动redis-server.exe出现闪退问题解决方案(亲测有效)

现象 windows环境下,启动redis-server.exe,出现闪退现象 解决方案 在你的redis解压目录下,新建一个start.bat文件 在start.bat文件里面写上这一句话: redis-server.exe redis.windows.conf然后保存,后面启动redis…

网络安全/信息安全—学习笔记

一、网络安全是什么 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面…

【暑期每日一练】 day7

目录 选择题 (1) 解析: (2) 解析: (3) 解析: (4) 解析: (5) 解析: 编程题 题一…

​LeetCode解法汇总2500. 删除每行中的最大值

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描述: 给你一个 m x n 大小的矩阵 grid ,由若干正整数组成。 执行下述操作…

方差分析学习

有时候能看的下去,有时候看书看不下去。 为了加深理解和记忆,先把基础的内容记忆一下。 组内方差(误差平方和)和组间方差(效应平方和)的定义: 注意:图中红线部分是一个整体。 误差…

基于java SpringBoot和HTML的博客系统

随着网络技术渗透到社会生活的各个方面,传统的交流方式也面临着变化。互联网是一个非常重要的方向。基于Web技术的网络考试系统可以在全球范围内使用互联网,可以在本地或异地进行通信,大大提高了通信和交换的灵活性。在当今高速发展的互联网时…

Quartz实战:基于Quartz实现定时任务的动态调度,实现定时任务的增删改查

文章目录 一、Quartz基础二、使用Quartz实现定时任务的动态调度1、使用Quartz-jobStore 持久化2、前端页面实现效果图3、自定义job表4、增删改查Controller5、Quartz工具类6、测试任务类7、springboot启动初始化定时任务8、自定义JobFactory,使Task注册为Bean9、省略…

PoseiSwap 即将开启质押,利好刺激下 POSE通证短时涨超 30%

随着Nautilus Chain主网的上线,预示着Web3世界迎来全新的模块化、Layer3时代,为Web3世界与Web2世界的深入融合构建基础。而PoseiSwap作为Nautilus Chain上的首个DEX,也成为了加密行业首个以模块化为基础构建的DEX。 基于Nautilus Chain&#…

免费商城搭建之java商城 开源java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c 手机商城免费搭建

1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

【lesson6】gcc和动静态库介绍

文章目录 gcc介绍gcc使用gcc -Egcc -Sgcc -cgcc *.ogcc *.c一步到位翻译 动静态库介绍动态链接和静态链接动态链接静态链接动静态链接总结 gcc介绍 gcc是一款翻译器,专门用来翻译C语言文本的翻译器。 程序的翻译过程: 是C文本---->计算机二进制可执行…

Qt5.14.2+VS2019配置MSVC2017

问题: The compiler " Microsoft Visual C Compiler 16 . 11 . 32106 . 194 ( amd64 x86 )( x86-windows-msvc2019-pe-32bit ) cannot produce code for the Qt version " Qt5.14.2 MSVC2017 64bit " ( x86-windows-msvc2017-pe-64bit 编译器“…

Docker安装部署ShardingProxy详细教程

🚀 ShardingSphere 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜&…

求整数中的最大值

才用打擂台的形式,先放一个数max在擂台上,然后每个数都上去和他比较,如果上去的那个数比max大,那么就把max替换成那个数站在擂台上,依次比较,直到所有数都比较完后,站在擂台上的那个max就是最大…

码元、波特率、比特率、频带利用率及数字通信系统的可靠性指标

文章目录 前言一、码元二、码元传输速率 R B R_B RB​(传码率、波特率)三、信息传输速率 R b R_b Rb​(传信率,比特率)四、 R B R_B RB​ 和 R b R_b Rb​的关系——H(信源的熵) 为纽带五、频带…