Программирование, Питон

Как протестировать код Python с помощью Pytest

Упростите процесс тестирования и улучшите качество кода с помощью Pytest.

Вы устали часами отлаживать свой код и исправлять ошибки, которые можно было бы легко предотвратить? Мы знаем, как неприятно иметь код, который работает неправильно, особенно когда вы вынуждены добиваться результатов. Но не бойтесь! Есть решение: Pytest.

Pytest — это надежная среда тестирования, которая помогает убедиться, что ваш код работает должным образом, даже в разных сценариях и условиях. Интеграция Pytest в ваш код позволяет выявлять и исправлять ошибки до того, как они станут проблемами, экономя ваше время и усилия в долгосрочной перспективе.

В этой статье мы покажем вам, как начать работу с Pytest. От настройки вашей среды до написания тестов, которые охватывают весь ваш код, мы обеспечим вас. Так зачем ждать? Давайте приступим к тестированию и убедимся, что ваш код каждый раз работает безупречно.

Мы рассмотрим:

  • Обзор Pytest
  • Практический пример

Начнем с описания Pytest.

Обзор Pytest

Pytest — это среда тестирования для Python, ориентированная на простоту и удобство использования. Чтобы установить Pytest, выполните следующую команду:

$ pip install pytest

Pytest следует модульной и расширяемой архитектуре, что позволяет разработчикам организовывать тесты в отдельные тестовые функции или классы.

Когда вы создаете свой тест с помощью Pytest, вы должны выполнить шаги, описанные ниже:

  1. Создайте новый сценарий test_<mytest>.py для своих тестов. Импортируйте Pytest в скрипт.
  2. Определите свои тестовые функции.Тестовая функция — это функция Python, которая проверяет определенный аспект поведения вашего кода. Каждая тестовая функция должна быть автономной, сосредоточенной на одном тестовом примере. Pytest автоматически обнаруживает и выполняет эти тестовые функции.
  3. Соглашение об именах тестов: каждая тестовая функция должна начинаться с test_, чтобы Pytest правильно ее распознал.
  4. Тестовые утверждения. Используйте тестовые утверждения для определения поведения функции. Pytest предоставляет широкий спектр мощных функций утверждения.
  5. Фикстуры тестирования. Фиксаторы — это функции, которые предоставляют повторно используемые и предварительно настроенные ресурсы или тестовые данные для ваших тестовых функций.

Список некоторых функций активов

Вот некоторые из основных утверждений, предоставленных Pytest:

  1. assert: Делайте простые утверждения, проверяя, верно ли заданное условие.
  2. assertEqual: Сравните два значения на равенство. Он проверяет, равно ли ожидаемое значение фактическому значению
  3. assertTrue и assertFalse: проверьте, является ли заданное условие истинным или ложным.
  4. assertRaises: проверьте, возникает ли конкретное исключение при выполнении кода.
  5. assertIn и assertNotIn: проверьте, присутствует ли значение или отсутствует в данной коллекции или последовательности.
  6. assertAlmostEqual: сравнение значений с плавающей запятой с заданной степенью точности.
  7. assertDictEqual: проверьте, имеют ли два словаря одинаковый набор пар ключ-значение.
  8. 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 просто: вам нужно написать интуитивно понятные тестовые функции!

Вас также могут заинтересовать…