%

начни
бесплатно

14:32:48

0 дней

%

Все статьи
Гайд

Код, который проверяет код: автоматизируем тесты на Python как профи

Гайд для новичков в автоматизации тестирования. Создаем первые сценарии, учимся работать с unittest и pytest и настраиваем автозапуск при изменениях кода

Автоматизируем тестирование ПО с Python
Автоматизируем тестирование ПО с Python

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

Основы тестирования

Существует несколько видов тестов:

  • Модульные тесты проверяют отдельные функции или классы. Это самый базовый и популярный уровень автоматизации.

  • Интеграционные тесты следят за тем, чтобы разные части программы корректно работали вместе.

  • End-to-end тесты имитируют реальные сценарии использования приложения, например действия пользователя в веб-интерфейсе.

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

Настройка окружения для тестирования

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

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

Полезной практикой является использование виртуальных окружений. Они позволяют хранить все зависимости проекта отдельно от системных библиотек. Так вы можете работать сразу с несколькими проектами и не бояться, что обновление одной библиотеки повлияет на другой проект. Создание виртуальной среды выполняется так:

python -m venv venv
source venv/bin/activate   # для Linux и macOS
venv\Scripts\activate      # для Windows

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

pip install pytest

Теперь окружение готово, и можно переходить к практике.

Первый автоматизированный сценарий проверки

Чтобы понять принцип работы, начнем с простого примера. Допустим, у нас есть функция, складывающая два числа:

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

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

import unittest


class TestMath(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(2, 3), 5)
        self.assertEqual(add(-1, 1), 0)


if __name__ == "__main__":
    unittest.main()

Такой сценарий можно запускать многократно, и он всегда даст одинаковый результат. Если что-то сломается, система сразу сообщит об этом. Это и есть суть автоматизации — избавление от рутинных ручных проверок.

Нет времени читать статью?

Получите ответы от практикующих специалистов на бесплатном занятии в вашем городе

Нажимая на кнопку, я соглашаюсь на обработку персональных данных

Переходим на pytest

Хотя unittest достаточно мощный и входит в стандартную библиотеку, его стиль ближе к классической объектно-ориентированной модели и может казаться громоздким. Многие разработчики предпочитают pytest, так как он позволяет писать проверки короче и понятнее.

Например, тот же сценарий проверки через pytest будет выглядеть так:

def test_add():
    assert add(2, 3) == 5
    assert add(-1, 1) == 0

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

На курсе Академии ТОП «Тестировщик программного обеспечения» вы научитесь проверять IT-продукты
на прочность, находить ошибки и дефекты, чтобы люди получали надежный и работоспособный сервис. Учебная программа на 90% состоит из практики, направленной на закрепление навыков работы с инструментами тестирования кода и поиска багов. 

Организация структуры проекта

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

project/
    app/
    tests/
        test_math.py

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

Автоматизация запуска проверок

Запускать проверки можно вручную, используя команду:

pytest -v

Ключ -v включает подробный вывод, показывающий, какие именно сценарии выполнялись и каков результат. Однако со временем целесообразнее подключать процесс автоматической проверки при каждом изменении кода.

Системы непрерывной интеграции, такие как GitHub Actions или GitLab CI/CD, позволяют настроить выполнение сценариев при каждом коммите или перед слиянием веток. Это снижает риск того, что в основную ветку попадет нерабочий код. Вы получаете мгновенную обратную связь и можете исправить проблему до того, как она отразится на других участниках команды.

Для локального тестирования в разных версиях Python удобно использовать инструмент tox. Он позволяет запускать тесты в изолированных средах, имитируя поведение проекта на разных интерпретаторах и с разными зависимостями. Это особенно полезно для библиотек и фреймворков, которые должны работать в разных окружениях.

Мы собрали подборку курсов для людей с разным уровнем подготовки

Хотите стать тестировщиком?

Мы собрали подборку курсов для людей с разным уровнем подготовкиПерейти

Советы для эффективной автоматизации

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

  • Один сценарий — одна проверка. Если внутри функции несколько сравнений, и одно из них падает, остальные могут запутать вывод. Лучше разделить их на отдельные сценарии.

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

  • Независимость. Сценарии не должны влиять друг на друга. Если один из них изменил данные, это не должно ломать остальные.

  • Покрытие кода. Используйте инструменты вроде coverage.py, чтобы узнать, какие участки программы остаются без проверки. Полное покрытие происходит редко, но важно стремиться к высоким показателям.

Перед тем, как тестировать ПО, сначала нужно написать сам код. На курсе Академии ТОП «Python-разработчик с нуля до PRO», вы освоите язык на продвинутом уровне, научитесь создавать приложения и получите все необходимые навыки востребованного разработчика. 

Частые вопросы

Чем отличается unittest от pytest?
Unittest встроен в Python и основан на классах, тогда как pytest предлагает более простой синтаксис и дополнительные возможности, поэтому он удобнее для повседневной работы.

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

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

Можно ли запускать проверки автоматически при изменении кода?
Да, это стандартная практика. Системы CI/CD, такие как GitHub Actions или GitLab CI, позволяют настроить запуск при каждом коммите.


Автоматизация проверок в Python — это простой и в то же время мощный инструмент, который помогает делать код надежнее. Начав с базовых сценариев, вы постепенно сможете перейти к более сложным подходам, включая фикстуры, параметризацию и интеграцию с CI/CD. Чем раньше вы внедрите проверку в рабочий процесс, тем спокойнее будет развиваться проект и тем меньше времени придется тратить на отладку неожиданных ошибок.

Хотите лучше разобраться в вопросе?

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

Нажимая на кнопку, я соглашаюсь на обработку персональных данных

Мы свяжемся с вами в течение дня

💫

Перезвоним и поможем подобрать курс

👍

Запишем на бесплатные пробные занятия

💯

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