Быстрые ссылки
Тестирование является важной частью разработки программного обеспечения. Это помогает обнаруживать ошибки на ранней стадии и снижает вероятность ошибок в будущем.
Pytest — одна из самых популярных сред тестирования в Python. Это позволяет вам писать небольшие читаемые тесты, которые можно масштабировать по мере роста вашего приложения. Узнайте, как настроить и использовать Pytest с кодом Python. Проверять Как установить Python на телефон Android с помощью Termux.
Настройка 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 на 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 онлайн бесплатно.