一、调用一次登录接口后,获取Cookie并且自动添加到后续所有接口的Header上的方法
(1)在请求配置中添加Pre-requestScript(请求产出处理脚本)和Pre-responseScript(响应数据处理脚本)。 在Pre-requestScript中添加:
context.requestHeader.Cookie = 'tgt' + storage.getItem('tgt')
在Pre-responseScript中添加:
if (context.responseData && context.resonseData.data && context.responseData.data.tgt){
storage.setItem('tgt',context.resonseData.data.tgt)
console.log('tgt',context.resonseData.data.tgt)
}
注:请求Header中的Cookie参数格式为
key | value |
---|
Cookie | userid=333;tgt=abcd-855-dd… |
实际只需要传递tgt即可,并且需要拼接字符串“tgt=…”,即context.requestHeader.Cookie = ‘tgt’ + storage.getItem(‘tgt’)
(2)说明(1)中的context公共变量内容
context = {
pathname: '/api/user',
query: {
xxx: 'xxx'
}
requestHeader: {
xxx: 'xxx'
}
method: 'POST'
requestBody: {
xxx: 'xxx'
}
responseData: {
xxx: 'xxx'
}
responseHeader: {
xxx: 'xxx'
}
}
(3)说明storage用法 storage兼容浏览器和服务端,而且是持久化数据存储,提供两个API,分别为:
storage.setItem(key,value)
storage.getItem(key)
二、在一个具体的项目中,接口已经录入完成,但在项目中设置了接口基本路径,而登录接口(用于获取Cookie)是另外一个项目的,与此项目接口的基本路径冲突,导致URL不正确,无法发送的解决方法。
场景: 登录接口url为:CloudUserManagement/rest/UserManageRestService/getTicket;而项目的基本路径为xProject/,导致如果在该项目下录入登录接口就会变成:xProject/CloudUserManagement/rest/UserManageRestService/getTicket,无法发送。但是在yapi的测试集合中,必须从该项目中导入登录接口。 在不需要研发修改的情况下,可以这么处理: 在请求配置的Pre-request Script(请求参数处理脚本)中修改login接口的url,具体如下:
const url = 'CloudUserManagement/rest/UserManageRestService/getTicket'
if(context.pathname.include(url)){
context.pathname = 'CloudUserManagement/rest/UserManageRestService/getTicket'
}
|