🔖 Справочник — pytest и unit-тестирование

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

КомандаОписание
pip install pytestУстановить pytest
pip show pytestПроверить версию pytest
python -m venv venvСоздать виртуальное окружение
venv\Scripts\activateАктивировать окружение (Windows)
deactivateДеактивировать окружение

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

КомандаОписание
pytestЗапустить все тесты в текущей директории
pytest -vПодробный вывод (verbose)
pytest -k "sum"Запустить тесты, в имени которых есть «sum»
pytest -m positive_testЗапустить тесты с маркером positive_test
pytest --markersПоказать зарегистрированные маркеры
pytest -hСправка по всем опциям pytest
pytest test_calculator.pyЗапустить конкретный файл
pytest test_calculator.py::test_sumЗапустить конкретный тест

Соглашения об именовании

ЧтоПравилоПример
Файл тестовНачинается с test_ или заканчивается на _testtest_calculator.py
Функция тестаНачинается с test_def test_sum_positive():
ФикстураДекоратор @pytest.fixturedef calculator():

Фикстуры

КодОписание
@pytest.fixtureОбъявить функцию фикстурой
@pytest.fixture(scope="module")Фикстура для всего модуля
@pytest.fixture(scope="session")Фикстура для всей сессии
conftest.pyФайл с общими фикстурами для директории

Проверки (assertions)

КодОписание
assert value == expectedПроверка равенства
assert value != expectedПроверка неравенства
assert value is NoneПроверка на None
assert value in collectionПроверка вхождения
pytest.raises(ExcType)Ожидаемое исключение
pytest.approx(expected)Сравнение float с погрешностью

Маркировки

МаркерОписание
@pytest.mark.skip(reason="...")Безусловный пропуск
@pytest.mark.skipif(condition, reason="...")Условный пропуск
@pytest.mark.xfailОжидаемый провал
@pytest.mark.xfail(strict=True)Строгий xfail: xpass считается ошибкой
@pytest.mark.имя_маркераПользовательский маркер

Параметризация

КодОписание
@pytest.mark.parametrize('a,b', [(1,2),(3,4)])Запустить тест с каждым набором
pytest -vПоказать все варианты параметров

Конфигурация pytest.ini

# pytest.ini
[pytest]
python_functions = *sum*

markers =
    positive_test: Тесты для позитивных сценариев
    negative_test: Тесты для негативных сценариев