Да. Такой материал получится довольно большим — порядка 60–120 страниц, если оформить как учебное пособие. Ниже — первая глава. Она написана для человека, который никогда не занимался тестированием.
⸻
Методический материал по тестированию в Python
Часть 1. Введение
⸻
Глава 1. Что такое тестирование
Представим, что вы написали программу.
def add(a, b):
return a + b
Вы запускаете:
print(add(2, 3))
Получаете
5
Кажется, что всё работает.
Но возникает вопрос:
А если передать отрицательные числа?
add(-2, 3)
А если передать ноль?
add(0, 5)
А если передать строку?
add("2", "3")
А если передать список?
add([1], [2])
Каждый новый вариант входных данных — это отдельная проверка программы.
Такие проверки называются тестами.
⸻
Что такое тест
Тест — это код, который автоматически проверяет правильность работы другого кода.
Например.
Есть функция.
def square(x):
return x * x
Мы ожидаем:
square(2) == 4
square(3) == 9
square(-5) == 25
square(0) == 0
Можно проверить вручную.
print(square(2))
print(square(3))
print(square(-5))
Но это неудобно.
Лучше написать тест.
assert square(2) == 4
assert square(3) == 9
assert square(-5) == 25
assert square(0) == 0
Если все проверки проходят — ошибок нет.
Если хотя бы одна не проходит — Python сообщит об ошибке.
⸻
Зачем вообще нужны тесты
Представим программу из 10 строк.
Её ещё можно проверить руками.
Теперь представим программу из:
- 500 строк;
- 5000 строк;
- 100000 строк.
После каждого изменения нужно убедиться, что ничего не сломалось.
Проверять вручную невозможно.
Поэтому проверки выполняет компьютер.
⸻
Пример без тестов
Есть функция.
def multiply(a, b):
return a * b
Работает.
Через неделю программист решил “улучшить” код.
Получилось так.
def multiply(a, b):
return a + b
Он случайно допустил ошибку.
Если тестов нет —
ошибка попадёт пользователям.
Если тесты есть —
они сразу покажут проблему.
⸻
Что проверяет тест
Тест всегда отвечает только на один вопрос.
Совпадает ли фактический результат с ожидаемым?
Например.
Ожидаем:
2 + 3 = 5
Получили:
5
Тест успешен.
Если получили
6
значит тест провален.
⸻
Структура любого теста
Любой тест состоит из трёх частей.
- Подготовка данных
a = 2
b = 3
⸻
- Выполнение действия
result = add(a, b)
⸻
- Проверка результата
assert result == 5
Полностью:
def add(a, b):
return a + b
a = 2
b = 3
result = add(a, b)
assert result == 5
Эта схема используется практически во всех тестах.
Её называют
Arrange → Act → Assert
или
Подготовка
↓
Действие
↓
Проверка
⸻
Что такое assert
assert — встроенная инструкция Python.
Она означает:
Проверь, что условие истинно.
Например.
assert 2 + 2 == 4
Ошибок нет.
Теперь
assert 2 + 2 == 5
Получим
AssertionError
То есть Python сообщает:
Проверка не прошла.
⸻
Почему assert удобнее print
Новички часто делают так.
print(square(5))
Получают
25
И считают, что всё хорошо.
Но если проверок тысяча?
25
36
49
64
81
...
Придётся глазами искать ошибки.
Гораздо лучше:
assert square(5) == 25
Если всё хорошо —
не будет никакого вывода.
Если плохо —
Python сразу остановится на ошибке.
⸻
Один тест — одна проверка
Плохо.
assert add(2, 3) == 5
assert add(4, 5) == 9
assert add(10, 10) == 20
assert add(100, 100) == 200
Лучше оформить каждую проверку отдельно (в рамках тестового фреймворка), чтобы при падении было сразу видно, какой именно сценарий не прошёл.
⸻
Какие бывают тесты
В Python существует несколько уровней тестирования.
Unit-тесты
Проверяют одну функцию.
Функция
↓
Тест
Например
def max_number(a, b):
return max(a, b)
Тестируем только её.
⸻
Интеграционные тесты
Проверяют работу нескольких частей программы вместе.
Например.
База данных
↓
API
↓
Бизнес-логика
↓
Ответ пользователю
Проверяется весь путь.
⸻
End-to-End тесты
Имитируют действия пользователя.
Например.
Открыть сайт
↓
Ввести логин
↓
Ввести пароль
↓
Нажать кнопку
↓
Проверить вход
Обычно выполняются через браузер.
⸻
Когда писать тест
Есть два подхода.
Первый.
Написать программу.
Потом написать тест.
Код
↓
Тест
Второй.
Сначала написать тест.
Потом код.
Тест
↓
Код
Этот подход называется TDD (Test-Driven Development).
Его мы рассмотрим позже.
⸻
Основные библиотеки для тестирования
В Python используются:
- unittest — встроенная библиотека.
- pytest — самый популярный инструмент.
- doctest — тесты прямо в документации.
- hypothesis — генерация тестовых данных.
На практике чаще всего используют pytest.
⸻
Итоги главы
После изучения первой главы необходимо понимать:
- что такое тест;
- зачем нужны тесты;
- что проверяет тест;
- как работает assert;
- структуру Arrange → Act → Assert;
- различие между unit-, интеграционными и end-to-end тестами;
- почему pytest является наиболее распространённым инструментом тестирования в Python.
⸻
Такой курс логично построить в следующей последовательности:
- Введение в тестирование.
- assert и первые тесты.
- Библиотека unittest.
- Установка и основы pytest.
- Структура тестового проекта.
- Фикстуры (fixtures).
- Параметризация тестов.
- Моки (unittest.mock, pytest-mock).
- Тестирование исключений.
- Покрытие кода (coverage.py).
- Интеграционные тесты.
- Тестирование REST API.
- Тестирование баз данных.
- Тестирование веб-приложений с Selenium и Playwright.
- Непрерывная интеграция (CI) и автоматический запуск тестов.
- Архитектура крупных тестовых проектов, лучшие практики и типичные ошибки.