K6中Setup()传递的Token在Default函数中无法获取的问题
问题分析与解决方案
先看你代码里的几个核心问题:
setup函数的Promise写法冗余混乱
你用new Promise(async (resolve, reject) => {})完全是多余的——async函数本身就会返回Promise,而且await和.then()混用容易造成逻辑冗余。默认函数错误使用未定义变量
你在默认函数里调用getUserById(cognitoToken),但cognitoToken根本没在这个函数作用域内定义,应该用传入的token参数。参数传递的潜在问题
虽然setup的日志能打印正确token,但要确保测试框架会把setup返回的Promise结果正确传递给默认函数。先从修复代码明显错误入手:
第一步:优化setup函数
改成简洁的async/await写法,去掉冗余的Promise包装:
export async function setup() { const token = await getCognitoToken(); console.log("Token value in Setup(): ", token); return token; }
如果习惯用.then()写法也可以:
export function setup() { return getCognitoToken().then(token => { console.log("Token value in Setup(): ", token); return token; }); }
第二步:修复默认函数的变量引用
把函数里的cognitoToken全部替换为传入的token参数:
export default function (token) { console.log('Token value in Default(): ', token); group('All the API Smoke tests: \n', () => { failAuthorization(); getUserById(token); createProject(token); }); }
第三步:确认测试框架的参数传递逻辑
如果做完前两步还是拿不到token,要去查你用的测试框架(比如Mocha、Jest)的文档,确认setup函数的返回值是如何传递给测试入口函数的。有些框架需要在配置里指定setup返回值会作为参数注入,或者需要用beforeAll这类钩子来获取并传递token。
另外,之前用全局变量无效的原因,大概率是测试框架的执行上下文隔离——全局变量在setup执行后,可能没被保留到测试函数执行阶段,所以不推荐用这种方式,优先用框架提供的参数传递机制。
内容的提问来源于stack exchange,提问作者user123
相关产品推荐
相关产品推荐

