Playwright 测试并行性

简介: Playwright 测试并行性

Playwright Test 并行运行测试。为了实现这一点,它运行多个同时运行的工作进程。默认情况下,测试文件并行运行。单个文件中的测试在同一工作进程中按顺序运行。

你可以使用 test.describe.configure 配置测试以并行运行单个文件中的测试。

你可以将整个项目配置为使用 testProject.fullyParallel 或 testConfig.fullyParallel 并行运行所有文件中的所有测试。

要禁用并行性,请限制 工作线程对一 的数量。

你可以控制整个测试套件中 并行工作进程 和 限制失败次数 的数量以提高效率。

工作进程
所有测试都在工作进程中运行。这些进程是操作系统进程,独立运行,由测试运行器编排。所有工作线程都有相同的环境,并且每个工作线程都启动自己的浏览器。

工作线程之间无法沟通。Playwright Test 尽可能地重用单个 Worker 来提高测试速度,因此多个测试文件通常在单个 Worker 中依次运行。

工作线程在 测试失败 后总是关闭,以保证后续测试的原始环境。

限制工作线程
你可以通过 命令行 或 配置文件 来控制并行工作进程的最大数量。

从命令行:

npx playwright test --workers 4
在配置文件中:

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
// Limit the number of workers on CI, use default locally
workers: process.env.CI ? 2 : undefined,
});

禁用并行性
你可以通过随时只允许一个工作线程来禁用任何并行性。在配置文件中设置 workers: 1 选项或将 --workers=1 传递到命令行。

npx playwright test --workers=1

在单个文件中并行测试
默认情况下,单个文件中的测试按顺序运行。如果单个文件中有许多独立测试,你可能希望与 test.describe.configure() 并行运行它们。

请注意,并行测试在单独的工作进程中执行,不能共享任何状态或全局变量。每个测试只为自己执行所有相关的钩子,包括 beforeAll 和 afterAll。
import { test } from '@playwright/test';

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

test('runs in parallel 1', async ({ page }) => { / ... / });
test('runs in parallel 2', async ({ page }) => { / ... / });

或者,你可以在配置文件中选择将所有测试加入到这种完全并行模式中:

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
fullyParallel: true,
});

你还可以为几个项目选择完全并行模式:

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
// runs all tests in all files of a specific project in parallel
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
fullyParallel: true,
},
]
});
串行模式
你可以将相互依赖的测试注释为串行。如果其中一项串行测试失败,则跳过所有后续测试。一组中的所有测试都会一起重试。

注意
不建议使用串口。通常最好将测试隔离起来,这样它们就可以独立运行。

import { test, type Page } from '@playwright/test';

// Annotate entire file as serial.
test.describe.configure({ mode: 'serial' });

let page: Page;

test.beforeAll(async ({ browser }) => {
page = await browser.newPage();
});

test.afterAll(async () => {
await page.close();
});

test('runs first', async () => {
await page.goto('https://playwright.nodejs.cn/');
});

test('runs second', async () => {
await page.getByText('Get Started').click();
});

多台机器之间的分片测试
Playwright Test 可以对测试套件进行分片,以便可以在多台机器上执行。详细信息请参见 分片指南。

npx playwright test --shard=2/3

限制失败并快速失败
你可以通过设置 maxFailures 配置选项或传递 --max-failures 命令行标志来限制整个测试套件中失败测试的数量。

当使用 "最大失败次数" 设置运行时,Playwright Test 将在达到失败测试次数后停止,并跳过任何尚未执行的测试。这对于避免在损坏的测试套件上浪费资源很有用。

传递命令行选项:

npx playwright test --max-failures=10

配置文件中设置:

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
// Limit the number of failures on CI to save resources
maxFailures: process.env.CI ? 10 : undefined,
});
Worker 索引和并行索引
每个工作进程分配有两个 id:从 1 开始的唯一工作索引,以及介于 0 和 workers - 1 之间的并行索引。当工作进程重新启动时,例如在发生故障后,新的工作进程具有相同的 parallelIndex 和新的 workerIndex。

你可以从环境变量 process.env.TEST_WORKER_INDEX 和 process.env.TEST_PARALLEL_INDEX 中读取索引,或者通过 testInfo.workerIndex 和 testInfo.parallelIndex 访问它们。

隔离并行工作线程之间的测试数据
你可以利用上面提到的 process.env.TEST_WORKER_INDEX 或 testInfo.workerIndex 在不同工作线程上运行的测试之间隔离数据库中的用户数据。工作线程运行的所有测试都重复使用同一用户。

创建 playwright/fixtures.ts 文件,该文件将 创建 dbUserName 夹具 并在测试数据库中初始化一个新用户。使用 testInfo.workerIndex 来区分工作线程。

playwright/fixtures.ts
import { test as baseTest, expect } from '@playwright/test';
// Import project utils for managing users in the test database.
import { createUserInTestDatabase, deleteUserFromTestDatabase } from './my-db-utils';

export * from '@playwright/test';
export const test = baseTest.extend<{}, { dbUserName: string }>({
// Returns db user name unique for the worker.
dbUserName: [async ({ }, use) => {
// Use workerIndex as a unique identifier for each worker.
const userName = user-${test.info().workerIndex};
// Initialize user in the database.
await createUserInTestDatabase(userName);
await use(userName);
// Clean up after the tests are done.
await deleteUserFromTestDatabase(userName);
}, { scope: 'worker' }],
});

现在,每个测试文件应该从我们的装置文件导入 test,而不是 @playwright/test。

tests/example.spec.ts
// Important: import our fixtures.
import { test, expect } from '../playwright/fixtures';

test('test', async ({ dbUserName }) => {
// Use the user name in the test.
});
控制测试顺序
Playwright Test 按照声明的顺序从单个文件运行测试,除非你 在单个文件中并行测试。

无法保证跨文件的测试执行顺序,因为 Playwright Test 默认并行运行测试文件。但是,如果你选择 禁用并行性,则可以通过按字母顺序命名文件或使用 "测试清单" 文件来控制测试顺序。

按字母顺序对测试文件进行排序
当你禁用并行测试执行时,Playwright Test 按字母顺序运行测试文件。你可以使用一些命名约定来控制测试顺序,例如 001-user-signin-flow.spec.ts、002-create-new-document.spec.ts 等。

目录
相关文章
|
8月前
|
人工智能 JavaScript 算法
Playwright携手MCP:AI智能体实现自主化UI回归测试
MCP 协议使得 AI 能够通过 Playwright 操作浏览器,其中快照生成技术将页面状态转化为 LLM 可理解的文本,成为驱动自动化测试的关键。该方式适用于探索性测试和快速验证,但目前仍面临快照信息缺失、元素定位不稳定、成本高、复杂场景适应性差以及结果确定性不足等挑战。人机协同被认为是未来更可行的方向,AI 负责执行固定流程,人类则专注策略与验证。
|
7月前
|
人工智能 自然语言处理 JavaScript
Playwright MCP在UI回归测试中的实战:构建AI自主测试智能体
Playwright MCP结合AI智能体,革新UI回归测试:通过自然语言驱动浏览器操作,降低脚本编写门槛,提升测试效率与覆盖范围。借助快照解析、智能定位与Jira等工具集成,实现从需求描述到自动化执行的闭环,推动测试迈向智能化、民主化新阶段。
|
9月前
|
人工智能 缓存 测试技术
Playwright进阶指南 (6) | 自动化测试实战
2025企业级测试解决方案全面解析:从单元测试到千级并发,构建高可用测试体系。结合Playwright智能工具,解决传统测试维护成本高、环境依赖强、执行效率低等痛点,提升测试成功率,内容从测试架构设计、电商系统实战框架、高级测试策略、Docker化部署、CI/CD集成及AI测试应用,助力测试工程师掌握前沿技术,打造高效稳定的测试流程。
Playwright进阶指南 (6) | 自动化测试实战
|
8月前
|
自然语言处理 前端开发 测试技术
使用 Playwright MCP 实现 UI 自动化测试
本文介绍如何结合Playwright与MCP协议实现智能化UI自动化测试。通过自然语言指令控制浏览器,降低技术门槛,提升效率,并涵盖环境搭建、核心功能、实战案例及最佳实践,展现对话式自动化的未来趋势。
|
8月前
|
人工智能 自然语言处理 前端开发
深度解析Playwright MCP:功能、优势与挑战,AI如何提升测试效率与覆盖率
Playwright MCP通过AI与浏览器交互,实现自然语言驱动的自动化测试。它降低门槛、提升效率,助力测试工程师聚焦高价值工作,是探索性测试与快速验证的新利器。
|
8月前
|
人工智能 JavaScript 测试技术
当Playwright遇见MCP,AI智能体实现自主化UI回归测试
本文探讨如何通过Model Context Protocol(MCP)让AI智能体驱动Playwright实现端到端自动化测试。重点解析快照技术的实现原理与实战流程,同时深入剖析其在信息丢失、元素定位、成本效率及逻辑复杂性等方面的现实挑战。
|
10月前
|
JavaScript 前端开发 测试技术
Playwright自动化测试系列课(4) | 异步加载克星:自动等待 vs 智能等待策略深度解析​
本文深度解析Playwright自动化测试中的等待策略,对比自动等待(零配置防御机制)与智能等待(精准控制异步场景)的核心差异。通过实战案例讲解等待机制的选择标准、常见失效原因及调试技巧,帮助开发者有效解决页面异步加载问题,提升测试脚本的稳定性和执行效率。
|
10月前
|
Web App开发 开发框架 .NET
Playwright 自动化测试系列(6)| 第三阶段:测试框架集成​指南:参数化测试 + 多浏览器并行执行
Pytest 与 Playwright 集成可提升自动化测试效率,支持参数化测试、多浏览器并行执行及统一报告生成。通过数据驱动、Fixture 管理和并行优化,显著增强测试覆盖率与执行速度,适用于复杂 Web 应用测试场景。
|
10月前
|
JavaScript 测试技术 API
Playwright自动化测试系列(3) | 第二阶段:核心技能与调试 ​​交互操作大全
本课程为Playwright自动化测试第三阶段,深入讲解核心交互操作与调试技巧。涵盖基础到高级交互、文件上传下载、疑难问题解决及复杂场景应对,并提供稳定性优化方案,帮助开发者高效构建健壮的自动化测试脚本。
|
10月前
|
Web App开发 JavaScript 测试技术
Playwright 极速入门:1 小时搞定环境搭建与首个测试脚本
本文带你1小时快速入门Playwright,完成环境搭建并编写首个测试脚本。Playwright是微软推出的现代化Web自动化测试工具,支持Chromium、Firefox和WebKit三大浏览器引擎,具备跨平台、多语言(Python/JS/Java/C#)特性。其核心优势包括:智能自动等待机制减少失败率、内置录制工具实时生成脚本、多语言灵活选择,以及真移动端设备模拟能力,显著提升测试效率和可靠性。