前言:
做市场分析报告云平台的性能测试时,遇到问题:
问题:用户的登录密码加密(但参数化的参数是未加密的)
解决方法:使用前置处理器:JSR223 PreProcessor进行配置password
参数化的页面输入的是enPassword(未加密),赋值登录的是:password(加密)
一. 具体解决方法步骤:
- 使用” CSV Data Set Config”提取数据password
- 在请求:128 /api/getRSAKey 进行数据关联:使用“正则表达式提取器”提取请求中的数据modulus、exponent
- 使用前置处理器JSR223 PreProcessor_test 对密码进行加密并输出加密后的密码变量
var rsaKey = new RSAKey();
rsaKey.setPublic(b64tohex(modulus), b64tohex(exponent));
var password = hex2b64(rsaKey.encrypt(enPassword));
输出变量:vars.put("password",password);
用到的方法:
javaScript脚本:
1. 需要引用js时,把js放入jmeter/bin文件夹里
load("rsa.js"); load("base64.js"); |
2.需要获取其他变量时,例如moduluskey_g1
2.1、vars.get方式
var modulus=vars.get("moduluskey_g1"); var exponent=vars.get("moduluskey_g2"); |
备注:javascript的变量需要加:var
2.2、直接读取方式
var modulus="${moduluskey_g1}"; var exponent="${moduluskey_g2}"; |
3.打印日志
log.info("------------JSR223 PreProcessor test-------------"); log.info(modulus); log.info(exponent); log.info("------------JSR223 PreProcessor test-------------"); |
4.向外输出变量[数据存到jmeter变量中]
vars.put("password",password); |
5.加密输入的密码
load("jsbn.js");
load("prng4.js");
load("rng.js");
load("rsa.js");
load("base64.js");
var enPassword=vars.get("password"); //获取密码
var rsaKey = new RSAKey(); //设置对象
rsaKey.setPublic(b64tohex(modulus), b64tohex(exponent)); //设置公钥
var password = hex2b64(rsaKey.encrypt(enPassword)); //加密密码
二.JSR223 PreProcessor使用方法
1. log:用来记录日志文件,写入到jmeber.log文件,使用方法:log.info(“This is log info!”);
2. ctx(JmeterContext)通过它来访问context,使用方法可参考:org.apache.jmeter.threads.JMeterContext。
3. vars - (JMeterVariables):操作jmeter变量,提供读取/写入访问变量的方法。这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:
a) vars.get(String key):从jmeter中获得变量值
b) vars.put(String key,String value):数据存到jmeter变量中
c) vars.putObject("OBJ1",new Object());
4. props - (JMeterProperties - class Java.util.Properties):操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。
a) props.get("START.HMS"); 注:START.HMS为属性名,在文件jmeter.properties中定义
b) props.put("PROP1","1234");
5. prev - (SampleResult):获取前面的sample采样的结果,常用方法:
a) getResponseDataAsString():获取响应信息
b) getResponseCode() :获取响应code
更多方法可参考:org.apache.jmeter.samplers.SampleResult
6. sampler - (Sampler):gives access to the current sampler 访问当前采样
更多方法可参考:org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy
api文档:https://jmeter.apache.org/api/index.html