跳到主要内容

项目配置

简介

项目(project)是指使用相同配置运行的一组逻辑测试集合。我们使用项目(project)的概念可以在不同的浏览器和设备上运行测试。项目配置在 playwright.config.ts 文件中,配置完成后,您可以选择在所有项目上运行测试,或仅在特定项目上运行。您还可以使用项目在不同的配置下运行相同的测试。例如,您可以在登录和未登录状态下运行相同的测试。

通过设置项目,您还可以:

  • 以不同的超时或重试次数运行一组测试
  • 针对不同环境(如预发布和生产环境)运行测试组
  • 按包/功能拆分测试
  • 以及其他更多场景

为多浏览器配置项目

通过使用**项目(projects)**配置,您可以在多种浏览器中运行测试,包括 chromium、webkit 和 firefox,以及品牌浏览器如 Google Chrome 和 Microsoft Edge。Playwright 还支持在模拟的平板和移动设备上运行测试。完整支持的桌面、平板和移动设备列表请参见设备参数注册表

import { defineConfig, devices } from '@playwright/test';

export default defineConfig({
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},

{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
},

{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
},

/* 针对移动设备视图进行测试 */
{
name: 'Mobile Chrome',
use: { ...devices['Pixel 5'] },
},
{
name: 'Mobile Safari',
use: { ...devices['iPhone 12'] },
},

/* 针对品牌浏览器进行测试 */
{
name: 'Microsoft Edge',
use: {
...devices['Desktop Edge'],
channel: 'msedge'
},
},
{
name: 'Google Chrome',
use: {
...devices['Desktop Chrome'],
channel: 'chrome'
},
},
],
});

运行项目

Playwright 默认会运行所有项目。

npx playwright test

Running 7 tests using 5 workers

[chromium] › example.spec.ts:3:1 › basic test (2s)
[firefox] › example.spec.ts:3:1 › basic test (2s)
[webkit] › example.spec.ts:3:1 › basic test (2s)
[Mobile Chrome] › example.spec.ts:3:1 › basic test (2s)
[Mobile Safari] › example.spec.ts:3:1 › basic test (2s)
[Microsoft Edge] › example.spec.ts:3:1 › basic test (2s)
[Google Chrome] › example.spec.ts:3:1 › basic test (2s)

使用 --project 命令行选项可以运行单个项目。

npx playwright test --project=firefox

Running 1 test using 1 worker

[firefox] › example.spec.ts:3:1 › basic test (2s)

VS Code 测试运行器默认会在 Chrome 浏览器上运行测试。要在其他/多个浏览器上运行,点击测试侧边栏中运行按钮的下拉菜单,选择其他配置,或者通过点击 选择默认配置 来修改默认配置,选择你想要运行测试的浏览器。

选择浏览器

选择特定配置、多种配置或所有配置来运行测试。

选择默认配置

为多环境配置项目

通过设置项目,我们可以使用不同的超时或重试次数运行一组测试,或者针对不同环境运行一组测试。例如,我们可以针对暂存环境运行测试并设置2次重试,同时针对生产环境运行测试且不进行重试。

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

export default defineConfig({
timeout: 60000, // 超时时间在所有测试间共享
projects: [
{
name: 'staging',
use: {
baseURL: 'staging.example.com',
},
retries: 2,
},
{
name: 'production',
use: {
baseURL: 'production.example.com',
},
retries: 0,
},
],
});

将测试拆分为多个项目

我们可以将测试拆分为多个项目,并使用过滤器来运行测试子集。例如,我们可以创建一个项目,使用匹配特定文件名的过滤器来运行测试。然后我们可以有另一组测试忽略特定的测试文件。

以下示例定义了一个公共超时和两个项目。"Smoke"项目运行一小部分测试且不进行重试,"Default"项目运行所有其他测试并进行2次重试。

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

export default defineConfig({
timeout: 60000, // 超时时间在所有测试间共享
projects: [
{
name: 'Smoke',
testMatch: /.*smoke.spec.ts/,
retries: 0,
},
{
name: 'Default',
testIgnore: /.*smoke.spec.ts/,
retries: 2,
},
],
});

依赖关系

依赖关系是指在一个项目的测试运行之前需要先运行的其他项目列表。这在配置全局设置操作时非常有用,可以让一个项目依赖于这些先运行的操作。当使用项目依赖时,测试报告器会显示设置测试,追踪查看器也会记录设置过程的追踪信息。你可以使用检查器来检查设置测试追踪中的 DOM 快照,也可以在设置测试中使用fixtures

在这个例子中,chromium、firefox 和 webkit 项目都依赖于 setup 项目。

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

export default defineConfig({
projects: [
{
name: 'setup',
testMatch: '**/*.setup.ts',
},
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
dependencies: ['setup'],
},
{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
dependencies: ['setup'],
},
{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
dependencies: ['setup'],
},
],
});

运行顺序

当处理具有依赖关系的测试时,依赖项总是会先运行。一旦该项目的所有测试通过,其他项目将并行运行。

运行顺序:

  1. 'setup' 项目中的测试首先运行。当该项目所有测试通过后,依赖项目的测试才会开始运行。

  2. 'chromium'、'webkit' 和 'firefox' 项目中的测试会一起运行。默认情况下,这些项目将并行运行,受限于最大工作线程数限制。

chromium、webkit 和 firefox 项目依赖于 setup 项目

如果存在多个依赖项,这些依赖项目会先并行运行。如果某个依赖项目的测试失败,那么依赖于该项目的测试将不会执行。

运行顺序:

  1. 'Browser Login' 和 'DataBase' 项目中的测试并行运行:
    • 'Browser Login' 通过
    • ❌ 'DataBase' 失败!
  2. 'e2e tests' 项目不会运行!
Browser login 项目显示为蓝色,database 为红色,e2e tests 依赖两者

清理操作

您还可以通过为 setup 项目添加 testProject.teardown 属性来执行清理操作。清理操作会在所有依赖项目运行完毕后执行。更多信息请参阅清理指南

全局设置和清理操作

测试过滤

所有测试过滤选项,如 --grep/--grep-invert--shard、直接在命令行中按位置过滤,或使用 test.only(),都会直接选择要运行的主要测试。如果这些测试属于具有依赖项的项目,则这些依赖项中的所有测试也将运行。

你可以传递 --no-deps 命令行选项来忽略所有依赖项和清理操作。只有你直接选择的项目会运行。

自定义项目参数

项目还可用于通过自定义配置参数化测试 - 请参阅这份独立指南