首先新建一个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. android intent email,Android Email Intent
  2. HDU-4454 Stealing a Cake 三分枚举
  3. java常用技术栈,HR的话扎心了
  4. cmd命令运行jar包
  5. 为什么可积不一定可导_为什么一定要办理焊工证?不办会怎么样?
  6. 【基础知识】 之 Binary Search Tree 二叉搜索树
  7. mysql5.7.1.16出现[Err] 1146 - Table 'performance_schema.session_status' doesn't exist的解决办法
  8. 高斯课堂数电讲义笔记_学技树
  9. qt 等待线程结束_实战PyQt5: 128-使用多线程进行并行处理
  10. 一套房钱就可以做一个品牌的电子烟,让罗永浩们再赚一波快钱?
  11. python降序排列说true不存在_【图片】Python3萌新入门笔记(8)【python吧】_百度贴吧...
  12. 开源众包-项目大厅数据爬取
  13. 利用EXCEL将中文汉字转为拼音
  14. openofficeV2.0由SUN开发的一款免费不亚于微软的office软件
  15. 6.7 【实例】窗口查看器
  16. 赠书赠券:《大话计算机》
  17. 【MDX】一文带你搞懂SQL Server Analysis Services 的安装和使用
  18. 英国《新科学家》杂志:研究显示人们上假新闻的当可能是因懒得思考
  19. 关于nextInt()、next()和nextLine()的用法
  20. 《孤尽班T31-01-架构理论笔记》

热门文章

  1. 【软考 系统架构设计师】原创必过论文④ 论基于构件的软件开发
  2. 面向对象的概念与3大特征
  3. Android 自定义控件之 SwitchButton(仿 iOS 开关)
  4. movie计算机英语作文,英语四级写作范文附解析 第22篇:The Influence of Movies 电影的...
  5. mysql清空表数据后,id重新从1开始自增
  6. Z平台-数据交换平台应用
  7. 数据交换平台的架构设计
  8. android喷气背包游戏截图
  9. python画笛卡尔心形线方程_伊对:学霸如何谈恋爱?揭秘不同专业的学霸表白方式...
  10. STC8H8K64U——74HC595驱动数码管