项目
简介
项目是使用相同配置运行的一组测试的逻辑分组。我们使用项目以便能够在不同的浏览器和设备上运行测试。项目在 playwright.config.ts
文件中配置,配置完成后,您可以运行所有项目中的测试,也可以只运行特定项目中的测试。您还可以使用项目在不同的配置中运行相同的测试。例如,您可以在登录和注销状态下运行相同的测试。
通过设置项目,您还可以使用不同的超时或重试运行一组测试,或者针对不同的环境(例如登台和生产)运行一组测试,按包/功能拆分测试等等。
配置用于多个浏览器的项目
通过使用**项目**,您可以在多个浏览器(如 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'] },
},
/* Test against mobile viewports. */
{
name: 'Mobile Chrome',
use: { ...devices['Pixel 5'] },
},
{
name: 'Mobile Safari',
use: { ...devices['iPhone 12'] },
},
/* Test against branded browsers. */
{
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 次重试的登台环境运行我们的测试,以及针对具有 0 次重试的生产环境运行我们的测试。
import { defineConfig } from '@playwright/test';
export default defineConfig({
timeout: 60000, // Timeout is shared between all tests.
projects: [
{
name: 'staging',
use: {
baseURL: 'staging.example.com',
},
retries: 2,
},
{
name: 'production',
use: {
baseURL: 'production.example.com',
},
retries: 0,
},
],
});
将测试拆分为项目
我们可以将测试拆分为项目并使用过滤器运行测试的子集。例如,我们可以创建一个项目,该项目使用与特定文件名匹配的过滤器运行测试。然后,我们可以拥有另一个忽略特定测试文件的测试组。
以下示例定义了一个公共超时和两个项目。“Smoke”项目在没有重试的情况下运行一小部分测试,“Default”项目在有重试的情况下运行所有其他测试。
import { defineConfig } from '@playwright/test';
export default defineConfig({
timeout: 60000, // Timeout is shared between all tests.
projects: [
{
name: 'Smoke',
testMatch: /.*smoke.spec.ts/,
retries: 0,
},
{
name: 'Default',
testIgnore: /.*smoke.spec.ts/,
retries: 2,
},
],
});
依赖项
依赖项是在另一个项目中的测试运行之前需要运行的项目的列表。它们可用于配置全局设置操作,以便一个项目依赖于此操作首先运行。当使用项目依赖项时,测试报告器 将显示设置测试,并且跟踪查看器 将记录设置的跟踪。您可以使用检查器检查设置测试跟踪的 DOM 快照,也可以在设置中使用夹具。
在此示例中,chromium、firefox 和 webkit 项目依赖于设置项目。
import { defineConfig } 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'],
},
],
});
运行顺序
在处理具有依赖项的测试时,依赖项将始终首先运行,并且一旦来自此项目的所有测试都通过,则其他项目将并行运行。
运行顺序
-
“设置”项目中的测试运行。一旦来自此项目的所有测试都通过,则来自依赖项目的测试将开始运行。
-
“chromium”、“webkit”和“firefox”项目中的测试一起运行。默认情况下,这些项目将并行运行,受最大工作程序限制。
如果有多个依赖项,则这些项目依赖项将首先并行运行。如果来自依赖项的测试失败,则依赖于此项目的测试将不会运行。
运行顺序
- “浏览器登录”和“数据库”项目中的测试并行运行
- “浏览器登录”通过
- ❌“数据库”失败!
- “端到端测试”项目未运行!
拆卸
您还可以通过向设置项目添加testProject.teardown 属性来拆卸设置。拆卸将在所有依赖项目运行后运行。有关更多信息,请参阅拆卸指南。
测试过滤
如果使用了--grep/--grep-invert
或--shard
选项,在命令行中指定了测试文件名过滤器,或者使用了test.only(),它将仅应用于项目依赖项链中最深层的项目的测试。换句话说,如果匹配的测试属于具有项目依赖项的项目,则 Playwright 将运行来自项目依赖项的所有测试,而忽略过滤器。
自定义项目参数
项目也可用于使用自定义配置参数化测试 - 请查看此单独指南。