使用场景
大多数项目都有登陆权限认证,需要先登录获取token再用这个token作为请求头请求接口。
每次测试接口都需要先调登录接口,再给每个请求设置请求头。有点麻烦,根据这个配置完成之后每次只需要先调一下登录接口,其它接口就直接请求就行了,不需要再管请求头。
实现步骤
1、登录接口
登录接口采用MD5+RSA加密
先将系统用户名及密码配置在postman环境变量中
调用接口获取公钥,并在该接口tests里面设置将本次公钥放进postman环境变量中
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
var data = JSON.parse(responseBody);
pm.environment.set("publickKey", data);
调用登录接口,调用之前先用MD5+RSA将用户名、密码用刚才获取到的公钥进行加密
MD5加密是postman内置的js,引入内部包只需要require(模块名)就ok了
var cryptos = require('crypto-js');
RSA加密需要引用外部js,引用外部js的原理就是先获取这个js整个文本内容,然后eval(js文本)就可以在后续代码里直接调用这个js里面的方法了
这里采用的先获取到js然后复制到postman的global变量里
然后在登录接口的pre-request-script里面直接调用
var cryptos = require('crypto-js'); //引入postman内置包
var username = pm.environment.get("username")//环境变量中配置的用户名
username = cryptos.MD5(username);
var password = pm.environment.get("password")//环境变量中配置的密码
password = cryptos.MD5(password);
//获取公钥
var encrypt_key = pm.environment.get("publicKey");//第一个步骤中保存到环境中的公钥
eval(pm.globals.get("forgeJs")); //将forgeJS的内容当js代码执行
var encUsername = encryptRsa(encrypt_key, username);//用户名RSA加密
var encPwd = encryptRsa(encrypt_key, password);//密码RSA加密
pm.variables.set("username", JSON.stringify(encUsername));//设置成本次请求的参数
pm.variables.set("password", JSON.stringify(encPwd));
pm.variables.set("publicKey", JSON.stringify(encrypt_key));
function encryptRsa(encrypt_key, clearText){
//注意此处上下的BEGIN PRIVATE KEY不要删除,框架自带的
const public_key = '-----BEGIN PUBLIC KEY-----\n'
+ encrypt_key
+ '\n-----END PUBLIC KEY-----';
var publicKey = forge.pki.publicKeyFromPem(public_key);
var buffer = forge.util.createBuffer(clearText, 'utf8');
var bytes = buffer.getBytes();
var encryptedText = forge.util.encode64( publicKey.encrypt(bytes, 'RSAES-PKCS1-V1_5', {
md: forge.md.sha256.create(),
mgf1: {
md: forge.md.sha1.create()
}
})
);
console.log('encryptedText: '+ encryptedText);
return encryptedText;
};
接口参数示例
tests是在获取到响应之后执行的,登录完成之后将获取到的token放进postman环境变量中
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
var data = JSON.parse(responseBody);
pm.environment.set("token", data);
2、整个collection添加pre-request-script
pm.request.headers.add({ key: "token", value: pm.environment.get("token") });
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图 |
只有当你真正热爱一件事情时,你才会有足够的动力去追求它。找寻自己的热情所在,勇敢地追寻梦想,让自己成为一个充满活力、有理想、有抱负的人。
真正的成功不只是达到某个目标,更重要的是在追求的过程中不断学习和成长。积极乐观,勇往直前,让每一天都充满挑战和乐趣,你会发现成功就在不远处。
每一个小小的进步都是通向成功的重要步骤。保持耐心和毅力,在每一个瞬间都发挥到最好,你会发现那些看似遥远的梦想其实离自己并不遥远。