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的读写操作,步骤如下:
提取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;保存到临时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();后续测试读取并使用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
相关产品推荐
相关产品推荐

