Условное выполнение и пропуск тестов

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

Условное выполнение тестов

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

  1. Проверка условий перед запуском теста

    Один из вариантов — это выполнение проверок непосредственно перед запуском теста с помощью фреймворков, поддерживающих Playwright, например, Jest или Mocha. Такие проверки могут быть выполнены с использованием методов, доступных в соответствующих фреймворках.

    const { test } = require('@playwright/test');
    
    test.describe('Условные тесты', () => {
      const isFeatureEnabled = process.env.FEATURE_ENABLED === 'true';
    
      test('Проверка новой функциональности', async ({ page }) => {
        if (!isFeatureEnabled) {
          test.skip('Функция отключена, тест пропущен');
        }
    
        // Логика теста
        await page.goto('https://example.com');
        await page.click('button');
        // Дополнительные действия
      });
    });

    В этом примере тест будет пропущен, если переменная окружения FEATURE_ENABLED не равна 'true'. Таким образом, можно гибко управлять выполнением тестов в зависимости от внешних факторов.

  2. Условные проверки внутри теста

    Условное выполнение также можно реализовать внутри самого теста, проверяя состояния, которые изменяются в процессе выполнения теста. Например, можно выполнить одну часть теста только при определенных условиях, а другую — в случае их отсутствия.

    test('Проверка доступности функционала', async ({ page }) => {
      const isFeatureAvailable = await page.isVisible('#new-feature');
    
      if (isFeatureAvailable) {
        await page.click('#new-feature');
        // Дополнительные проверки
      } else {
        console.log('Новая функция недоступна');
      }
    });

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

Пропуск тестов

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

  1. Пропуск тестов в зависимости от условий

    Чтобы пропускать тесты в зависимости от определенных условий, можно использовать функцию test.skip(). Например, тест может быть пропущен в зависимости от состояния внешнего сервиса или переменной окружения.

    const { test } = require('@playwright/test');
    
    test('Тест с пропуском', async ({ page }) => {
      const isProduction = process.env.NODE_ENV === 'production';
    
      if (isProduction) {
        test.skip('Тест не должен выполняться в продакшн-режиме');
      }
    
      // Логика теста
      await page.goto('https://example.com');
      // Дополнительные действия
    });

    В этом примере тест будет пропущен, если приложение запущено в продакшн-режиме, что позволяет избегать ненужных нагрузок или неправильных проверок на реальной среде.

  2. Пропуск тестов с использованием аннотаций

    В Playwright можно использовать аннотации для пропуска тестов. Этот способ особенно удобен, когда необходимо пропустить целые группы тестов. Например, при запуске тестов в CI/CD-системах можно использовать такую аннотацию, как test.skip, для пропуска отдельных тестов в случае определенных условий.

    test.skip('Тест, который должен быть пропущен в CI', async ({ page }) => {
      await page.goto('https://example.com');
      // Логика теста
    });

    Это позволяет исключить определенные тесты из выполнения, если они не актуальны или нуждаются в дополнительной настройке.

  3. Пропуск тестов в случае с ошибками

    В некоторых ситуациях можно использовать test.fail, чтобы явно отметить тест как «ошибочный» или «неудачный». Это может быть полезно, если тест известен как нестабильный или если его выполнение нужно временно отключить.

    test.fail('Тест с известной ошибкой', async ({ page }) => {
      await page.goto('https://example.com');
      // Логика теста с ошибкой
    });

    Такой тест будет помечен как провалившийся, но его результат можно будет интерпретировать как запланированное поведение (например, при известной баге).

Пропуск тестов в зависимости от платформы

Иногда необходимость пропуска тестов возникает из-за ограничений на разных платформах. Например, тесты, зависящие от платформы (Windows, Linux, macOS), могут быть пропущены на неподдерживаемых системах. Для этого в Playwright существует возможность проверки операционной системы перед запуском теста.

const { test } = require('@playwright/test');
const os = require('os');

test('Тест, зависящий от операционной системы', async ({ page }) => {
  if (os.platform() === 'win32') {
    test.skip('Тест не поддерживается на Windows');
  }
  
  await page.goto('https://example.com');
  // Логика теста
});

Этот подход позволяет сэкономить ресурсы, не выполняя тесты, которые могут не работать на определенных операционных системах.

Заключение

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