荆门市住房和城乡建设局网站,下载学校网站模板,暂时关闭wordpress插件,白山建设局网站前提
之前写过一篇文章#xff1a;https://qa-lsq.blog.csdn.net/article/details/119782694 只是简单尝试了一下生成一个随机手机号码。 但是如果在工作中一个实际场景要用的二次开发#xff0c;可能会遇到一些问题。
比如这样一个场景#xff1a; Mobile或者前端调用部分…前提
之前写过一篇文章https://qa-lsq.blog.csdn.net/article/details/119782694 只是简单尝试了一下生成一个随机手机号码。 但是如果在工作中一个实际场景要用的二次开发可能会遇到一些问题。
比如这样一个场景 Mobile或者前端调用部分接口比如登录验证码发送等等要求手机号密码验证码等信息需要加密。 在调用接口时的值是经过加密的值后端收到相应的信息后再解密。
这就使得在使用jmeter调用接口的时候需要先把手机号密码等值在其他地方加密一下然后再填到jmeter里去非常麻烦。 Jmeter二次开发就能完美的解决这个问题。
问题1
但在实际操作过程中遇到了一些问题。
首先讲一下环境公司提供的电脑权限是限制的很死的我没有权限修改环境变量。 同时java JDK的版本是17IDEA只能下载社区版。
这就导致一个问题使用社区版的IDEA创建Maven项目然后打jar包一切的做法都是对的但偏偏打出来的jar包Jmeter无法读取。
原因是创建的maven项目中pom.xml文件少了如下这段
buildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.8.1/versionconfigurationsource7/sourcetarget7/target/configuration/plugin/plugins/build如果少了这段maven未必能正确支持j你的java版本打出来的jar包jmeter识别不了。
这边还有一个问题
source7/source
target7/target这边我填的是7不是17 因为经过确定的尝试填17打出来的jar包jmeter也无法识别需要填写低版本 我推测是因为我使用的jmeter版本较低的原因与高版本的java JDK不兼容。
问题2
我之前尝试的是生成随机手机号码这个函数非常简单不需要特别的jar包支持。 仅需二次开发所必须的一些jar包如下
这些jar包在下载好的meter里都会自带的。
但如果我要实现其他的功能需要另外的jar包支持呢。 我贴一下此次二开的加密代码密钥用XXXXXXXXX替换
package org.examples.functions;import cn.hutool.crypto.Mode;
import cn.hutool.crypto.symmetric.AES;
import org.apache.jmeter.engine.util.CompoundVariable;
import org.apache.jmeter.functions.AbstractFunction;
import org.apache.jmeter.functions.Function;
import org.apache.jmeter.functions.InvalidVariableException;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.Sampler;
import org.apache.jmeter.util.JMeterUtils;
import org.bouncycastle.jce.provider.BouncyCastleProvider;import java.security.Security;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;public class EcbEncryFunctionsAA extends AbstractFunction {//密钥private static final String ACE_KEY XXXXXXXXXXXXXXXXXXXXXXXXX;private static final String key __ecbEncryptfunctions;private static final ListString desc new LinkedListString();private static String middleString ;static{desc.add(JMeterUtils.getResString(Name of encrypt String using ECB));}// public static void main(String[] args) {
// System.out.println(aesEncryptPKCS7Padding(13944566740));
// }Overridepublic String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {Security.addProvider(new BouncyCastleProvider());
// String ecb_key ACE_KEY;String paddingPKCS7Padding;AES aes new AES(Mode.ECB.name(),padding, ACE_KEY.getBytes());// 加密并进行Base转码String encrypt aes.encryptBase64(middleString);return encrypt;}Overridepublic void setParameters(CollectionCompoundVariable collection) throws InvalidVariableException {if (collection.size() ! 1) {throw new InvalidVariableException(Expected 1 parameter, but got collection.size());}CompoundVariable parameter collection.iterator().next();middleString parameter.execute();}// private static String aesEncryptPKCS7Padding(String text) {
// Security.addProvider(new BouncyCastleProvider());
// String ecb_key ACE_KEY;
// String paddingPKCS7Padding;
// AES aes new AES(Mode.ECB.name(),padding, ecb_key.getBytes());加密并进行Base转码
// String encrypt aes.encryptBase64(text);
// return encrypt;
// }Overridepublic String getReferenceKey() {return key;}Overridepublic ListString getArgumentDesc() {return desc;}
}
这段加密需要两个jar包支持
经过测试这段加密代码可用而且打包之后可以在jmeter的函数助手里看见这个函数 但是在实际调用这个函数的时候jmeter会报错
意思是没有相应的jar包支持
这边需要把所有依赖的jar包同样放到lib/ext/下 这边需要把所有依赖的jar包同样放到lib/ext/下 这边需要把所有依赖的jar包同样放到lib/ext/下
maven下载的jar包在.m2文件下这边不多解释
解决这些问题之后我的加密就可以在jmeter里使用了