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

Тестирование кода с Python и pytest

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

Тестирование вашего кода дает множество преимуществ. Это увеличивает уверенность в том, что код ведет себя так, как вы ожидаете, и гарантирует, что изменения в вашем коде не вызовут регрессии. Написание и сопровождение тестов - это тяжелая работа, поэтому вы должны использовать все имеющиеся в вашем распоряжении инструменты, чтобы сделать ее как можно более безболезненной. Pytest - один из лучших инструментов, которые вы можете использовать для повышения производительности тестирования. В данной статье рассмотрим: какие преимущества предлагает pytest и каковы его отличия от встроенного модуля тестирования в Python. Для иллюстрации концепции тестирования кода, мы будем использовать достаточно простые примеры, которые вместе с тем позволяют понять суть.

Установка pytest.

Чтобы выполнить некоторые примеры из статьи, нам необходимо установить pytest.Как и большинство пакетов Python, мы можем установить pytest в виртуальной среде из PyPI с помощью pip:

python -m pip install pytest

Как протестировать код?

Напишем простую программу по выполнению некоторого действия и назовем ее program.py.


def func(x):
    return x + 1

Для начала выполним тестирование встроенным в Python модулем unittest.

# unittest.py


from unittest import TestCase
import program

class TryTesting(TestCase):
    def test1(self):
        self.assertTrue(program.func(4) == 8)
        
>>>python -m unittest discover

'''
вывод
Failure
Traceback (most recent call last):
  File "unittest.py", line 8, in test2
    self.assertTrue(program.func(4) == 8)
AssertionError: False is not true

'''

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

И вместо написания довольно большого количества строк кода в модуле pytest предусмотрено ключевое слово assert:


# my_pytest.py
import program

def test1():
    assert program.func(6) == 70


>>>pytest my_pytest.py
'''
вывод

my_pytest.py:4: AssertionError
=================================================== short test summary info ===================================================
FAILED my_pytest.py::test1 - assert 7 == 70
====================================================== 1 failed in 1.14s ======================================================

'''

Таким образом, просто введя команду pytest и название тестового файла в терминале мы получим сообщение с указанием на то, на сколько корректно выполнилась программа.