-
方案一:打开浏览器,按下 F12,使用一个用户,输入正确的秘密从界面登录,查看登录接口传入的密码密文。然后在 Jmeter 中登录接口的 password 参数值设置为此密文。
不足:Jmeter 启动多个线程时,每个登录用户的密码需一样
-
方案二:获得前端密码加密的方式,在 Jmeter 上编写 js 脚本,按加密秘钥加密明文密码得到密文作为变量。然后登录接口引用变量。
在登录接口下方添加 JSR223 PreProcessor
编写脚本
/* URL Loading*/
// load("https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js");
/*
* for loading file from local of your jmeter place script in bin folder then
* load("file name with extension");
*/
var window = this; //定义window全局变量
var navigator = this; //定义navigator全局变量
load("jsencrypt.js"); //加载js文件
var publicKey = "公钥字符串"; //找开发要的公钥秘钥
var crypt = new JSEncrypt();
crypt.setPublicKey(publicKey);//设置公钥秘钥
log.info("${passwd}"); //passwd是通过csv获取到的参数值,打印出密码明文,用于调试
var passwdEncryption = crypt.encrypt("${passwd}"); //对密码明文进行加密
log.info(passwdEncryption); //打印出密码加密后样式
vars.put("passwdEncryption", passwdEncryption); //把加密后的放入Jmeter全局变量中,然后在登录接口引用${passwdEncryption}
// 加载脚本 默认目录是jemeter下bin目录
load("md5.min.js");
//load("http://localhost:8081/js/md5.min.js");
var password = "${password}" // 通过 csv 获取到的参数值,需要加上双引号,使参数值变为字符串类型
var salt = "9d5b364d";
var str = "" + salt.charAt(0) + salt.charAt(2) + password + salt.charAt(5) + salt.charAt(4);
var pwd = md5(str);
vars.put("pwd", pwd);//把加密后密码放入Jmeter全局变量中,然后在登录接口引用${pwd}
JMeter中JSR223 PreProcessor常用内置函数
- log:记录日志文件,写入到jmeber.log文件
log.info(“Test log!”);
- vars:操作jmeter变量,提供读取/写入访问变量的方法,
vars.get(String key):// 从jmeter中获得变量值; vars.put(String key,String value):// 数据存到jmeter变量中; vars.putObject(“obj1”,new Object());