- 方案一:打开浏览器,按下 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());