Рубрики
Без рубрики

Тестовая разработка с помощью PyTest – Часть 2

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

Автор оригинала: Max Ong Zong Bao.

Добро пожаловать обратно в часть 2 тестовой разработки с PyTest.

Для второй части TDD с Pytest.

Я бы описал структуру проекта , в которой будут находиться ваши тестовые случаи.

Создание тестовых случаев в виде класса или функции под pytest.

Прежде чем перейти к части 2, перейдите к части 1 серии.

Предполагается, что для этой серии используется система Linux.

Пожалуйста, используйте вариант Linux, такой как Ubuntu или облачную IDE, такую как Codenvy запуск виртуального контейнера Linux.

Всякий раз, когда вы создаете тестовые случаи для своей программы Python.

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

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

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

Для меня я бы предпочел централизованное расположение для моих тестовых случаев в каталоге ** tests**.

Поскольку это сокращает количество времени, которое разработчик должен искать и тестировать различные компоненты программы.

Если бы вы читали Python Testing with Pytest by Brian Okken .

Он сделал комбинацию того и другого для укусного потребления в каждой главе и поместил тестовые случаи в конкретный тестовый каталог.

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

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

Когда вы только начинаете учиться создавать тестовые случаи с помощью Pytest.

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

Встроенный тестовый случай как функция

Создайте файл с именем tutorial.py и с функцией test_input :

touch tutorial.py

tutorial.py “‘python

def test_input(): assert a assert b

“Теперь выполните следующую команду в вашем собственном терминале.

pytest tutorial.py
pytest 1

Это пример создания тестовых случаев в виде функции .

Когда файл содержит более определенного количества строк. Он должен быть отделен для удобства обслуживания.

Тестовые случаи в отдельном файле

Теперь рефакторинг этого тестового случая в отдельный файл с именем test_tutorial.py который был создан во время первой части серии:

Теперь рефакторинг этого тестового случая в отдельный файл с именем || test_tutorial.py || который был создан во время первой части серии:

import tutorial


def test_input():
    a = tutorial.a
    b = tutorial.b

    assert a >= 0
    assert b >= 0

Теперь выполните предыдущую команду.

pytest test_tutorial.py
pytest 2

Помимо импорта tutorial.py и добавление объявления переменной как части функции.

Тестовые случаи в классе

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

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

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

Теперь давайте реорганизуем предыдущий тестовый случай функции в функцию класса с именем Test Input :

import tutorial


class TestInput:
    def test_a_input(self):
        a = tutorial.a

        assert type(a) != float
        assert a >= 0

    def test_b_input(self):
        b = tutorial.b

        assert type(b) != float
        assert b >= 0

Теперь давайте запустим команду pytest с параметром -v (verbose) , включенным в недавно рефакторизованном тестовом примере класса.

pytest -v test_tutorial.py
pytest 3

У вас должно быть два тестовых случая, которые являются test_a_input & test_b_input под Test Input .

Теперь для этого Test Input класс используется для проверки входных параметров программы под названием tutorial.py .

Мы могли бы создать и протестировать функцию в tutorial.py вызывается getsum , который вычисляет результат параметра a и b как другой класс:

Мы могли бы создать и протестировать функцию в || tutorial.py || вызывается || getsum||, который вычисляет результат параметра || a || и || b || как другой класс:

a = 0
b = 0


def getsum(a, b):
    return a + b

Мы могли бы создать и протестировать функцию в || tutorial.py || вызывается || getsum||, который вычисляет результат параметра || a || и || b || как другой класс:

import tutorial


class TestInput:
    def test_a_input(self):
        a = tutorial.a

        assert type(a) != float
        assert a >= 0

    def test_b_input(self):
        b = tutorial.b

        assert type(b) != float
        assert b >= 0


class TestGetSum:
    def test_addition(self):
        assert tutorial.getsum(2, 8) == 10

Теперь давайте выполним следующую команду, которая приводит к 3 тестовые случаи под 2 занятия.

pytest -v test_tutorial.py
pytest 4

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

Я надеюсь, что эта статья даст вам представление о том, как должны располагаться ваши тестовые случаи для структуры проекта.

Наряду с пониманием разницы создания тестовых случаев как функции или класса для PyTest .

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

Если вам понравилась моя статья, пожалуйста подпишитесь на рассылку Max Adventurer’s Newsletter для потрясающего контента, на который я натыкаюсь еженедельно в Python , Startup и Web Development .

Вы также можете следовать за мной, чтобы получить последнее обновление моей статьи о CodeMentor

Этот пост был первоначально опубликован в блоге Макса по адресу Test-Driven Development With PyTest – Part 2: Reading Time 4 Mins and Photo by Joyce McCown on Unsplash