接口测试 - Apifox 获取sign鉴权签名 + 前置操作 + 请求参数变量
背景
1. 在使用Apifox做接口测试时,接口需要先做sign鉴权签名(需要把业务接口的请求参数作为鉴权接口的请求参数来获取sign值,注:业务接口请求参数和鉴权接口请求参数完全一致,否则会鉴权失败)。
2. 业务接口请求参数有变量值,例如:订单号字段每次请求都需要不一致。
一、时间参数等给后续脚本使用的值,可以在其他脚本前先获取(写成公共脚本)
//获取当前时间
const moment = require('moment');
var date =moment().format('YYYY-MM-DD HH:mm:ss');
pm.globals.set('nowdate',date);
//console.log(date);
//获取时间戳
var tidtime =Math.round(new Date().getTime());
pm.globals.set('nowtime',tidtime);
//console.log(tidtime);
二、获取sign鉴权签名(写成公共脚本)
//鉴权地址
const getSignUrl = 'xxx/sign/getSign';
// 获取请求体中的数据,字典
let raw = pm.request.body.raw;
// 把请求参数转成JSON
let requestBody = JSON.parse(raw);
// 请求参数拼接
let paramStr = {};
paramStr ['appId'] = requestBody.appId;
paramStr ['certiId'] = requestBody.certiId;
paramStr ['token'] = requestBody.token;
paramStr ['tid'] = requestBody.tid;
paramStr ['data'] = requestBody.data;
paramStr ['date'] = requestBody.date;
//console.log(paramStr);
//请求参数
const getSignRequestData = {
url: getSignUrl,
method: 'POST',
header: {
'Content-Type': 'application/json'
},
body: {
mode: 'raw',
raw:JSON.stringify(paramStr)
}
};
//发送post请求
pm.sendRequest(getSignRequestData, function (err, response) {
if (err) {
console.error(err);
return;
}
//console.log(response.json());
if (response.json().payload.status = "true") {
// 如果请求成功需要传递参数到当前请求中去
pm.environment.set('sign',response.json().payload.sign);
}
});
三、鉴权后更新业务接口请求参数的sign值(写成公共脚本)
var body = pm.request.body.toJSON();
var bodyStr = body.raw;
var bodyJSON = JSON.parse(bodyStr);
bodyJSON.sign = pm.variables.get("sign");
//console.log(bodyJSON.sign);
pm.request.body.update(JSON.stringify(bodyJSON, null, 2));
//console.log(JSON.stringify(bodyJSON, null, 2));
四、业务接口使用的变量(在环境变量页面配置)
五、业务接口实际请求参数
如上图所示,sign签名需要在前置操作内获取,获取sign操作前需要先替换请求接口中的参数,故 变量替换&继承父级 需要放在鉴权获取sign脚本之前,这样才能替换鉴权脚本内的请求参数。
在鉴权脚本获取到sign签名后,还需要一个脚本去更新请求参数内的sign值,不然业务接口还是获取的上一次sign值。
六、实际接口请求
按照上面操作配置,最终接口可以请求成功。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现