问题出现
在工作中遇到一个降低我工作效率的问题:
在自测A端接口时,需要获取token,我们公司管理端登录获取token的逻辑如下:
- 调用登录接口
- 输入短信验证码,获取token
最恼人的是账号是单点登录的,总会发生被挤掉的情况,之前我选择的方法就是手动执行前两个请求获取到token后手动输入,再进行测试,被挤掉后,又要重新获取,过于繁琐
解决方案
目前想到可以使用Pre-request Script脚本来自动获取token并放到当前请求的参数中,做到一次请求自动重新获取token,我的目的就是保证我的请求可以顺利执行
先搞清楚请求执行顺序
- Pre-request Script
- Request
- Response
- Tests
书写脚本位置即为此处
代码示例
请求逻辑
// 登录url
const loginUrl = 'xxx/login';
// 校验短信验证码获取token
const tokenUrl = 'xxx/checkLoginSms';
const queryParameters = {
userName: 'username',
password: 'password'
};
// 登录接口需要的参数是query,按规则拼接到url后
const urlWithQueryParameters = `${loginUrl}?${Object.keys(queryParameters).map(key => `${encodeURIComponent(key)}=${encodeURIComponent(queryParameters[key])}`).join('&')}`;
const loginRequestData = {
url: urlWithQueryParameters,
method: 'POST',
};
pm.sendRequest(loginRequestData, function (err, response) {
if (err) {
console.error(err);
return;
}
console.log(response.json());
if (response.json().returnStatus != "SUCCEED") {
console.log("登陆失败请重试");
return;
}
});
// 第二个请求的为body参数
const getTokenRequestData = {
url: tokenUrl,
method: 'POST',
header: {
'Content-Type': 'application/json'
},
body: "{ \"authCode\": \"authCode\", \"userName\": \"username\" }"
};
pm.sendRequest(getTokenRequestData, function (err, response) {
if (err) {
console.error(err);
return;
}
console.log(response.json());
if (response.json().returnStatus == "SUCCEED") {
// 如果请求成功需要传递参数到当前请求中去
pm.environment.set('token',response.json().data);
}
});
参数传递
那么脚本中获取到的token如何传递呢,或者说在当前请求中如何引用到脚本中的变量
介绍postman各种变量的文章
这里我使用了environment环境变量,将获取到的token设置到environment中去
pm.environment.set('token',response.json().data);
另一边,引用时使用如下方式即可
如此就可以保证我自测接口的时候不会被挤掉了