註釋
簡介
Playwright 支援在測試報告中顯示標籤和註釋。
你可以隨時添加你自己的標籤和註釋,但 Playwright 附帶了一些內建的標籤:
- test.skip() 將測試標記為不相關。Playwright 不會執行此測試。在某些配置中測試不適用時使用此註釋。
- test.fail() 將測試標記為失敗。Playwright 會執行此測試並確保它確實失敗。如果測試沒有失敗,Playwright 會抱怨。
- test.fixme() 將測試標記為失敗。與
fail
註釋相反,Playwright 不會執行此測試。當測試執行緩慢或崩潰時使用fixme
。 - test.slow() 將測試標記為緩慢並將測試超時時間增加三倍。
可以將註釋新增到單一測試或一組測試。
內建註釋可以是有條件的,在這種情況下,它們在條件為真時適用,並且可能依賴於測試夾具。同一測試上可能有多個註釋,可能在不同的配置中。
聚焦測試
你可以聚焦一些測試。當有聚焦的測試時,只有這些測試執行。
test.only('focus this test', async ({ page }) => {
// Run only focused tests in the entire project.
});
跳過測試
將測試標記為跳過。
test.skip('skip this test', async ({ page }) => {
// This test is not run
});
有條件地跳過測試
您可以根據條件跳過某些測試。
test('skip this test', async ({ page, browserName }) => {
test.skip(browserName === 'firefox', 'Still working on it');
});
群組測試
你可以將測試分組,以給它們一個邏輯名稱或在群組之前/之後範圍內的鉤子。
import { test, expect } from '@playwright/test';
test.describe('two tests', () => {
test('one', async ({ page }) => {
// ...
});
test('two', async ({ page }) => {
// ...
});
});
標籤測試
有時候你會想要將測試標記為 @fast
或 @slow
,然後在測試報告中按標記過濾。或者你可能只想執行具有特定標記的測試。
要標記測試,可以在宣告測試時提供額外的詳細資訊物件,或在測試標題中添加 @
符號。請注意,標籤必須以 @
符號開頭。
import { test, expect } from '@playwright/test';
test('test login page', {
tag: '@fast',
}, async ({ page }) => {
// ...
});
test('test full report @slow', async ({ page }) => {
// ...
});
您也可以標記一組中的所有測試或提供多個標籤:
import { test, expect } from '@playwright/test';
test.describe('group', {
tag: '@report',
}, () => {
test('test report header', async ({ page }) => {
// ...
});
test('test full report', {
tag: ['@slow', '@vrt'],
}, async ({ page }) => {
// ...
});
});
你現在可以使用 --grep
命令列選項來執行具有特定標籤的測試。
- Bash
- PowerShell
- Batch
npx playwright test --grep @fast
npx playwright test --grep "@fast"
npx playwright test --grep @fast
或者,如果你想要相反的效果,你可以跳過具有某個標籤的測試:
- Bash
- PowerShell
- Batch
npx playwright test --grep-invert @fast
npx playwright test --grep-invert "@fast"
npx playwright test --grep-invert @fast
要執行包含任一標籤的測試(邏輯 OR
運算符):
- Bash
- PowerShell
- Batch
npx playwright test --grep "@fast|@slow"
npx playwright test --grep --% "@fast^|@slow"
npx playwright test --grep "@fast^|@slow"
或者使用正則表達式前瞻來執行包含兩個標籤(邏輯 AND
運算符)的測試:
npx playwright test --grep "(?=.*@fast)(?=.*@slow)"
你也可以通過 testConfig.grep 和 testProject.grep 在配置文件中過濾測試。
標註測試
如果你想用比標籤更實質的東西來註釋你的測試,你可以在宣告測試時這樣做。註釋有一個 type
和一個 description
來提供更多上下文,並且在 reporter API 中可用。Playwright 的內建 HTML reporter 顯示所有註釋,除了那些 type
以 _
符號開頭的註釋。
例如,要用問題 URL 註釋測試:
import { test, expect } from '@playwright/test';
test('test login page', {
annotation: {
type: 'issue',
description: 'https://github.com/microsoft/playwright/issues/23180',
},
}, async ({ page }) => {
// ...
});
您也可以標註一組中的所有測試或提供多個標註:
import { test, expect } from '@playwright/test';
test.describe('report tests', {
annotation: { type: 'category', description: 'report' },
}, () => {
test('test report header', async ({ page }) => {
// ...
});
test('test full report', {
annotation: [
{ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/23180' },
{ type: 'performance', description: 'very slow test!' },
],
}, async ({ page }) => {
// ...
});
});
有條件地跳過一組測試
例如,你可以僅在 Chromium 中執行一組測試,方法是傳遞一個回呼。
test.describe('chromium only', () => {
test.skip(({ browserName }) => browserName !== 'chromium', 'Chromium only!');
test.beforeAll(async () => {
// This hook is only run in Chromium.
});
test('test 1', async ({ page }) => {
// This test is only run in Chromium.
});
test('test 2', async ({ page }) => {
// This test is only run in Chromium.
});
});
在 beforeEach
鉤子中使用 fixme
為了避免執行 beforeEach
鉤子,你可以將註釋放在鉤子本身中。
test.beforeEach(async ({ page, isMobile }) => {
test.fixme(isMobile, 'Settings page does not work in mobile yet');
await page.goto('http://localhost:3000/settings');
});
test('user profile', async ({ page }) => {
await page.getByText('My Profile').click();
// ...
});
執行時註釋
在測試已經執行時,你可以添加註釋到 test.info().annotations
。
test('example test', async ({ page, browser }) => {
test.info().annotations.push({
type: 'browser version',
description: browser.version(),
});
// ...
});