Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密

当当当~~~有小哥哥指出使用diget函数就可以实现。如果只是需要SHA256加密的可以直接使用函数助手diget。
这个当作Jmeter二次开发入门学习好了。


最近测试的注册、登录接口,密码通过SHA256加密,诸如以前的MD5加密可以直接使用Jmeter函数助手进行加密,SHA256加密没有现成的函数。

在网上搜索了大半天,基本两个路线,一个是通过Beanshell脚本,一个是对Jmeter进行二次开发,自行添加函数,之后使用函数助手进行调用。

效果:
Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第1张图片

觉得写进函数助手是个一劳永逸的办法,于是开始根据网上搜寻的教程实践。然而,还是遇到了很多坑!!!!毕竟自己是个渣,别人过程一没写全,我就短路了。

实践完了之后发现,也不算难嘛。
很多事情都是这样,你做的时候觉得难度挺大,回头来看, 也就这点破事。

一、源码下载
Jmeter官网是提供源码下载的:http://jmeter.apache.org/download_jmeter.cgi
页面提供当前最新版本下载,历史版本点击下面:

Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第2张图片

选择source:
Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第3张图片

下载对应版本的源码的压缩包,然后解压。
Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第4张图片

二、IDE的选择
IDE,也就是集成开发环境,常见的就是myEclipse、eclipse、IDEA等。eclipse和IDEA的社区版都是免费的。
因为需要用到导出部分文件夹为jar包的格式,我在IDEA上找了好久都没找到这个功能,所以踩了一下午坑之后决定转用eclipse了。如果你们谁发现IDEA上的这个功能怎么操作的分享一下。
无脑走教程的就选eclipse

下载:https://www.eclipse.org/downloads/
默认进去是win版的,需要mac或linux版的点"Download Packages"进入

Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第5张图片

Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第6张图片

三、导入源码
1.打开eclipse,这里是eclipse的workspace,简单说就是在eclipse中新建项目会默认存放在这个文件夹下


Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第7张图片

2.新建一个java project


Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第8张图片

写工程名:
Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第9张图片

勾选允许导出
Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第10张图片

3.导入源码
右键项目名-Import(忽略上面那个Jmeter,是自己练手做的)


Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第11张图片

Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第12张图片

Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第13张图片

选择你解压了Jmeter的目录:
Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第14张图片

Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第15张图片

导入后可以看到:
Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第16张图片

你导入之后应该会看到src的文件夹下有红色的小叉,是因为缺少依赖的jar包。(我是因为之前练手时已经添加了依赖包)

4.导入依赖包

一种方式是,把你可执行版(Binaries版)Jmeter里lib目录下的jar包都复制到源码的lib目录下。
另一种使用ant框架导入依赖包:


Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第17张图片

Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第18张图片

Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第19张图片

双击:download_jars


Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第20张图片

可以从控制台看到下载包的情况
Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第21张图片

Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第22张图片

下载jar结束后,项目右键-properties


Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第23张图片

Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第24张图片

Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第25张图片

Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第26张图片

把这两个文件改为.classpath和.project


Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第27张图片
image.png

可通过终端命令
mv eclipse.classpath .classpath

重启eclipse之后就不会再有红色叉了。

四、二次开发
在该目录下,新建一个class文件,SHA256.java


Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第28张图片

复制以下代码:

package org.apache.jmeter.functions;


import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
 
import org.apache.jmeter.engine.util.CompoundVariable;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.Sampler;
import org.apache.jmeter.threads.JMeterVariables;
import org.apache.jmeter.util.JMeterUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
/*
 * 对字符串进行SHA256加密
 */
public class SHA256 extends AbstractFunction {
    private static final Logger log = LoggerFactory.getLogger(SHA256.class);
    
    private static final List desc = new LinkedList<>();
    private static final String KEY = "__SHA256"; // Function name
 
    static {  
        desc.add(JMeterUtils.getResString("String to encrypt")); // 函数助手中显示的参数说明,对应到参数  
        desc.add(JMeterUtils.getResString("function_name_paropt"));// 保存函数返回结果的变量,用于引用  
    }
    private CompoundVariable strText, varName;
    
    @Override
    public List getArgumentDesc() {
        return desc;
    }
    
    public SHA256() {
    }
 
    @Override
    public String execute(SampleResult previousResult, Sampler currentSampler) throws InvalidVariableException {
        MessageDigest md;
        String strTmp = strText.execute().trim();
        String encodeStr = "";
        try {
                md = MessageDigest.getInstance("SHA-256");
                md.update(strTmp.getBytes("UTF-8"));
                encodeStr = byte2Hex(md.digest());
        } catch (NoSuchAlgorithmException ex) {
            log.error("String encryption exception",ex);
        } catch (UnsupportedEncodingException ex) {
            log.error("String encryption exception",ex);
        }
        if (varName != null) {
            JMeterVariables vars = getVariables();
            final String varTrim = varName.execute().trim();
            if (vars != null && varTrim.length() > 0) {
                vars.put(varTrim, encodeStr);
            }
        }
        return encodeStr;
    }
    
    /**
     * 将byte转为16进制
     * 
     * @param bytes
     * @return
     */
    private String byte2Hex(byte[] bytes) {
        StringBuffer stringBuffer = new StringBuffer();
        String temp = null;
        for (int i = 0; i < bytes.length; i++) {
            temp = Integer.toHexString(bytes[i] & 0xFF);
            if (temp.length() == 1) {
                // 1得到一位的进行补0操作
                stringBuffer.append("0");
            }
            stringBuffer.append(temp);
        }
        return stringBuffer.toString();
    }
 
    @Override
    public void setParameters(Collection parameters) throws InvalidVariableException {
        // 检查参数数量
        checkParameterCount(parameters, 1, 2);
        Object[] values = parameters.toArray();
        
        strText = (CompoundVariable) values[0];
        if (values.length > 1){
            varName = (CompoundVariable) values[1];
        } else {
            varName = null;
        }
 
    }
 
    @Override
    public String getReferenceKey() {
        return KEY;
    }
}

作为一个代码渣,代码是在网上down的,参考:https://blog.csdn.net/y100100/article/details/80701049

五、导入Jmeter
右键-导出


Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第29张图片

Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第30张图片

导出的jar包更名为ApacheJMeter_functions.jar,同时覆盖掉Jmeter\lib\ext(不是源码版,是Binaries版)下的ApacheJMeter_functions.jar,重启jmeter,函数助手里就可以看到SHA256函数了。


Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密_第31张图片

你可能感兴趣的:(Jmeter踩坑:导入源码二次开发,函数助手添加自定义函数-SHA256加密)