← Назад ко всем вопросам

Зачем нужны markers в PyTest и как запускать тесты по маркерам?

1️⃣ Как кратко ответить

Markers в PyTest используются для классификации и организации тестов, позволяя запускать подмножества тестов по определенным критериям. Запуск тестов по маркерам осуществляется с помощью команды pytest -m <marker_name>.

2️⃣ Подробное объяснение темы

В PyTest маркеры (markers) — это мощный инструмент для управления тестами. Они позволяют классифицировать тесты, добавляя к ним метки, которые можно использовать для фильтрации и запуска определенных групп тестов. Это особенно полезно в больших проектах, где количество тестов может быть значительным, и требуется гибкость в их запуске.

Зачем нужны маркеры?

  1. Организация тестов: Маркеры помогают структурировать тесты, группируя их по функциональности, приоритету, типу тестирования (например, smoke, regression) и другим критериям.
  2. Избирательный запуск: Позволяют запускать только те тесты, которые соответствуют определенным условиям, что экономит время и ресурсы.
  3. Управление тестовыми наборами: Удобно для создания различных тестовых наборов для разных сред или целей (например, быстрые тесты для CI/CD, полные тесты для ночных прогонов).

Как использовать маркеры в PyTest?

Определение маркера

Чтобы использовать маркер, его нужно определить в тесте. Например, если у вас есть тест, который вы хотите пометить как "smoke", вы можете сделать это следующим образом:

import pytest
​
@pytest.mark.smoke
def test_example():
    assert 1 + 1 == 2

Здесь @pytest.mark.smoke — это декоратор, который добавляет маркер smoke к функции test_example.

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

Чтобы запустить тесты, помеченные определенным маркером, используйте команду:

pytest -m smoke

Эта команда запустит только те тесты, которые помечены маркером smoke.

Комбинирование маркеров

Вы можете комбинировать маркеры для более сложных сценариев. Например, чтобы запустить тесты, помеченные как smoke или regression, используйте:

pytest -m "smoke or regression"

Для запуска тестов, которые помечены обоими маркерами, используйте:

pytest -m "smoke and regression"

Регистрация пользовательских маркеров

PyTest требует, чтобы пользовательские маркеры были зарегистрированы в файле pytest.ini для предотвращения ошибок. Это делается следующим образом:

# pytest.ini
[pytest]
markers =
    smoke: mark a test as a smoke test
    regression: mark a test as a regression test

Регистрация маркеров помогает поддерживать документацию и предотвращает случайные ошибки в именах маркеров.

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

Предположим, у вас есть набор тестов, и вы хотите разделить их на быстрые и медленные. Вы можете использовать маркеры fast и slow:

import pytest
​
@pytest.mark.fast
def test_quick_function():
    assert 1 + 1 == 2
​
@pytest.mark.slow
def test_slow_function():
    import time
    time.sleep(5)
    assert 1 + 1 == 2

Запуск только быстрых тестов:

pytest -m fast

Запуск только медленных тестов:

pytest -m slow

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

Тема: PyTest
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки