Программирование, Питон
Как протестировать код Python с помощью Pytest
Упростите процесс тестирования и улучшите качество кода с помощью Pytest.
Вы устали часами отлаживать свой код и исправлять ошибки, которые можно было бы легко предотвратить? Мы знаем, как неприятно иметь код, который работает неправильно, особенно когда вы вынуждены добиваться результатов. Но не бойтесь! Есть решение: Pytest.
Pytest — это надежная среда тестирования, которая помогает убедиться, что ваш код работает должным образом, даже в разных сценариях и условиях. Интеграция Pytest в ваш код позволяет выявлять и исправлять ошибки до того, как они станут проблемами, экономя ваше время и усилия в долгосрочной перспективе.
В этой статье мы покажем вам, как начать работу с Pytest. От настройки вашей среды до написания тестов, которые охватывают весь ваш код, мы обеспечим вас. Так зачем ждать? Давайте приступим к тестированию и убедимся, что ваш код каждый раз работает безупречно.
Мы рассмотрим:
- Обзор Pytest
- Практический пример
Начнем с описания Pytest.
Обзор Pytest
Pytest — это среда тестирования для Python, ориентированная на простоту и удобство использования. Чтобы установить Pytest, выполните следующую команду:
$ pip install pytest
Pytest следует модульной и расширяемой архитектуре, что позволяет разработчикам организовывать тесты в отдельные тестовые функции или классы.
Когда вы создаете свой тест с помощью Pytest, вы должны выполнить шаги, описанные ниже:
- Создайте новый сценарий
test_<mytest>.py
для своих тестов. Импортируйте Pytest в скрипт. - Определите свои тестовые функции.Тестовая функция — это функция Python, которая проверяет определенный аспект поведения вашего кода. Каждая тестовая функция должна быть автономной, сосредоточенной на одном тестовом примере. Pytest автоматически обнаруживает и выполняет эти тестовые функции.
- Соглашение об именах тестов: каждая тестовая функция должна начинаться с
test_
, чтобы Pytest правильно ее распознал. - Тестовые утверждения. Используйте тестовые утверждения для определения поведения функции. Pytest предоставляет широкий спектр мощных функций утверждения.
- Фикстуры тестирования. Фиксаторы — это функции, которые предоставляют повторно используемые и предварительно настроенные ресурсы или тестовые данные для ваших тестовых функций.
Список некоторых функций активов
Вот некоторые из основных утверждений, предоставленных Pytest:
assert
: Делайте простые утверждения, проверяя, верно ли заданное условие.assertEqual
: Сравните два значения на равенство. Он проверяет, равно ли ожидаемое значение фактическому значениюassertTrue
иassertFalse
: проверьте, является ли заданное условие истинным или ложным.assertRaises
: проверьте, возникает ли конкретное исключение при выполнении кода.assertIn
иassertNotIn
: проверьте, присутствует ли значение или отсутствует в данной коллекции или последовательности.assertAlmostEqual
: сравнение значений с плавающей запятой с заданной степенью точности.assertDictEqual
: проверьте, имеют ли два словаря одинаковый набор пар ключ-значение.assertRaisesRegex
: проверьте, возникает ли конкретное исключение и соответствует ли сообщение об исключении шаблону регулярного выражения.
Теперь, когда вы ознакомились с основными концепциями Pytest, давайте перейдем к практическому примеру.
Практический пример
Давайте представим, что мы хотим создать калькулятор и проверить, правильно ли мы его реализовали. Сначала мы определяем основные функции, а затем пишем тесты.
Основные функции
Основные функции реализуют операции калькулятора. Например, мы можем написать следующий простой код для реализации основных операций:
def add(a, b): return a + b def subtract(a, b): return a - b def multiply(a, b): return a * b def divide(a, b): return a / b
Сохраните файл как calculator.py
.
Тестовые функции
В тот же каталог, где мы сохраняем основные функции, добавьте еще один скрипт для тестов с именем test_calculator.py
. Сначала импортируйте основные функции и библиотеку Pytest:
import pytest from calculator import add
Затем добавьте тест для каждой функции в файле calculator.py
. Для каждой функции добавьте отдельный тест. Например, чтобы протестировать функцию add()
, напишите следующий тест:
def test_addition(): result = add(2, 4) assert result == 6 result = add(-1, 3) assert result == 2 result = add(0, 0) assert result == 0
Точно так же вы можете написать тесты для других функций. Вы можете найти полный пример в этом репозитории GitHub.
Чтобы запустить тесты, откройте терминал и выполните следующую команду из папки, где находятся два скрипта:
pytest
Вы должны получить следующий вывод:
% pytest ================================================== test session starts =================================================== platform darwin -- Python 3.8.10, pytest-7.1.3, pluggy-1.0.0 rootdir: /Users/angelica/CNR/Git/data-science/Tests/Calculator plugins: typeguard-2.13.3, anyio-3.3.4 collected 4 items test_calculator.py .... [100%] =================================================== 4 passed in 0.02s ====================================================
Использование тестовых фикстур
Давайте изменим предыдущий пример, чтобы он поддерживал тестовые приборы. Сначала создайте новый каталог и новый файл с именем calculator.py
. Оберните функции расчета в классе:
class Calculator: def __init__(self): self.result = 0 def add(self, a, b): self.result = a + b return self.result def subtract(self, a, b): self.result = a - b return self.result def multiply(self, a, b): self.result = a * b return self.result def divide(self, a, b): self.result = a / b return self.result
Затем создайте еще один скрипт с именем test_calculator.py
в том же каталоге. Импортируйте Pytest и класс Calculator
в начало скрипта:
import pytest from calculator import *
Используйте декоратор @pytest.fixture
, чтобы определить прибор с именем calculator
. Фикстуры — это функции, предоставляющие повторно используемые ресурсы или действия по настройке для тестов. В этом случае фикстура calculator
создает экземпляр класса Calculator
и возвращает его.
@pytest.fixture def calculator(): # Create an instance of the calculator calc = Calculator() return calc
Теперь мы можем использовать тестовую оснастку calculator
в наших тестах:
def test_multiplication(calculator): result = calculator.multiply(4, 3) assert result == 12 def test_division(calculator): result = calculator.divide(10, 2) assert result == 5
Наконец, запустите тест:
pytest
Вы должны получить следующий вывод:
pytest ================================================== test session starts =================================================== platform darwin -- Python 3.8.10, pytest-7.1.3, pluggy-1.0.0 rootdir: /Users/angelica/CNR/Git/data-science/Tests/CalculatorFixture plugins: typeguard-2.13.3, anyio-3.3.4 collected 4 items test_calculator.py .... [100%] =================================================== 4 passed in 0.01s ====================================================
Вы можете найти полный пример в этом репозитории GitHub.
Краткое содержание
Поздравляем! Вы только что узнали, как добавлять тесты в код Python с помощью Pytest! Использование Pytest в качестве среды тестирования гарантирует надежность и долговечность вашего кода Python!
Использовать Pytest просто: вам нужно написать интуитивно понятные тестовые функции!