You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Playwright中如何将API生成的accessToken用于所有测试?

提取并保存Access Token用于后续API测试

需求说明

我有一个可生成accessToken的认证API端点,想临时保存该token,每次运行测试时将其作为Bearer token应用到所有其他API请求中。

现有代码片段

const url = 'https://serverless.net/api/authority/token';

await request.post(url, {
    headers: {
    'Accept': 'application/json',
    // Add authorization token to all requests.
    'Authorization': `Basic ${Buffer.from(`${process.env.USERNAME}:${process.env.PASSWORD}`).toString('base64')}`, }
});
/// this generates an `accessToken` in the body

API响应示例

{
    "result": 0,
    "message": "Success",
    "data": {
        "accessToken": "eyasdadasdasdasdasdasdasdasdsa",
        "tokenType": "Bearer",
        "expiresIn": "1440",
        "userId": 1
    }
}

解决方案:提取并保存到JSON文件,再用于后续测试

可以通过Node.js的fs模块完成token的读写操作,步骤如下:

  1. 提取Access Token
    在请求认证接口后,从响应体中解析出accessToken:

    const fs = require('fs').promises; // 使用Promise版fs,适配async/await
    const request = require('request-promise'); // 若用原生request可自行调整写法
    
    const url = 'https://serverless.net/api/authority/token';
    
    // 获取并提取token
    async function getAndSaveToken() {
        try {
            const response = await request.post(url, {
                headers: {
                    'Accept': 'application/json',
                    'Authorization': `Basic ${Buffer.from(`${process.env.USERNAME}:${process.env.PASSWORD}`).toString('base64')}`
                },
                json: true // 自动解析JSON响应
            });
    
            // 从响应中提取accessToken
            const accessToken = response.data.accessToken;
    
  2. 保存到临时JSON文件
    接着把token写入到本地JSON文件(比如temp-token.json):

    // 保存到临时文件
            await fs.writeFile('./temp-token.json', JSON.stringify({ accessToken }, null, 2));
            console.log('Token已保存到temp-token.json');
        } catch (error) {
            console.error('获取或保存Token失败:', error);
            throw error;
        }
    }
    
    // 先执行认证并保存token
    getAndSaveToken();
    
  3. 后续测试读取并使用Token
    在其他API测试代码中,读取保存的token并作为Bearer token添加到请求头:

    async function makeAuthorizedRequest(apiUrl) {
        try {
            // 读取临时文件中的token
            const tokenData = await fs.readFile('./temp-token.json', 'utf8');
            const { accessToken } = JSON.parse(tokenData);
    
            // 发起带Bearer token的请求
            const response = await request.get(apiUrl, {
                headers: {
                    'Accept': 'application/json',
                    'Authorization': `Bearer ${accessToken}`
                },
                json: true
            });
    
            return response;
        } catch (error) {
            console.error('授权请求失败:', error);
            throw error;
        }
    }
    
    // 使用示例
    makeAuthorizedRequest('https://serverless.net/api/other-endpoint');
    

注意事项

  • 确保temp-token.json不会被提交到版本控制(可加入.gitignore)
  • 若token有过期时间,可在读取时检查是否过期,过期则重新获取
  • 若使用测试框架(如Mocha、Jest),可在全局钩子(比如beforeAll)中执行token获取逻辑,避免重复请求

内容的提问来源于stack exchange,提问作者ebanster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 07:22:25