Spec-Zone.ru › Playwright

Аннотации

Введение​

Playwright поддерживает теги и аннотации, которые отображаются в отчёте о тестировании.

Вы можете добавлять свои собственные теги и аннотации в любое время, но Playwright предоставляет несколько встроенных:

  • test.skip() помечает тест как неактуальный. Playwright не выполняет такой тест. Используйте эту аннотацию, когда тест не применим в определённой конфигурации.
  • test.fail() помечает тест как неисправный. Playwright выполнит этот тест и убедится, что он действительно завершится неудачно. Если тест не завершится неудачно, Playwright об этом сообщит.
  • test.fixme() помечает тест как неисправный. Playwright не выполнит этот тест, в отличие от аннотации fail. Используйте 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, а затем отфильтровать по тегу в отчёте о тестировании. Или вы можете запустить только тесты с определённым тегом.

Для тегирования теста либо предоставьте дополнительный объект details при объявлении теста, либо добавьте @-токен в заголовок теста. Обратите внимание, что теги должны начинаться с символа @.

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 для более контекста, и доступны в API репортера. Встроенный HTML-репортер Playwright отображает все аннотации, кроме тех, где 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.
  });
});

Использование fixme в beforeEach хуке​

Чтобы избежать запуска 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(),
  });

  // ...
});

© 2024 Microsoft
Licensed under the Apache License, Version 2.0.
https://playwright.dev/docs/test-annotations

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API