如何在Playwright中识别触发setup项目流程的父项目
在Playwright中确定触发setup的父项目
Playwright 原生没有提供直接获取触发 setup 的父项目名称的 API,但可以通过以下方法实现需求:
方法一:通过环境变量传递父项目名称
这是最可靠的方案,每个依赖 setup 的项目可以在配置中自定义环境变量,setup 测试直接读取该变量即可识别触发者。
修改你的 playwright.config.js,为每个父项目添加环境变量:
projects: [ { name: "setup", testMatch: /.*\.setup\.ts/ }, { name: "foo", dependencies: ["setup"], use: { env: { TRIGGERING_PROJECT: "foo" } } }, { name: "bar", dependencies: ["setup"], use: { env: { TRIGGERING_PROJECT: "bar" } } }, ]
在 setup 测试中读取环境变量:
setup("setup test", async ({ page }, testInfo) => { console.log("触发setup的项目:", process.env.TRIGGERING_PROJECT); // 运行foo时输出"foo",运行bar时输出"bar" });
注意事项
如果同时运行多个依赖 setup 的项目(比如 npx playwright test --project=foo --project=bar),Playwright 会为每个父项目单独执行一次 setup,此时每个 setup 实例对应的环境变量会自动匹配触发它的父项目,无需额外处理。
方法二:解析命令行参数(备选方案)
如果不想修改项目配置,可以通过解析命令行参数获取当前运行的项目名称。但这种方法在同时运行多个项目时,无法直接区分单次 setup 对应的父项目,仅适合单项目运行场景。
setup("setup test", async ({ page }, testInfo) => { const args = process.argv.slice(2); const projectArgIndex = args.indexOf("--project"); let triggeringProject = null; if (projectArgIndex !== -1 && projectArgIndex + 1 < args.length) { triggeringProject = args[projectArgIndex + 1]; } console.log("触发setup的项目:", triggeringProject); });
内容的提问来源于stack exchange,提问作者I.sh.
相关产品推荐
相关产品推荐

