首先新建一个java工程,然后在scr下新建一个cn.com.functions 包,在eclipse中导入二次开发中需要的jar包

新建一个class :String1Encrypt.java 继承 AbstractFunction 类

package cn.com.functions;// 这里是包名,是固定的写法import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.jmeter.engine.util.CompoundVariable;
import org.apache.jmeter.functions.AbstractFunction;
import org.apache.jmeter.functions.InvalidVariableException;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.Sampler;
import org.apache.jmeter.threads.JMeterVariables;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;public class String1Encrypt extends AbstractFunction {private static final List<String> desc = new LinkedList();private static final String KEY1 = "__String1_Encrypt";//这里是函数名,也就是在函数助手列表中显示的名称private Object[] values;private static final String KEY = "xxxxxxxxx"; //声明密匙,根据需要进行修改,当然也可以讲该参数封封装在下面的static中,作为一个可输入的选项static {desc.add("String to be encrypted or decrypted:");//待加密或者解密的字符串desc.add(" must input :1 encryption, 2 decryption ");//这里是选项,1代表加密2代表解密desc.add("Name of variable in which to store the result (optional)");}//这里是声明一个变量用于在jmeter中引用,可选的//static的内容就是在选择函数助手中的函数后显示的内容private static final String OFFSET = "Con-ere-ceD-cumt";private static final String ENCODING = "UTF-8";private static final String ALGORITHM = "AES";private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";String signString = "缺少参数";//这里定义字符串,如果未输入2个参数,则返回缺少参数,方便调试//加密方法public static String encrypt(String data) throws Exception {IvParameterSpec iv = new IvParameterSpec("Con-ere-ceD-cumt".getBytes("UTF-8"));SecretKeySpec skeySpec = new SecretKeySpec("e5b40d286cxfca34".getBytes(), "AES");Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");cipher.init(1, skeySpec, iv);byte[] encrypted = cipher.doFinal(data.getBytes());return (new BASE64Encoder()).encode(encrypted);}//解密方法public static String decrypt(String data) throws Exception {Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");SecretKeySpec skeySpec = new SecretKeySpec("e5b40d286cxfca34".getBytes("UTF-8"), "AES");IvParameterSpec iv = new IvParameterSpec("Con-ere-ceD-cumt".getBytes("UTF-8"));cipher.init(2, skeySpec, iv);byte[] buffer = (new BASE64Decoder()).decodeBuffer(data);byte[] encrypted = cipher.doFinal(buffer);return new String(encrypted, "utf-8");}public String execute(SampleResult previousResult, Sampler currentSampler) throws InvalidVariableException {//这里是对函数中的处理逻辑,想实现什么,都可以在这里进行编写JMeterVariables vars = getVariables();//声明一个jmeter的变量varsString str = ((CompoundVariable) this.values[0]).execute().replaceAll("\\s", "");//通过this.values[0]的方法即可取出static 中第一个输入的字符串并进行处理。去掉空格、制表符等内容try {if (this.values.length >= 2) { //判断是否输入了2个选项。由于第三个选项时可选的,所以这里设置为2//通过this.values[1]方法取出static中第二个输入的内容String appendStr = ((CompoundVariable) this.values[1]).execute().trim();//判断输入的内容是否是1,或者是true如果是,则调用加密函数进行加密并赋值给this.signString,反之则进行解密if ("1".equals(appendStr) || "true".equals(appendStr)) {this.signString = encrypt(str).replaceAll("\\s", "");}if ("2".equals(appendStr) || "false".equals(appendStr)) {this.signString = decrypt(str).replaceAll("\\s", "");}}//这里是判断是否输入 了变量,即static中第三个字符串,如果输入了,则将该变量指向加密或解密的字符串if (vars != null && this.values.length > 1) {String varName = ((CompoundVariable) this.values[2]).execute().trim();vars.put(varName, this.signString);}} catch (Exception e) {this.signString = "算法无法解密,请核对***********" ;}//此处捕获了异常并进行处理return this.signString; //返回加密或者解密的字符串}public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {checkMinParameterCount(parameters, 2);//获取输入 的参数并赋值给this.values,这里可以看出函数助手输入的字符串会以一个列表的方式返回this.values = parameters.toArray();}public String getReferenceKey() {return "__String1_Encrypt"; //返回函数名,这里都是固定的写法,唯一要变的就是return 的内容}public List<String> getArgumentDesc() {return desc; //返回 static中声明的内容}
}

如果对python自动化测试、web自动化、接口自动化、移动端自动化、面试经验交流等等感兴趣的测试人,可以 点这自行获取…

将写好的代码导入jmeter中进行调试

选择jarfile

这里需要注意的是一定要导入\lib\ext目录下,否则jmeter函数助手是看不到导入的函数名称的

启动jmeter后,在这里即可看到已经开发好的函数

开发过程中,如果需要进行调试,可以加入打印语句,并在jmeter启动后台看到打印结果

参考资料:jmeter官方函数https://github.com/ufctester/apache-jmeter/tree/master/src/functions/org/apache/jmeter/functions

最后: 可以在公众号:伤心的辣条 ! 自行领取一份216页软件测试工程师面试宝典文档资料【免费的】。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

学习不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。你可以加入我们的测试技术交流扣扣群:914172719(里面有各种软件测试资源和技术讨论)

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

jmeter函数助手二次开发之加解密相关推荐

  1. Jmeter函数分类及自定义开发

    Jmeter强大之处是其开源性和可扩展性,所以Jmeter拥有大量丰富的插件和元件,还有各种好用的函数,如果能巧妙应用函数助手里的函数,就能让性能测试脚本插上翅膀,实现各种复杂的计算和逻辑应用场景. ...

  2. jmeter函数助手到底在哪

    最近在学习jmeter压测,碰到学习jmeter函数助手,所有的帖子都说函数助手是在选项中: 我找了好久,我以为是插件我没有安装,但是这个就是jmeter自带的,找了好多帖子都没有关于这个的回复.只好 ...

  3. Jmeter函数助手

    标签(空格分隔): Jmeter 在性能呢测试过程中为了真实的模拟用户,往往我们需要让提交的表单内容每次都发生变化,这个过程加参数化,Jmeter配置原件与前置处理器都能帮助我们进行参数化,单都有局限 ...

  4. 性能测试之JMeter函数助手详解

    1.函数助手介绍 在性能测试过程中,为了模拟真实的用户,往往我们需要让提交的表单内容每次都发生变化,这个过程叫做参数化. JMeter中的配置元件与前置处理器都能帮助我们实现参数化,为了能够更好的帮助 ...

  5. 【十一】Jmeter 函数助手实战:__time 时间戳函数

    目录 一.__time 函数介绍 二.__time 函数获取实时时间 三.__time 函数获取指定时间 四.__time 函数获取时间段 一.__time 函数介绍 点击查看我的另一博文:[Jmet ...

  6. QGIS二次开发:加载XYZ Tiles形式的瓦片地图

    1.前言 QGIS官方提供的QGIS.exe可以加载远程地图提供商提供的基于URL格式的XYZ Tiles形式的瓦片地图.如:https://tile.openstreetmap.org/{z}/{x ...

  7. 【二十】Jmeter:插件二次开发—— JMeter 源码导入 eclipse

    目录 一.源码官网下载 二.lib 目录官网下载 三.源码 & lib 目录 下载 四.导入eclipse 一.源码官网下载 点击前往官网下载并解压:下载地址 二.lib 目录官网下载 点击前 ...

  8. Revit 二次开发 未能加载文件或程序集“Microsoft.Xaml.Behaviors”或它的某一个依赖项

    写了几个WPF界面,在addinmangager时没有发现问题,当编到一个addin文件中打包时,报错 未能加载文件或程序集"Microsoft.Xaml.Behaviors, Public ...

  9. Jmeter函数助手之__time函数(获取当前时间)

    在实际的接口用例测试中,有些接口是需要输入当前时间的,而且格式各异,那么有没有方法可以直接获取时间呢?有的,Jmeter提供了time函数来达成这一点,如下,打开函数助手,找到__time这个函数,可 ...

最新文章

  1. 休眠后gpio状态_STM32休眠与唤醒
  2. 两则爵士鼓的基础练习
  3. Python 抓取图片
  4. java util.function.BiConsumer
  5. tolua unity 报错_Unity3D热更新之LuaFramework篇[01]--从零开始
  6. Luogu3403跳楼机
  7. 标准时间标准Time Zone: GMT,UTC,DST,CST
  8. 熊猫源码(不是很全,大体框架是有的)小时候一直想做的一个东西哈哈哈
  9. 微信小程序编辑与显示列表信息
  10. 转载 Camera Link接口
  11. Mongodb下载、安装、配置与使用
  12. draw.io箭头设置虚线
  13. 阿里云如何将一个域名解析到另一个域名上
  14. 第十周、第十一周学习总结
  15. mysql连接字符串_[MySQL] - MySQL连接字符串总结
  16. 测试胎儿体重计算器软件,胎儿体重计算器
  17. sgbm算法_关于双目立体视觉的三大基本算法及发展现状的总结
  18. ALSA框架学习笔记3:声卡注册流程(代码解析)
  19. P2P网络ISIS的PSNP报文的两种用途
  20. 2021年英文SEO外部链接该如何搭建?

热门文章

  1. 六款好用到爆的电脑软件,只有百分之一的人全用过!
  2. 【tensorflow】多维张量做tf.matmul
  3. 【TSP问题】基于灰狼算法求解旅行商问题matlab源码
  4. I3D视频分类论文梗概及代码解读Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset
  5. HTC VIVE 基础开发1
  6. 对于文本编辑器/IDE的一些看法
  7. 【人工智能】一致代价搜索(Uniform Cost Search, UCS) Python实现
  8. 独立站营销广告的投放技巧和方法
  9. C语言:C99中的bool量
  10. 05-Oracle中的对象(视图,索引,同义词,系列)