Используйте декоратор `@pytest.mark.имя_маркера` для пометки тестов.
import pytest
@pytest.mark.slow
def test_slow_feature():
assert True
@pytest.mark.fast
def test_fast_feature():
assert True
Запуск тестов с определенной меткой:
pytest -m slow
Запуск тестов без определенной метки (инверсия):
pytest -m "not slow"
`pytest` автоматически определяет тесты внутри файлов, начинающихся с `test_` или заканчивающихся на `_test.py`, в указанной директории.
pytest tests/
Можно запускать тесты, в названии которых есть определенное слово.
pytest -k "login" #Запустит все тесты, содержащие "login" в имени функции/класса.
Тесты можно группировать внутри классов, чтобы логически сгруппировать тесты связанные с определенным функционалом.
class TestUserAccount:
def test_login(self):
assert True
def test_logout(self):
assert True
Для группировки тестов и запуска их с помощью командной строки в pytest
можно использовать несколько подходов:
Маркеры позволяют назначать тестам произвольные метки и затем запускать только те тесты, которые помечены определенным маркером.
Определение маркеров:
В файле pytest.ini
(или pyproject.toml
) укажите маркеры, которые вы будете использовать. Это помогает pytest
распознать ваши маркеры и избежать предупреждений.
Например:
# pytest.ini
[pytest]
markers =
slow: Тесты, требующие больше времени для выполнения.
integration: Интеграционные тесты.
Применение маркеров в тестах:
# test_example.py
import pytest
@pytest.mark.slow
def test_long_running_task():
# ...
assert True
@pytest.mark.integration
def test_api_integration():
# ...
assert True
def test_fast_operation():
# ...
assert True
Запуск тестов по маркерам:
pytest -m slow # Запускает все тесты, помеченные как 'slow'
pytest -m "not slow" # Запускает все тесты, *не* помеченные как 'slow'
pytest -m "slow or integration" # Запускает тесты с меткой slow ИЛИ integration
pytest -m "slow and integration" # Запускает тесты с метками slow И integration
pytest
автоматически обнаруживает тесты, расположенные в файлах, имена которых начинаются с test_
или заканчиваются на _test
. Также pytest
рекурсивно обходит все подкаталоги в поисках тестовых файлов. Таким образом, можно группировать тесты по каталогам и запускать их, указывая путь к каталогу.
Пример структуры каталогов:
tests/
__init__.py
unit/
__init__.py
test_module1.py
test_module2.py
integration/
__init__.py
test_api.py
test_database.py
Запуск тестов по каталогам:
pytest tests/unit # Запускает все тесты в каталоге tests/unit
pytest tests/integration # Запускает все тесты в каталоге tests/integration
pytest tests # Запускает все тесты во всех подкаталогах в каталоге tests
Вы можете запускать тесты, имена которых содержат определенное ключевое слово.
Запуск тестов по ключевому слову:
pytest -k "api" # Запускает тесты, содержащие 'api' в имени функции или класса
pytest -k "not api" # Запускает тесты, *не* содержащие 'api' в имени функции или класса
pytest
также обнаруживает тесты, определенные внутри классов, имена которых начинаются с Test
.
class TestMyClass:
def test_something(self):
assert True
def test_another_thing(self):
assert False
Эти подходы можно комбинировать. Например, можно запускать тесты, помеченные маркером и содержащие определенное ключевое слово.
Пример комбинирования:
pytest -m slow -k "api" # Запускает тесты, помеченные как 'slow' и содержащие 'api' в имени
Важно: Убедитесь, что в ваших тестовых файлах содержатся соответствующие операторы assert
для проверки ожидаемых результатов.