如何获取Playwright+TypeScript项目当前最大并行Worker数量?
获取Playwright实际最大并行Worker数量
针对你在Playwright + TypeScript项目中遇到的问题——配置workers: process.env.CI ? 1 : undefined后,无法通过配置对象拿到实际运行的最大Worker数,这里有两种可靠的解决方法:
方法一:运行时通过test.info().parallelism获取(推荐)
Playwright在测试运行时会自动计算出实际使用的并行Worker数量(不管你配置的是undefined还是具体数值),可以通过test.info().parallelism直接获取这个最终值:
import { test } from '@playwright/test'; // 在全局前置钩子中获取 test.beforeAll(async () => { const maxWorkers = test.info().parallelism; console.log('当前最大并行Worker数:', maxWorkers); }); // 或者在单个测试用例中结合Worker索引使用 test('示例测试', async ({ page }) => { const currentWorkerIndex = process.env.TEST_WORKER_INDEX; const maxWorkers = test.info().parallelism; console.log(`当前Worker: ${currentWorkerIndex}/${maxWorkers - 1}`); });
这个值完全匹配Playwright实际启用的Worker数量,不管是本地自动根据CPU核数计算,还是CI环境下指定的1,都能准确拿到。
方法二:手动计算并显式配置
如果你需要在配置文件阶段就确定数值(而非运行时),可以手动模拟Playwright的默认逻辑——取CPU核数的一半(向下取整):
import { defineConfig } from '@playwright/test'; import os from 'os'; const defaultWorkers = Math.floor(os.cpus().length / 2); export default defineConfig({ workers: process.env.CI ? 1 : defaultWorkers, });
之后你可以直接在代码中引用这个defaultWorkers变量,或者通过配置对象的workers属性获取。绝大多数场景下,核数一半的计算逻辑和官方默认行为一致。
补充说明
你之前通过playwrightConfig.workers拿到undefined是正常的——因为你配置的就是undefined,Playwright只会在运行时动态计算实际值,配置对象本身不会自动填充这个计算后的数值,所以必须通过上述两种方式获取最终的最大Worker数。
内容的提问来源于stack exchange,提问作者Batou
相关产品推荐
相关产品推荐

