Показаны сообщения с ярлыком pytest. Показать все сообщения
Показаны сообщения с ярлыком pytest. Показать все сообщения

понедельник, 2 июня 2025 г.

pytest, Giga, Python. Code Format, Tools

pytest, Giga, Python. Code Format, Tools

https://giga.chat/link/gcsObBTGeV

pytest — это одна из самых популярных и мощных библиотек для юнит-тестирования в Python.

Она предоставляет богатый набор функций и возможностей для эффективного тестирования и диагностики ошибок в приложениях.

В отличие от стандартного unittest, pytest обладает рядом особенностей,

делающих его предпочтительным выбором для многих разработчиков.

Основные преимущества pytest:

  1. Автоматическое обнаружение тестов:
  2. Pytest автоматически находит тесты, основываясь на соглашениях об именовании.
  3. Любой файл, класс или метод, начинающийся с префикса test_, рассматривается как тест.
  4. Поддержка параметризированных тестов:
  5. Возможность передачи аргументов в тесты через декораторы,
  6. что упрощает написание однотипных тестов с разными входными параметрами.
  7. Утверждения (Assertions):
  8. Pytest упрощает использование утверждений (assert), отображая подробное сообщение об ошибке при сбоях.
  9. Модульность и расширяемость:
  10. Система плагины позволяет расширить функциональность pytest практически неограниченно.
  11. Есть множество готовых плагинов для тестирования REST API, базы данных, фронтенда и многого другого.
  12. Параллельное выполнение тестов:
  13. Можно запустить несколько тестов одновременно, что значительно ускоряет тестирование больших проектов.
  14. Работа с фикстурами (fixtures):
  15. Специальные объекты, предназначенные для инициализации общих ресурсов
  16. (например, подключения к БД, временные файлы),
  17. которые затем повторно используются несколькими тестами.

Пример простого теста с pytest:

def sum(a, b):
    return a + b

def test_sum():
    assert sum(1, 2) == 3
    assert sum(-1, 1) == 0

Параметризированные тесты:

import pytest

@pytest.mark.parametrize("num, expected", [(1, 1), (-1, -1)])
def test_abs(num, expected):
    assert abs(num) == expected

Работа с фикстурами:

import pytest

@pytest.fixture
def sample_data():
    return {"key": "value"}

def test_fixture(sample_data):
    assert isinstance(sample_data, dict)

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

  • Выполнить все тесты: pytest
  • Выполнить конкретный тест: pytest test_module.py::TestClass::test_method
  • Параметры для детализации вывода: pytest -v (verbose mode), pytest -q (quiet mode), pytest --tb=line (краткий вывод traceback).

Лучшие практики использования pytest:

  • Всегда старайтесь разбивать большие тесты на маленькие.
  • Названия тестов должны ясно указывать на их назначение.
  • Старайтесь использовать параметризацию там, где это уместно.
  • Периодически запускайте тесты параллельно, чтобы сократить время исполнения.

Заключение:

Pytest — это мощная и удобная библиотека для тестирования Python-приложений.

Её богатство возможностей и легкость освоения делают её незаменимым инструментом для разработчиков,

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

воскресенье, 1 июня 2025 г.

pytest, Giga

pytest, Giga

https://giga.chat/link/gcsJhXtnzn Python, Project Structure

pytest — это популярный и мощный фреймворк для написания и запуска автоматизированных тестов на языке Python.

Предназначен для создания модульных (unit), интеграционных и функциональных тестов,

обеспечивающих надёжность и устойчивость разрабатываемого программного обеспечения.

Основные преимущества PyTest:

  1. Минималистичный синтаксис:
  2. простота и лаконичность написания тестов,
  3. отсутствие необходимости наследования классов или специальных аннотаций.
  4. Расширяемость:
  5. плагины расширяют базовые возможности фреймворка, добавляют дополнительные типы отчетов,
  6. фикстуры и интеграции с внешними сервисами.
  7. Параллельное исполнение:
  8. поддержка параллельного запуска тестов, ускоряющая выполнение больших тестовых наборов.
  9. Автоматическая фиксация данных:
  10. фикстуры (fixtures) позволяют централизованно определять общие ресурсы и повторно использовать их в тестах.
  11. Маркировка тестов:
  12. возможность помечать тесты специальными тегами (например, slow, network, database),
  13. что позволяет избирательно запускать определённые группы тестов.
  14. Удобная обработка исключений:
  15. поддержка утверждений (assertions) и аккуратная трассировка стека, что облегчает диагностику возникающих ошибок.
  16. Гибкая организация тестов:
  17. группировка тестов в классы и модули обеспечивает чёткую организацию и логичность тест-кодов.

Базовая структура теста в PyTest:

Рассмотрим простой пример теста с использованием assert:

# test_example.py

def multiply(a, b):
    return a * b

def test_multiply_positive_numbers():
    assert multiply(2, 3) == 6

def test_multiply_negative_numbers():
    assert multiply(-2, -3) == 6

Особенности PyTest:

  • Asserts: стандартные утверждения Python работают как обычные assert-выражения.
  • PyTest автоматически выводит подробное сообщение об ошибке, если утверждение неверно.
  • Фикстуры: механизм повторного использования ресурсов (например, базы данных,
  • временных файлов и сетевых подключений).
  • Фикстуры создаются с помощью декоратора @pytest.fixture():
@pytest.fixture
def sample_fixture():
    yield {'key': 'value'}

def test_with_fixture(sample_fixture):
    assert sample_fixture['key'] == 'value'
  • Параметры командной строки:
  • возможность выбора конкретных тестов для запуска с помощью аргументов, например,
  • запустить только тесты, отмеченные тегом slow:
pytest -m slow

Распространённые плагины для PyTest:

  • pytest-cov: измерение покрытия кода тестами.
  • pytest-bdd: поддержка BDD-стиля (Behavior Driven Development).
  • pytest-timeout: ограничение времени выполнения отдельных тестов.
  • pytest-xdist: параллельный запуск тестов.

Советы по эффективному использованию PyTest:

  • Регулярно запускайте тесты после внесения изменений в код.
  • Организуйте тесты в отдельные модули и классы,
  • соблюдая принцип DRY (Don't Repeat Yourself).
  • Используйте фикстуры для уменьшения дублирования кода.
  • Применяйте маркировки тестов для разделения регрессий, длительных тестов и функциональности,
  • зависящей от внешних сервисов.

Итоги:

PyTest — это мощный и гибкий инструмент для автоматического тестирования Python-программ.

Он сочетает простоту реализации тестов с мощью расширения функционала и возможностями автоматизации,

что делает его незаменимым помощником при обеспечении стабильности и надежности разрабатываемых приложений.