如何让Playwright每个项目使用独立worker同时运行互不干扰
Playwright多项目单站点串行执行配置方案
方案1:项目级maxWorkers配置(推荐,适用于Playwright v1.30及以上版本)
这是最贴合需求的原生配置方案,Playwright支持为每个项目单独配置最大worker数,全局worker数设置为4即可实现4个项目同时并行,每个项目内部最多1个worker串行执行,完全避免同站点账号并发冲突。
// playwright.config.ts import { defineConfig } from '@playwright/test'; export default defineConfig({ // 全局worker数设置为4,刚好匹配4个区域项目 workers: 4, projects: [ { name: 'SE', use: { baseURL: 'SE区域站点URL', username: 'SE测试账号', password: 'SE测试密码' }, // 限制单个项目最多分配1个worker,内部用例强制串行执行 maxWorkers: 1 }, { name: 'DK', use: { baseURL: 'DK区域站点URL', username: 'DK测试账号', password: 'DK测试密码' }, maxWorkers: 1 }, { name: 'NL', use: { baseURL: 'NL区域站点URL', username: 'NL测试账号', password: 'NL测试密码' }, maxWorkers: 1 }, { name: 'NO', use: { baseURL: 'NO区域站点URL', username: 'NO测试账号', password: 'NO测试密码' }, maxWorkers: 1 }, ] });
方案2:低版本Playwright兼容方案
如果使用的Playwright版本低于v1.30,不支持项目级maxWorkers配置,可选择以下两种实现方式:
方式1:测试集串行标记
在所有复用的测试用例文件头部添加串行执行配置,同文件内的用例会强制串行执行,适配多项目复用场景:
// 公共测试用例文件,例如tests/shop.spec.ts import { test } from '@playwright/test'; // 强制当前文件所有用例串行执行 test.describe.configure({ mode: 'serial' }); test('商品下单测试', async ({ page }) => { // 测试逻辑 }); test('订单查询测试', async ({ page }) => { // 测试逻辑 });
方式2:命令行多进程并行启动
使用多命令并行工具concurrently分别启动四个Playwright进程,每个进程单独跑一个项目、固定1个worker,完全隔离不同项目的执行资源:
- 安装依赖:
npm i -D concurrently - 配置package.json脚本:
{ "scripts": { "test:all": "concurrently \"npm run test:se\" \"npm run test:dk\" \"npm run test:nl\" \"npm run test:no\"", "test:se": "playwright test --project=SE --workers=1", "test:dk": "playwright test --project=DK --workers=1", "test:nl": "playwright test --project=NL --workers=1", "test:no": "playwright test --project=NO --workers=1" } }
执行npm run test:all即可实现四个站点测试同时启动、单站点串行执行的效果。
内容的提问来源于stack exchange,提问作者DIPIDIP
相关产品推荐
相关产品推荐

