Как временно исключить тест из запуска в тестовом фреймворке

«Как временно исключить тест из запуска в тестовом фреймворке» — вопрос из категории Фреймворки тестирования, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Способы в зависимости от фреймворка:

JUnit 5 (современный стандарт для Java): Используется аннотация @Disabled. Всегда указываю причину.

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

class PaymentServiceTest {

    @Test
    void shouldProcessValidPayment() {
        // рабочий тест
    }

    @Disabled("Отключено до фикса бага PAY-123 в платежном шлюзе. Ожидаем обновление API 25.10.")
    @Test
    void shouldHandleGatewayTimeout() {
        // Этот тест не будет запускаться
    }
}

JUnit 4: Аннотация @Ignore.

@Ignore("Тест нестабилен в среде CI из-за таймаутов. Требуется доработка.")
@Test
public void testFlakyIntegration() { }

TestNG: Параметр enabled = false в аннотации @Test.

@Test(enabled = false, description = "Временное отключение. Нужно адаптировать под новую схему API v2.")
public void testOldApiEndpoint() { }

Pytest (Python): Декоратор @pytest.mark.skip.

import pytest

@pytest.mark.skip(reason="Требуется обновить фикстуру данных после миграции БД")
def test_user_report():
    ...

Мои практические правила:

  1. Всегда указываю причину отключения (reason). Это JIRA-тикет, дата или конкретная проблема.
  2. Не удаляю код теста. Отключенный тест остается в кодовой базе как напоминание о проблеме.
  3. Использую теги/группы для массового управления. В TestNG или Pytest можно помечать тесты кастомными тегами (например, @Test(groups = "broken")) и затем запускать все, кроме этой группы.
  4. Регулярно ревизия. Во время планирования спринта просматриваю список отключенных тестов, чтобы вернуть их или переписать.

Альтернатива для условного пропуска: Иногда тест должен пропускаться при определенных условиях (например, только в Windows). Тогда вместо отключения использую assumeTrue в JUnit или pytest.mark.skipif.