如何让Playwright每个权限级测试项目先执行对应前置Setup?
解决Playwright多权限测试项目按对应Setup完成后立即执行的问题
你需要按权限拆分测试项目,每个权限组配置专属的前置Setup、后置Teardown,要求测试项目在对应Setup完成后立即执行,但默认配置下所有Setup会先并行跑完,再执行所有测试,不符合预期。
方法1:使用Playwright 1.30+新增的setup选项(推荐)
Playwright 1.30版本引入了setup项目配置项,专门用于指定单个前置依赖项目,其执行逻辑是先完成当前项目的Setup,立即启动该项目的测试,无需等待其他无关Setup完成。同时配合teardown选项,在测试完成后自动执行清理任务。
修改后的配置代码如下:
projects: [ // User 权限测试链 { name: "user-level setup", testMatch: /userLevel\/global.setup\.ts/, }, { name: "user-level", testMatch: "userTests/*.spec.ts", setup: "user-level setup", // 指定当前项目的前置Setup teardown: "user-level cleanup", // 指定测试完成后的清理项目 }, { name: "user-level cleanup", testMatch: /userLevel\/global.teardown\.ts/, }, // Admin 权限测试链 { name: "admin-level setup", testMatch: /adminLevel\/global.setup\.ts/, }, { name: "admin-level", testMatch: "adminTests/*.spec.ts", setup: "admin-level setup", teardown: "admin-level cleanup", }, { name: "admin-level cleanup", testMatch: /adminLevel\/global.teardown\.ts/, } ]
配置生效后,Playwright会并行处理两条独立的执行链:
user-level setup→user-level测试 →user-level cleanupadmin-level setup→admin-level测试 →admin-level cleanup
每个测试项目会在自己的Setup完成后立即启动,无需等待其他权限组的Setup完成。
方法2:适配旧版本Playwright(低于1.30)
如果你的Playwright版本低于1.30,没有setup选项,可以通过拆分执行命令的方式实现需求:
- 单独运行User组的Setup和测试:
npx playwright test --project="user-level setup" --project="user-level"
- 单独运行Admin组的Setup和测试:
npx playwright test --project="admin-level setup" --project="admin-level"
这种方式需要手动分批次执行,但能保证每个测试项目在对应Setup完成后立即运行。如果需要自动化,可以编写shell脚本批量执行。
关键注意事项
- 避免使用
dependencies配置多前置项目,因为Playwright会先并行执行所有dependencies中的项目,全部完成后才会启动依赖它们的测试项目,这正是你当前遇到的问题。 - 使用
setup时,每个测试项目只能指定一个前置Setup项目,正好匹配权限组的一对一需求。
内容的提问来源于stack exchange,提问作者I.sh.
相关产品推荐
相关产品推荐

