Интенсив: pytest основы к ЕГЭ

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

Первый опыт с 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_count
  • def 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

Интеграция с системами контроля и 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

Плюс — можно подключить репетитора. Он открывает отчёт и сразу видит, где ошибка. А если вы хотите полный курс подготовки к ЕГЭ с наставником и автоматическими тестами, загляните в нашу онлайн школу подготовки к ЕГЭ.

Как укрепить навыки до экзамена

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

Полезно устроить мини-соревнование. Друзья выкладывают свои задачи, а вы пишете для них тесты. Потом меняемся ролями. Получается тренировка на чужом коде, а это почти экзаменационная ситуация.

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

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх