Как настроить и запустить свой первый тест кода Python с помощью Pytest

Тестирование является важной частью разработки программного обеспечения. Это помогает обнаруживать ошибки на ранней стадии и снижает вероятность ошибок в будущем.

Pytest — одна из самых популярных сред тестирования в Python. Это позволяет вам писать небольшие читаемые тесты, которые можно масштабировать по мере роста вашего приложения. Узнайте, как настроить и использовать Pytest с кодом Python. Проверять Как установить Python на телефон Android с помощью Termux.

Как настроить и запустить свой первый тест кода Python с помощью Pytest

Настройка Pytest

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

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

python -m venv tests

Это создаст новую виртуальную среду, называемую тестами, в вашем текущем каталоге. Чтобы активировать среду, выполните эту команду, если вы используете Linux или Mac:

source tests/bin/activate

Для Windows выполните эту команду:

tests\\Scripts\\activate

Чтобы установить Pytest, вы можете использовать менеджер пакетов Python pip с помощью этой команды в Терминале:

pip install pytest

Если у вас нет пункта, не волнуйтесь; Вы можете установить Pip на операционные системы Windows و Mac и Linux.

Выполните следующую команду, чтобы проверить, правильно ли вы установили Pytest.

pytest — version

Эта команда должна вернуть номер установленной версии.

Создайте свой первый тест

Рассмотрим следующую функцию, которая складывает два числа и возвращает результат.

def add_numbers(a, b):

 return a + b

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

Один из первых написанных вами тестов должен проверить, возвращает ли функция ожидаемый результат. Для этого вы можете использовать ключевое слово assert, чтобы сравнить фактический результат функции с ожидаемым результатом. В случае с функцией add_numbers тестовая функция может выглядеть так:

def test_add_numbers():
 assert add_numbers(2, 3) == 5
 assert add_numbers(-1, 1) == 0
 assert add_numbers(0, 10) == 10

Эта тестовая функция включает три утверждения, каждое из которых сравнивает выходные данные функции add_numbers с ожидаемым значением. Первый тест проверяет, что сложение 2 и 3 возвращает 5, второй тест проверяет, что сложение -1 и 1 возвращает 0, а третий проверяет, что сложение 0 и 10 возвращает 10.

Как запускать тесты с Pytest

После написания тестов следующим шагом будет их запуск. Чтобы сделать это с помощью Pytest, перейдите в каталог, содержащий ваш тестовый файл, и выполните команду pytest:

pytest

Если все работает как положено, вы увидите сообщение о том, что все тесты прошли успешно. Однако, если какое-либо из утверждений не выполняется, Pytest сообщит об ошибке и покажет вам входные значения, вызвавшие сбой.

Например, допустим, вы запускаете следующую тестовую функцию для функции add_numbers:

def test_add_numbers():
 assert add_numbers(2, 3) == 6
 assert add_numbers(-1, 1) == 0
 assert add_numbers(0, 0) == 0

Первое утверждение завершится ошибкой, так как ожидаемое значение равно 6, а фактическое значение равно 5 (сумма 2 и 3). Pytest вернет следующее сообщение:

Как настроить и запустить свой первый тест кода Python с помощью Pytest

Это сообщение показывает вам входные значения, которые вызвали значение, а также сообщает вам, каким должно быть фактическое значение. Это упрощает быстрое выявление и исправление ошибок в вашем коде. Проверять Как установить и кодировать Python на Android с Pydroid 3.

Используйте Pytest.raises для перехвата исключений

Теперь давайте напишем тест, чтобы покрыть один из крайних случаев функции add_numbers. Когда в функцию передается нечисловой аргумент, такой как None, Python должен вызвать ошибку TypeError.

Вы уже должны обрабатывать исключения в своем коде Python, и вы также можете проверить, правильно ли ваш код обрабатывает их.

Для этого скопируйте следующую тестовую функцию в свой файл. Менеджер контекста использует pytest.raises, чтобы проверить, вызывает ли вызов add_number с «None» ошибку TypeError.

import pytest

def test_add_numbers_with_invalid_inputs():
 with pytest.raises(TypeError):
 add_numbers(None, 2)

Затем запустите Pytest из командной строки. Если исключение не появится, тест завершится неудачно.

Вы можете пойти дальше и проверить детали сообщения об исключении. Менеджер контекста создает объект ExceptionInfo с подробностями.

Например, в этой тестовой функции подтвердите сообщение об исключении следующим образом:

def test_add_numbers_with_invalid_inputs():
 with pytest.raises(TypeError) as exc_info:
 add_numbers(None, 2)

assert exc_info.value.args[0] == “unsupported operand type(s) for +: ‘NoneType’ and ‘int’”

Если сообщение не соответствует сообщению в тесте, Pytest укажет на сбой.

Как использовать сертифицированное тестирование для одновременного тестирования нескольких входных данных

Вместо ручного вызова функции с несколькими записями, например:

def test_add_numbers():
 assert add_numbers(2, 3) == 6
 assert add_numbers(-1, 1) == 0
 assert add_numbers(0, 0) == 0

Pytest предоставляет функцию параметризованного тестирования, которая позволяет вам делать то же самое проще. Вот как переписать приведенную выше тестовую функцию:

import pytest

@pytest.mark.parametrize(“a,b,expected”, [
 (2, 3, 5),
 (-1, 1, 0),
 (0, 0, 0)
])
def test_add_numbers(a, b, expected):
 assert add_numbers(a, b) == expected

Как запустить несколько тестов

Пока я написал только два теста для функции add_numbers. Для более сложных функций с большим количеством тестов вы можете сгруппировать их в класс.

Например, вот как создать тестовый класс для функции test_addition.

class TestAddFunction:
 @pytest.mark.parametrize(“a, b, expected”, [
 (2, 3, 5),
 (-1, 1, 0),
 (0, 0, 0),
 ])
 def test_addition_with_numbers(self, a, b, expected):
 assert add_numbers(a, b) == expected

def test_add_numbers_with_invalid_inputs(self):
 with pytest.raises(TypeError) as exc_info:
 add_numbers(None, 2)
 assert exc_info.value.args[0] == “unsupported operand type(s) for +: ‘NoneType’ and ‘int’”

Обратите внимание, что вам нужно добавить к имени класса префикс «Test», чтобы Pytest мог идентифицировать его как тестовый класс и запустить его. Проверять Практические репозитории GitHub, которые научат вас Python.

Pytest имеет много функций

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

Кроме того, вы можете интегрировать Pytest в конвейер CI и автоматически и постоянно запускать тесты при изменении кода. Вы можете просмотреть сейчас Лучшие сайты для изучения Python онлайн бесплатно.

Перейти к верхней кнопке