🔖 Справочник: команды pytest и настройка окружения

⚡ Шпаргалка

# Установка
pip install pytest

# Запуск всех тестов
pytest

# С подробным выводом
pytest -v

# Только тесты, в названии которых есть "sum"
pytest -k "sum"

# Тесты с маркировкой
pytest -m positive_test

# Справка
pytest -h

# Список зарегистрированных маркеров
pytest --markers

# Запуск одного файла
pytest test_calculator.py

# Запуск одной функции
pytest test_calculator.py::test_sum_positive_numbers

1. Установка и окружение

Создание виртуального окружения (PowerShell)

# Создать окружение
python -m venv venv

# Активировать (Windows PowerShell)
.\venv\Scripts\Activate.ps1

# Активировать (bash/Git Bash)
source venv/bin/activate

# Установить pytest
pip install pytest

# Проверить версию
pytest --version

Структура проекта

# Рекомендуемая структура
Lesson1/
├── calculator.py          # Тестируемый код
├── test_calculator.py     # Тесты (начинаются с test_)
└── pytest.ini             # Конфигурация (опционально)

2. Запуск тестов

КомандаОписание
pytestНайти и запустить все тесты в текущей папке
pytest -vПодробный вывод (имя каждого теста)
pytest -sПоказывать print() во время тестов
pytest -k "sum"Только тесты с "sum" в имени
pytest -m positive_testТолько тесты с маркировкой positive_test
pytest test_calculator.pyОдин конкретный файл
pytest test_calculator.py::test_sumОдин конкретный тест
pytest -hСправка по всем опциям
pytest --markersСписок зарегистрированных маркеров
python -m unittestЗапуск тестов через модуль unittest
python -m unittest discoverАвтопоиск unittest-тестов

3. Маркировки pytest

ДекораторНазначение
@pytest.fixtureОбъявить функцию фикстурой
@pytest.mark.skip(reason="...")Пропустить тест безусловно
@pytest.mark.skipif(condition, reason="...")Пропустить при условии
@pytest.mark.xfail(strict=True, reason="...")Ожидаемый сбой
@pytest.mark.parametrize("x,y", [(1,2), (3,4)])Параметризация теста
@pytest.mark.<custom>Пользовательский маркер

4. Assert и проверка исключений

# Простой assert
assert result == expected

# Проверка с сообщением
assert result == expected, f"Ожидалось {expected}, получено {result}"

# Проверка исключения
with pytest.raises(ArithmeticError):
    calculator.div(10, 0)

# Проверка исключения + текст сообщения
with pytest.raises(ArithmeticError, match="На ноль делить нельзя"):
    calculator.div(10, 0)

# Сравнение float (использовать pytest.approx!)
assert calculator.sum(5.6, 4.3) == pytest.approx(9.9)
# Или: assert round(result, 1) == 9.9

5. Файл pytest.ini

# pytest.ini — конфигурация в корне проекта

[pytest]
# Запускать только функции, в имени которых есть "sum":
python_functions = *sum*

# Регистрация пользовательских маркеров:
markers =
    positive_test: Тесты для позитивных сценариев
    negative_test: Тесты для негативных сценариев
    smoke: Быстрые проверки ключевой функциональности

← К оглавлению урока