一 、账号密码加密
1.1 背景:
一个登录接口,账号是明文传输,但是密码要先经过加密,再做传输。
比如:
一个用户,账号为123465 密码为 abcde
实际上登录接口,请求,传参为
账号 123465
但是密码经过 了加密为 agce43===dxe/z
1. 2 举例:
我们这里举一个小例子,实战一下。
get 请求 www.baidu.com 这个请求。 传参一共三个,name(用户名)、password(密码)、和type
账号为 123465,密码为 abcde。type是固定的1
密码加密规则为,密码字符串的前后各拼接一个test。
如 密码为 abcde ,加密后的密码为 testabcdetest
name:123465
password:testabcdetest
type:1
二 js处理账号密码加密
1、前提:
我们使用js来写脚本
用户账号信息,我们使用参数化,读取txt文件。
2、整个脚本结构
3、数据准备
一共两个账号:
12345,adcd
1234567,hhhav
新建一个txt文件,然后写入这两个账号。命名为user.txt
在jmeter中:
添加--》配置元件--〉CSV Data Set Config
CSV 数据文件设置:
文件名:文件的路径
变量名:我们一共需要两个变量,用户名的变量为user,密码对应的变量名为pwd
读取txt文件,从第一行开始读取
txt每一行数据,多个变量之间,用,进行分割
4、http 取样器配置
4.1 传参为form表单格式
name ,读取txt得到的变量 ${user}
password,是经过加密处理后,得到的${encrypt_pwd}
type 为固定的1
4.2 传参为json格式
{
"name":"${user}",
"password":"${encrypt_pwd}",
"type":1
}
5、js编写脚本
添加前置处理器
添加--前置处理器--- JSR223 PreProcessor
脚本内容:
// pwd是传参
function enc(pwd) {
var pwd = "test"+pwd+"test"
return pwd;
}
// ${pwd}" 是从txt读取的密码的变量
var encrypt_pwd = enc("${pwd}");
// js脚本将变量encrypt_pwd 传给jmeter,这个变量的名称为"encrypt_pwd"
vars.put("encrypt_pwd", encrypt_pwd);
脚本语言选择js
6、运行脚本
设置线程组为2
再添加一个查看结果树。
运行脚本,查看结果。
查看请求的传参
GET data:
{
"name":"1234567",
"password":"testhhhavtest",
"type":1
}
密码就是我们加密后的。
三、BeanShell 处理账号密码加密
1、前提:
我们使用BeanShell 来写脚本
用户账号信息,我们使用参数化,读取txt文件。
2、整个脚本结构
3、数据准备
一共两个账号:
12345,adcd
1234567,hhhav
新建一个txt文件,然后写入这两个账号。命名为user.txt
在jmeter中:
添加--》配置元件--〉CSV Data Set Config
CSV 数据文件设置:
文件名:文件的路径
变量名:我们一共需要两个变量,用户名的变量为user,密码对应的变量名为pwd
读取txt文件,从第一行开始读取
txt每一行数据,多个变量之间,用,进行分割
4、http 取样器配置
4.1 传参为form表单格式
name ,读取txt得到的变量 ${user}
password,是经过加密处理后,得到的${encrypt_pwd}
type 为固定的1
4.2 传参为json格式
{
"name":"${user}",
"password":"${encrypt_pwd}",
"type":1
}
5、添加BeanShell 预处理程序
添加--前置处理器---BeanShell PreProcessor
编写BeanShell脚本,其实就是java脚本。
我们先在idea中,写好java脚本,再放到jmeter中。
// 加密方法
public class Enc {
public String getPwd(String pwd){
return "test"+pwd+"test";
}
}
// 调用我们的加密方法
Enc enc = new Enc();
// 将txt文档中的${pwd}变量传到脚本中
String encrypt_pwd = enc.getPwd("${pwd}");
// 将脚本中的变量,传到jmeter中
vars.put("encrypt_pwd", encrypt_pwd);
6、运行脚本
设置线程组为2
再添加一个查看结果树。
运行脚本,查看结果。
查看请求的传参
GET data:
{
"name":"1234567",
"password":"testhhhavtest",
"type":1
}
密码就是我们加密后的。
三、调用jar处理账号密码加密
后续我更新。。。
四、 验签加密
4.1 背景:
一个接口,header中存在sign 验签。
sign 验签 是 请求传参,经过一系列计算得出来的。
4.2 举例
我们这里举一个小例子,实战一下。
get 请求 www.baidu.com 这个请求。 传参一共三个,name(用户名)、password(密码)、和type
账号为 123465,密码为 abcde。type是固定的1
密码加密规则为,密码字符串的前后各拼接一个test。
如 密码为 abcde ,加密后的密码为 testabcdetest
name:123465
password:testabcdetest
type:1
header,存在sign。
sign 是请求参数的值,多个k=v,拼接起来的。
如此处的sign应为
sign=123465password=testabcdetesttype=1
五、js处理验签
1、整体项目结构
2、添加请求头
添加--配置元件--HTTP信息头管理
配置 sign,声明sign的值为变量#{sign}
3、http 取样器处理
将所有的传参整体,作为一个变量${param}
4.js脚本
// pwd是传参
function enc(pwd) {
var pwd = "test"+pwd+"test";
return pwd;
}
// 验签加密方法
// 这里我只是简单的将json 转化为字符串了
function sign(param) {
var jsonStr = JSON.stringify(param);
return jsonStr;
}
// ${pwd}" 是从txt读取的密码的变量
var encrypt_pwd = enc("${pwd}");
// js脚本将变量encrypt_pwd 传给jmeter,这个变量的名称为"encrypt_pwd"
vars.put("encrypt_pwd", encrypt_pwd);
// 获取整个传参
var param = {"name":"${user}","password":"${encrypt_pwd}","type":1};
// 获取验签
var sign = sign(param);
// 将 传参数与 验签吐给jmeter
vars.put("sign", sign);
vars.put("param", JSON.stringify(param));
注意:
写js脚本的时候, 容易格式写错,而且这个编译器也没有格式校验,所以写的时候一定要仔细。
每行代码是以;结尾。
5、运行脚本,查看结果树
请求的参数及header 都是我们处理后的。
六、BeanShell处理验签
七、jar包处理处理验签
八、相关文章:
jmeter 使用beanshell 编写脚本_做测试的喵酱的博客-CSDN博客