Тегирование и аннотации тестов

Тегирование и аннотации тестов в Playwright позволяют организовать и управлять тестами более эффективно. Это важно при большом количестве тестов, когда нужно выделить определённые группы, организовать их по категориям или устанавливать зависимости между тестами. В Playwright для этих целей используются аннотации и метки, которые можно легко интегрировать в процесс тестирования.

Тегирование — это механизм, который позволяет назначать тестам метки (теги), что позволяет фильтровать, запускать или игнорировать тесты на основе их характеристик. Теги полезны, когда необходимо запустить только тесты для определённой категории, например, функциональные тесты, тесты производительности или тесты для конкретных браузеров.

Для добавления тегов в Playwright используется библиотека @playwright/test. В этой библиотеке есть возможность добавлять метки с помощью аннотаций.

Пример использования тегов

import { test, expect } from '@playwright/test';

test('тест для страницы входа', { tags: ['login', 'smoke'] }, async ({ page }) => {
  await page.goto('https://example.com/login');
  await expect(page).toHaveURL('https://example.com/login');
});

test('тест для страницы регистрации', { tags: ['signup', 'smoke'] }, async ({ page }) => {
  await page.goto('https://example.com/signup');
  await expect(page).toHaveURL('https://example.com/signup');
});

В этом примере два теста помечены тегами login, smoke и signup, smoke. Это позволяет запускать только те тесты, которые соответствуют определённым тегам, например, все тесты, связанные с функциями входа или регистрации.

Запуск тестов по тегам

После того как тесты помечены тегами, их можно запускать с фильтрацией по тегам. Для этого используется команда в терминале с ключом --grep. К примеру, чтобы запустить только тесты, помеченные тегом smoke, нужно выполнить следующую команду:

npx playwright test --grep smoke

Это гарантирует, что будут выполнены только те тесты, которые имеют тег smoke. Если требуется исключить тесты с определёнными тегами, можно использовать флаг --grep-invert, чтобы исключить тесты, которые не соответствуют заданному тегу.

npx playwright test --grep-invert smoke

Таким образом, тегирование позволяет гибко настраивать выполнение тестов в зависимости от различных условий.

Использование аннотаций

Аннотации — это метаданные, которые можно добавлять к тестам для их лучшей организации, улучшения читаемости и управления. Playwright предоставляет возможность использовать аннотации для добавления дополнительной информации о тестах. Например, аннотации могут содержать описание, который браузер используется для теста, или же приоритет теста.

Пример аннотированного теста

import { test, expect } from '@playwright/test';

test('Тест для страницы авторизации в мобильной версии', { 
  tags: ['login', 'mobile'], 
  description: 'Проверка правильности работы страницы авторизации на мобильных устройствах' 
}, async ({ page }) => {
  await page.goto('https://example.com/login');
  await expect(page).toHaveURL('https://example.com/login');
});

test('Тест для страницы авторизации в десктопной версии', { 
  tags: ['login', 'desktop'],
  description: 'Проверка правильности работы страницы авторизации на десктопе' 
}, async ({ page }) => {
  await page.goto('https://example.com/login');
  await expect(page).toHaveURL('https://example.com/login');
});

В этом примере два теста имеют описания, которые поясняют, для какого устройства проводятся тесты (мобильная и десктопная версия). Такие аннотации помогают понять, какие именно тесты проверяют конкретные аспекты интерфейса или функционала.

Группировка тестов с использованием тегов

При большом количестве тестов важно структурировать их по категориям. Это можно делать с помощью тегов. Например, можно создать группы для тестов, которые проверяют UI, для тестов API, тестов безопасности и так далее. Также можно создавать теги для проверки различных сценариев — для функций, производительности или стабильности.

Пример группировки тестов

import { test, expect } from '@playwright/test';

test('Проверка входа в систему', { tags: ['ui', 'smoke'] }, async ({ page }) => {
  await page.goto('https://example.com/login');
  await expect(page).toHaveURL('https://example.com/login');
});

test('Тест авторизации через API', { tags: ['api', 'login'] }, async ({ request }) => {
  const response = await request.post('https://example.com/api/login', {
    data: { username: 'user', password: 'pass' }
  });
  expect(response.ok()).toBeTruthy();
});

В этом примере тесты помечены тегами ui, api, smoke и login, что позволяет удобно фильтровать и запускать только тесты, относящиеся к нужной категории. Например, можно запустить только UI-тесты или только тесты API, в зависимости от того, какую функциональность нужно проверить.

Использование зависимостей между тестами

В Playwright также поддерживается возможность задавать зависимости между тестами с использованием аннотаций. Это полезно, когда один тест должен быть выполнен перед другим, например, если нужно сначала залогиниться в систему, а потом проверить доступность определённой страницы.

Пример зависимости между тестами

import { test, expect } from '@playwright/test';

test('Тест для авторизации', async ({ page }) => {
  await page.goto('https://example.com/login');
  await page.fill('#username', 'user');
  await page.fill('#password', 'password');
  await page.click('#submit');
  await expect(page).toHaveURL('https://example.com/dashboard');
});

test('Проверка доступа к защищённой странице', { dependencies: ['Тест для авторизации'] }, async ({ page }) => {
  await page.goto('https://example.com/secure-page');
  await expect(page).toHaveText('Доступ разрешён');
});

Здесь второй тест зависит от выполнения первого теста. Это позволяет выстраивать сложные сценарии, где выполнение одного теста может быть началом для выполнения другого.

Заключение

Тегирование и аннотации тестов являются важными инструментами в организации и управлении тестами в Playwright. Они позволяют гибко настраивать и фильтровать тесты, а также создают возможность для структурирования большого числа тестов в зависимости от их типа, приоритета или особенностей. Это делает процесс тестирования более прозрачным, удобным и эффективным.