Jmeter调用加密jar包实现加密接口测试

        第一次写博客,写点关于测试工作中遇到的问题及解决方法,如果能够给大家多一些参考资料是最好的了。

        公司信贷系统测试的时候需要调用增信通等外部接口,接口使用到了AES加密,关于AES加密就不多介绍了具体参考这篇文章:https://blog.csdn.net/qq_28205153/article/details/55798628

        由于还有好多的外部接口需要联调,于是决定用Jmeter做一个接口测试的集成,选定工具开干。先是编写一个线程,内容如下:

Jmeter调用加密jar包实现加密接口测试_第1张图片

请求的请求头、参数、和URL什么的都不用说了,根据需求文档填写进去就好,重点说一下怎么调用AES加密的jar包进行加密的。

1.如上图控制器中添加了一个BeanShell Sampler(增信通加密)和一个http请求(身份核验),前置BeanShell脚本是调用AESUtil加密jar包实现加密方法,对本次需要传入的参数进行加密,加密后的参数然后再用到“身份核验”的http请求中进行接口测试。其中打**的账号密码都是增信通授权给的账号,接口文档中会有(没有就找开发或者对接人要)。BeanShell脚本如下:

import AESUtil.*;

 String publicKey = "R8iZjoZ7H6H4243O";
   
		String params=  AESUtil.encrypt(
          "{\"id_no\":\"${id_no}\",\"protocol_data_type_name\":[\"shenFenHeYan\"],\"name\":\"${name}\"}");//加密参数
		
     	vars.put("params1",params);

		String pswEncrypt = AESUtil.encrypt("*******");	//加密密码
		
		vars.put("psw",pswEncrypt);

2.调用到的AES加密方法是在接口文档中会有,我们直接在eclipse中新建一个package新建一个class,然后把这段(代码见下文)丢进去就好,其中的授权账号也是需要你的调用方给。账号密码什么的都确认正确后,我们就需要导出jar包:

Jmeter调用加密jar包实现加密接口测试_第2张图片

        点击eclipse--feil--Export--Java--JAR file(不懂可以自己百度下eclipse怎么导出jar包),命名为AESUtil与Jmeter中beanShell调用的包名的一致,然后将jar包放到..\apache-jmeter-3.2\lib(自己Jmeter的lib)目录下。

package AESUtil;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public class AESUtil {

	private static final String AES = "AES";
	private static final String CRYPT_KEY = "************";//加密key将于开帐号的时候提供。
	/**
	 * 加密
	 */
	public static byte[] encrypt(byte[] src, String key) throws Exception {
		Cipher cipher = Cipher.getInstance(AES);
		SecretKeySpec securekey = new SecretKeySpec(key.getBytes(), AES);
		cipher.init(Cipher.ENCRYPT_MODE, securekey);//设置密钥和加密形式
		return cipher.doFinal(src);
	}
	
	/**
	 * 二行制转十六进制字符串
	 */
	public static String byte2hex(byte[] b) {
		String hs = "";
		String stmp = "";
		for (int n = 0; n < b.length; n++) {
			stmp = (Integer.toHexString(b[n] & 0XFF));
			if (stmp.length() == 1)
				hs = hs + "0" + stmp;
			else
				hs = hs + stmp;
		}
		return hs.toUpperCase();
	}

	public static byte[] hex2byte(byte[] b) {
		if ((b.length % 2) != 0)
			throw new IllegalArgumentException("长度不是偶数");
		byte[] b2 = new byte[b.length / 2];
		for (int n = 0; n < b.length; n += 2) {
			String item = new String(b, n, 2);
			b2[n / 2] = (byte) Integer.parseInt(item, 16);
		}
		return b2;
	}
	
	/**
	 * 加密
	 */
	public final static String encrypt(String data) {
		try {
			return byte2hex(encrypt(data.getBytes(), CRYPT_KEY));
		} catch (Exception e) {
		}
		return null;
	}
	

	public static void main(String[] args) {
           String publicKey = "YUUAtestYUUAtest";
		String params=  encrypt(
               "{\"id_no\":\"12022219990101925x\",\"protocol_data_type_name\":[\"shenFenHeYan\"],\"name\":\"张三\"}");//加密参数
		String pswEncrypt = encrypt("123456");	//加密密码
      }
}

3.从BeanShell获得的加密参数params1后,再按照接口文档中给的报文格式在“身份核验”请求接口中组装报文,然后传送过去的参数对方会进行解密,整个在Jmeter中的加密过程就基本完成了。

Jmeter调用加密jar包实现加密接口测试_第3张图片

Jmeter调用加密jar包实现加密接口测试_第4张图片

Jmeter调用加密jar包实现加密接口测试_第5张图片

你可能感兴趣的:(Jmeter接口自动化/性能)