HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p><strong>Pytest</strong>называют одним из лучших тестовых фреймворков для Python. Это не удивительно, ведь Pytest прост, масштабируем, и, как порой утверждают, "пайтоничен". С его помощью тест-кейсы пишут как функции, а не классы, плюс существуют всевозможные плагины, позволяющие добавлять параллельный запуск, красивые отчеты и т. п. Что ж, давайте создадим первый тестовый проект на Python и напишем первый тест.</p>
1 <p><strong>Pytest</strong>называют одним из лучших тестовых фреймворков для Python. Это не удивительно, ведь Pytest прост, масштабируем, и, как порой утверждают, "пайтоничен". С его помощью тест-кейсы пишут как функции, а не классы, плюс существуют всевозможные плагины, позволяющие добавлять параллельный запуск, красивые отчеты и т. п. Что ж, давайте создадим первый тестовый проект на Python и напишем первый тест.</p>
2 <p>Для начала скачиваем и устанавливаем<strong>Python 3</strong>. Далее создаем для нашего проекта новую директорию:</p>
2 <p>Для начала скачиваем и устанавливаем<strong>Python 3</strong>. Далее создаем для нашего проекта новую директорию:</p>
3 <p>При создании нового Python-проекта неплохим решением является создание виртуального окружения для его зависимостей. Что это даст? Ну, к примеру, у ваших проектов, размещенных на одной машине, будут отсутствовать конфликтующие версии пакетов.</p>
3 <p>При создании нового Python-проекта неплохим решением является создание виртуального окружения для его зависимостей. Что это даст? Ну, к примеру, у ваших проектов, размещенных на одной машине, будут отсутствовать конфликтующие версии пакетов.</p>
4 <p>Для решения поставленной задачи воспользуемся<strong>pipenv</strong>:</p>
4 <p>Для решения поставленной задачи воспользуемся<strong>pipenv</strong>:</p>
5 <p>Теперь можно установить<strong>pytest</strong>для нашего нового проекта:</p>
5 <p>Теперь можно установить<strong>pytest</strong>для нашего нового проекта:</p>
6 <p>Pipenv добавит в проект 2 новых файла: - Pipfile; - Pipfile.lock.</p>
6 <p>Pipenv добавит в проект 2 новых файла: - Pipfile; - Pipfile.lock.</p>
7 <p>Первый служит для определения требования проекта, второй "блокирует" явные версии, которыми этот проект будет пользоваться. Что касается опции "<em>-dev</em>" в команде выше, то она означает, что пакет pytest станет применяться не для деплоя, а для разработки.</p>
7 <p>Первый служит для определения требования проекта, второй "блокирует" явные версии, которыми этот проект будет пользоваться. Что касается опции "<em>-dev</em>" в команде выше, то она означает, что пакет pytest станет применяться не для деплоя, а для разработки.</p>
8 <h2>Пишем первый тест</h2>
8 <h2>Пишем первый тест</h2>
9 <p>Традиционно тесты размещают в директории<em>tests/</em>. Не будем нарушать эту традицию:</p>
9 <p>Традиционно тесты размещают в директории<em>tests/</em>. Не будем нарушать эту традицию:</p>
10 <p>Теперь создадим для первого теста "Пайтон"-модуль с именем<em>test_math.py</em>и сразу добавим следующий код:</p>
10 <p>Теперь создадим для первого теста "Пайтон"-модуль с именем<em>test_math.py</em>и сразу добавим следующий код:</p>
11 <p>Тестам, которые пишутся посредством pytest, как правило, много кода не требуется. Можно сказать, что 2 строчки выше - это уже полноценный тест-кейс, причем он написан как функция, а не как класс. Импорты для этого базового теста не нужны. Вместо кастомных контрольных вызовов применяют нативный оператор контроля Python.</p>
11 <p>Тестам, которые пишутся посредством pytest, как правило, много кода не требуется. Можно сказать, что 2 строчки выше - это уже полноценный тест-кейс, причем он написан как функция, а не как класс. Импорты для этого базового теста не нужны. Вместо кастомных контрольных вызовов применяют нативный оператор контроля Python.</p>
12 <h2>Запускаем тест</h2>
12 <h2>Запускаем тест</h2>
13 <p>Что же, давайте выполним запуск. Для этого поменяем директорию на корневую директорию проекта, а потом вызовем модуль<strong>pytest</strong>:</p>
13 <p>Что же, давайте выполним запуск. Для этого поменяем директорию на корневую директорию проекта, а потом вызовем модуль<strong>pytest</strong>:</p>
14 <p>Ура, первый тест пройден успешно!</p>
14 <p>Ура, первый тест пройден успешно!</p>
15 <p>Как же pytest обнаружил наш первый тест? Сделал он это по имени, то есть pytest ищет тест-функции с названием test_* в модулях с названием test_*.py. Причем интересный момент заключается в том, что pytest не требует в тестовых директориях файла __init__.py.</p>
15 <p>Как же pytest обнаружил наш первый тест? Сделал он это по имени, то есть pytest ищет тест-функции с названием test_* в модулях с названием test_*.py. Причем интересный момент заключается в том, что pytest не требует в тестовых директориях файла __init__.py.</p>
16 <p><em>По материалам: https://blog.testproject.io/2019/07/16/python-test-automation-project-using-pytest/.</em></p>
16 <p><em>По материалам: https://blog.testproject.io/2019/07/16/python-test-automation-project-using-pytest/.</em></p>
17  
17