TestCafe 3人以上多用户E2E测试重复执行卡顿问题求解
TestCafe多用户可重复执行E2E测试解决方案
问题根因
- 你当前代码的显性缺陷:scenario-gist.js末尾的三个End阶段没有等待执行完成,主进程提前退出,导致Scenario实例未销毁、浏览器进程残留
- 官方示例的Scenario采用全局单例存储,单次测试执行完成后未清空全局状态,二次初始化时出现状态冲突
- 并发创建多个浏览器实例时存在资源竞争,二次运行时残留的浏览器进程占用端口/用户配置目录,导致新实例启动卡住
修复方案
1. 完善场景执行生命周期的等待逻辑
把末尾的三个End阶段改为Promise.all并行等待,确保所有用户的测试完全执行完成后再结束主流程,同时新增Scenario销毁逻辑:
// 替换原来三个无等待的runStage调用 await Promise.all([ user1.runStage('End'), user2.runStage('End'), user3.runStage('End') ]); // 新增销毁逻辑,清空实例绑定的所有事件与子进程 await scenario.destroy();
2. 新增全局状态清理逻辑
修改示例中getScenario方法所在的入口文件,新增全局状态重置方法,每次执行场景前清空之前残留的场景实例:
// 入口文件新增导出方法 module.exports.resetScenarios = () => { global.__scenarios = {}; };
在scenario-gist.js初始化Scenario前先调用重置方法:
const { Scenario, resetScenarios } = require('..'); module.exports = async () => { // 先清空之前的残留状态 resetScenarios(); const scenario = new Scenario('An example of synchronizing multiple tests'); // 其余原有逻辑 };
3. 优化多用户创建逻辑,增加超时与重试
给createUser调用增加超时控制,避免无限制卡住,同时错开实例启动时间减少资源竞争:
// 封装带超时的createUser const createUserWithTimeout = async (scenario, name, path, browser, timeout = 30000) => { return Promise.race([ scenario.createUser(name, path, browser), new Promise((_, reject) => setTimeout(() => reject(new Error(`创建用户${name}超时`)), timeout)) ]); }; // 串行错开创建,避免并发资源竞争 const user1 = await createUserWithTimeout(scenario, 'First user', 'test/first-user-test.js', 'chrome'); await new Promise(resolve => setTimeout(resolve, 1000)); const user2 = await createUserWithTimeout(scenario, 'Second user', 'test/second-user-test.js', 'chrome --incognito'); await new Promise(resolve => setTimeout(resolve, 1000)); const user3 = await createUserWithTimeout(scenario, 'Third user', 'test/third-user-test.js', 'chrome --incognito');
4. 前置清理残留资源
每次测试执行前,先杀掉残留的Chrome进程,避免端口/目录占用:
- Windows环境执行命令:
taskkill /im chrome.exe /f 2>nul - Mac/Linux环境执行命令:
pkill -f "chrome --incognito" 2>/dev/null || true
可以将命令集成到测试脚本的前置钩子中自动执行。
5. 长期优化方案
如果需要支持更多用户的场景,建议直接使用TestCafe原生的t.useRole API结合用户角色隔离,配合自定义的阶段同步逻辑,比官方示例的多进程调度方案稳定性更高。
内容的提问来源于stack exchange,提问作者touka_tt
相关产品推荐
相关产品推荐

