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

如何确保PlayWright并行测试的指定最终步骤同时执行

如何在Playwright并行测试中让指定步骤同时执行

我们的应用近期出现一个问题:两名用户提交表单后,摘要信息发生互换。现在需要模拟Playwright并行测试中,两个测试的指定步骤(first test-step4 和 second test-step5)同时执行的场景。

当前测试代码结构:

test.describe.configure({mode: 'parallel'})

test('first test', async({})=>{
  // step1..
  // step2..
  // step3..
  // step4..
})

test('second test', async({})=>{
  // step1..
  // step2..
  // step3..
  // step4..
  // step5..
})

运行命令:npx playwright test --workers=2,已尝试查阅Playwright Worker API文档但未找到直接方案,推测Node.js Worker Threads和事件机制可能有用,寻求解决方法。


解决方案:基于Node.js Worker Threads的同步协调

要实现两个测试的指定步骤同时执行,核心是让两个测试在到达目标步骤时互相等待,直到双方都准备就绪后再同步执行。可以利用Node.js的worker_threads模块实现Worker间的通信协调,具体实现如下:

1. 完整示例代码

const { parentPort } = require('worker_threads');
const test = require('@playwright/test');

test.describe.configure({ mode: 'parallel' });

// 主进程协调逻辑:监听Worker就绪信号,全员就绪后触发执行
if (process.env.PLAYWRIGHT_WORKER_INDEX === undefined) {
  const readyWorkers = new Set();
  process.on('message', (msg) => {
    if (msg.type === 'ready') {
      readyWorkers.add(msg.testId);
      // 两个测试都就绪时,通知它们执行目标步骤
      if (readyWorkers.size === 2) {
        process.send({ type: 'execute', testId: 'first' });
        process.send({ type: 'execute', testId: 'second' });
      }
    }
  });
}

// 等待同步信号的工具函数
async function waitForSyncSignal(testId) {
  return new Promise((resolve) => {
    // 向主进程发送就绪信号
    process.send({ type: 'ready', testId });
    // 监听主进程的执行指令
    process.on('message', (msg) => {
      if (msg.type === 'execute' && msg.testId === testId) {
        resolve();
      }
    });
  });
}

test('first test', async ({}) => {
  // step1 业务逻辑
  // step2 业务逻辑
  // step3 业务逻辑

  // 等待第二个测试就绪,同步执行step4
  await waitForSyncSignal('first');
  console.log('执行 first test - step4');
  // step4 具体业务逻辑
});

test('second test', async ({}) => {
  // step1 业务逻辑
  // step2 业务逻辑
  // step3 业务逻辑
  // step4 业务逻辑

  // 等待第一个测试就绪,同步执行step5
  await waitForSyncSignal('second');
  console.log('执行 second test - step5');
  // step5 具体业务逻辑
});

2. 核心逻辑说明

  • 主进程协调:主进程作为中间者,收集两个测试的就绪信号,当两者都准备好后,同时发送执行指令。
  • Worker通信:每个测试通过process.send向主进程发送就绪状态,并监听执行指令,确保只有在收到指令后才执行目标步骤。
  • 运行方式:依然使用npx playwright test --workers=2启动测试,确保两个测试在独立Worker中运行。

Playwright Worker API 相关内容翻译

Worker.evaluate()

  • 方法签名:await worker.evaluate(pageFunction[, arg]);
  • 作用:在Worker的独立上下文环境中执行指定函数pageFunction,可传入参数arg,返回函数执行结果。
  • 参数说明:
    • pageFunction:待执行的函数,支持函数对象或函数体字符串。
    • arg:可选参数,需为JSON可序列化类型,会被传递给pageFunction。
  • 返回值:函数执行结果,会被序列化为JSON格式后返回。
  • 注意:该方法执行的函数无法直接访问测试文件中的变量,必须通过arg传递数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:52:38