You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Playwright中的特定测试设置worker数量?

关于E2E测试单Worker配置的问题

测试流程

load page
-> click start button
   -> load new page
   -> check process ends
   -> click close (process page)
-> click stop button

补充说明:若流程已在运行,页面会显示reconnect和stop按钮

问题描述

该测试在单Worker模式下可正常执行,但跨3个浏览器(对应测试projects)并行测试时出现异常:第二个Worker启动后,在其浏览器环境中测试页面时会检测到第一个Worker启动的流程并将其关闭,直接导致第一个Worker的测试失败。

使用命令--repeat-each=100 --workers=1运行测试时,仅在两个浏览器中出现3次失败(推测与流程页面加载有关),但并行Worker会直接破坏该测试的执行逻辑。

需求与疑问

不想全局设置单Worker,仅希望针对这类涉及已认证用户UI操作的测试,在test、test.describe或文件级别单独设置单Worker,请问是否可行?

解决方案

可以针对特定测试、测试套件或文件配置单Worker,以常用的Playwright框架为例,具体实现方式如下:

1. 文件/测试套件/单个测试级别:标签+配置文件

  • 给需要单Worker执行的测试文件、套件或用例添加标签,比如:
    // 文件级别或套件级别
    test.describe('已认证用户流程测试 @singleWorker', () => {
      // 单个测试用例级别
      test('启动并停止流程', async ({ page }) => {
        // 测试逻辑
      });
    });
    
  • 在测试配置文件(如playwright.config.js)中,针对该标签的测试设置单Worker:
    module.exports = {
      projects: [
        // 其他并行测试项目配置
        {
          name: 'single-worker-tests',
          testMatch: '**/*.spec.js',
          grep: /@singleWorker/,
          workers: 1,
        },
      ],
    };
    

这种方式可以精准控制特定测试用单Worker执行,不影响其他测试的并行效率。

2. 单个测试用例内控制(不推荐)

也可以在测试代码中通过框架提供的workerInfo对象判断Worker索引,跳过多余Worker的执行,但这种方式可靠性较低:

test('启动并停止流程', async ({ page }, workerInfo) => {
  // 仅允许第一个Worker执行该测试
  if (workerInfo.workerIndex > 0) {
    test.skip();
  }
  // 测试逻辑
});

内容的提问来源于stack exchange,提问作者CodeGorilla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 11:37:31