Первый опыт с pytest в задачах ЕГЭ

Фраза «pytest основы к ЕГЭ» звучит необычно, но идея проста. Школьник пишет программу, запускает тесты и сразу видит, пройдёт ли решение на автоматической проверке ФИПИ. Такой подход экономит нервы и помогает удерживать мотивацию. Для старта хватит Python 3.11, самого pytest и трёх-пяти тренировочных задач из открытого банка. Ставим цель: научиться проверять код локально так же строго, как это делает экзаменационная система.
Появляется естественный вопрос: что именно тестировать? В работах ЕГЭ встречаются скрипты, функции и целые классы моделирования. Даже простая задача «найти количество простых делителей» превращается в источник багов, если не протестировать крайние числа. Сразу пишем короткий тест на входы 2, 97 и 10 000. Если всё зелёное, идём дальше.
Главное в начале — ритуал «красный-зелёный-рефакторинг». Сначала тест падает, затем код доводится до правильного ответа, после чего вычищаются лишние конструкции. Так мозг запоминает алгоритм решения и автоматическую проверку.
pytest основы к ЕГЭ: зачем это нужно
Школьники обычно прогоняют программу на двух-трёх примерах из условия. Такой минимум обманчив. Pytest позволяет за пять минут составить батарею проверок, охватывающих граничные и случайные случаи. Результат — уверенность, что на экзамене не всплывёт неожиданный ноль или отрицательное число.
Есть ещё педагогический плюс. Формальная запись тестов заставляет формулировать ожидаемый результат, а значит, глубже понимать задачу. Например, при поиске периодичности последовательности полезно явно записать, что f(0)=1 и f(60)=1 — сразу видно, где цикл.
Подготовка через тесты тренирует краткую, но точную аргументацию. Экзаменатор читает решение, видит чистый код без «лишних костылей» и выдаёт полный балл. А вы уже двигаетесь к следующему номеру.
Установка и минимальная настройка окружения

Устанавливаем Python из python.org, добавляем его в PATH. Затем пишем в терминале: pip install pytest. Проверяем: pytest --version выводит номер сборки. Создаём папку ege_tests, а внутри файл test_sample.py. Внутри размещаем первую проверку:
from solution import divisors_countdef test_small(): assert divisors_count(6) == 4
Теперь кладём рядом solution.py и пишем функцию. Команда pytest -q выдаст progress bar. Дополнительная настройка почти не нужна, но файл pytest.ini с опцией addopts = -q сделает вывод короче, что удобно на ноутбуках с маленьким экраном.
Создаём тесты для классических задач
Рассмотрим задачу «Самый длинный повторяющийся фрагмент строки». Сначала пишем функцию longest_repeat(s). Дальше формируем тестовый набор:
- строка «AAAAA» даёт 4;
- «ABCABC» даёт 3;
- пустая строка даёт 0.
Три проверки покрывают граничные случаи. Если времени мало, используем параметризацию:
@pytest.mark.parametrize(
"text,expected",
[("AAAAA",4),("ABCABC",3),("",0)]
)
def test_repeat(text, expected):
assert longest_repeat(text) == expected
Один тест вместо трёх, а информативность не падает. При подготовке к ЕГЭ набор можно расширять по мере решения новых вариантов.
Параметризация: экономим время на скучной рутине

Групповой тест избавляет от копипаста. Например, задача №27 требует перебрать пары чисел. Мы формируем список файлов с примерами и передаём пути в функцию чтения:
files = Path("samples").glob("*.txt")
@pytest.mark.parametrize("case", files)
def test_case(case):
assert solve(case) == answer_from(case)
Pytest сам создаст случайный порядок, что помогает ловить зависимости между тестами. Параметризация также облегчает «прогрев» сложных алгоритмов — достаточно добавить один элемент в список, и проверка расширится автоматически. Такой подход ценен, когда решается тридцатый вариант подряд и концентрация падает.
Разбор типичных ошибок и способы их ловить
Самый частый промах — неверный тип возвращаемого значения. Возвращается строка, а ожидается число. Лечится строгой проверкой isinstance в тестах. Второе место занимает IndexError в циклах по строке. Совет: добавьте тест с пустым вводом, ошибка исчезнет.
Меньше, но больно, встречаются нарушения времени. Если функция работает >1 секунды на 10 000 элементов, она проваливается на ЕГЭ. В pytest есть отметка @pytest.mark.timeout(1). Ставим её и видим реальную картину.
Ошибки округления? Используйте math.isclose или pytest.approx, задав нужную точность. Тогда тест не упадёт из-за мелких отклонений.
Интеграция с системами контроля и CI

Git — лучший друг абитуриента. Создаём репозиторий, пушим задачи, запускаем pytest в GitHub Actions. Каждый коммит получает зелёную галочку или красный крестик. Такой сигнал дисциплинирует и не даёт забыть файл с новым решением.
Для облачного запуска нужен простой файл workflow:
name: ege
on: push
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.11'
- run: pip install -r requirements.txt
- run: pytest -q
Плюс — можно подключить репетитора. Он открывает отчёт и сразу видит, где ошибка. А если вы хотите полный курс подготовки к ЕГЭ с наставником и автоматическими тестами, загляните в нашу онлайн школу подготовки к ЕГЭ.
Как укрепить навыки до экзамена
Решайте задачу ежедневно и сразу пишите тест. К концу недели появится десяток сценариев, которые пересекают большую часть тем экзамена. Раз в два дня запускайте все тесты и смотрите, где упало. Так вы снимаете стресс и укрепляете память.
Полезно устроить мини-соревнование. Друзья выкладывают свои задачи, а вы пишете для них тесты. Потом меняемся ролями. Получается тренировка на чужом коде, а это почти экзаменационная ситуация.
Наконец, за несколько дней до ЕГЭ заморозьте репозиторий. Не добавляйте новых функций, фиксируйте только баги. Запустите тесты последний раз на свежем ноутбуке, убедитесь, что всё зелёное, и спокойно идите сдавать.