在下面的代码中,我将调用LoginAPI进行授权,并将token作为状态(Login.e2e.ts)写入。顺便说一下,在我的axios. ts文件中使用axios interceptor. request。
我的问题是**
如果我使用下面的代码逻辑,当我在我的项目中使用customAxios发送请求时,每次await LoginAPI.API.Signin.run()
都会为每个API请求运行。很快,我就可以有100个API调用。我不想每次运行await LoginAPI.API.Signin.run()
,因为我可以接受429个错误。
- 新的逻辑应该是这样的;**
我想先获取一个令牌,然后使用它直到它过期。如果令牌过期,然后发送一个新的请求,并获得一个新的令牌。如何使用JavaScript或TypeScript做到这一点?
- 这是我的Login.e2e.ts文件**
import api from "api/core"
import { expect } from "@playwright/test";
export const LoginAPI = {
States: {
token: {} as string
},
API: {
Signin: {
notes: "user login",
run: async () => {
let res: any = await api.test.LoginPost(process.env.NAME, process.env.PASS)
LoginAPI.States.token = res.data.token
expect(res.status).toBe(200)
},
},
},
};
- 这是我的axios. ts文件**
import axios from "axios";
import { LoginAPI } from "../playwright/tests/login/login.api";
const customAxios = axios.create({
baseURL: process.env.ENV === '1' ? "https://test1" : process.env.ENV === '2' ? "https://test2" : "https://test3",
});
customAxios.interceptors.request.use(
async (config) => {
await LoginAPI.API.Signin.run()
if (config.headers) {
config.headers['Authorization'] = `Bearer ${LoginAPI.States.token}`;
return config;
}
return config;
},
(error) => {
Promise.reject(error);
}
);
export default customAxios
首先获取一个令牌,然后使用它直到它过期。如果令牌过期,则发送一个新请求并获取一个新令牌。上述代码应更改为以下逻辑
1条答案
按热度按时间lrl1mhuk1#
我建议你登录一次,从browser.context()中获取cookie,并将其保存为JSON文件,然后在剩下的测试中使用这个cookie状态/会话,这样你就不必每次都登录来进行新的测试或测试套件。
更多关于
storageState(options)
的信息请参见官方文档。在您的全局设置和拆卸中使用
storageState(options)
的示例,请参见官方文档。