🔖 Справочник: команды 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: Быстрые проверки ключевой функциональности