К другим статьям

Как использовать pytest дома, чтобы не терять баллы на ЕГЭ по информатике

4

Поделиться
Фон

Делимся разбором самых сложных заданий в Телеграм канале

Перейти в ТГ

Pytest основы: лайфхаки для экзамена без паники

Pytest основы: лайфхаки для экзамена без паникиТема «Pytest для экзамена» звучит как сцена из тревожного...

** изображение создано или обработано с помощью ИИ.

Тема «Pytest для экзамена» звучит как сцена из тревожного сна. Я тоже так думал, когда начинал разбираться с тестированием. Писал автотесты для веба, API и учебных проектов. Однажды перепутал фикстуру с маркером на собеседовании — было больно, но полезно.

На самом экзамене КЕГЭ использовать pytest нельзя (там нет интернета для установки пакетов). Но дома он — лучший тренажер. Он учит вас тому, что критично для заданий 24-27: проверять граничные условия, не верить первому запуску и видеть ошибки до того, как их увидит проверяющая система ФИПИ.

Главная мысль. Экзамен проверяет не магию pytest, а привычки. Нужно понимать, как запускаются тесты, где лежат проверки, что делает assert, зачем нужны фикстуры. Если уложить это в голове, половина страха уходит.

Pytest не требует много церемоний. Пишете функцию с именем test_*, кладёте её в файл test_*.py или *_test.py, запускаете команду pytest. Фреймворк сам находит тесты и показывает результат. В этом есть почти бытовая красота — как чайник: нажал кнопку, получил кипяток.

Что нужно знать для экзамена: запуск, структура тестовых файлов, assert, фикстуры, параметризация (@pytest.mark.parametrize), базовые маркеры (например, @pytest.mark.skip). Не пытайтесь блеснуть редкими плагинами. Сначала закройте основу.

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

Как pytest ищет тесты и почему это спасает баллы

Pytest основы: лайфхаки для экзамена без паникиТема «Pytest для экзамена» звучит как сцена из тревожного...

** изображение создано или обработано с помощью ИИ.

Pytest ищет тесты по определённым правилам: файлы с именами test_*.py или *_test.py, внутри — функции test_* и методы test_* в классах Test*.

Типичная ошибка: ученик пишет тест, но pytest его не видит. На вопрос «как назвал файл?» следует ответ «checks.py». И всё — тест остался незамеченным. Простые правила:

  1. Файл называйте test_math.py (а не math_test.py? можно и math_test.py, но test_math.py надёжнее).
  1. Функцию называйте test_sum_positive_numbers, а не просто sum или check.

Pytest не угадывает намерения — он следует соглашениям об именах. Команды для запуска (лучше отрепетировать заранее):

  1. pytest — все найденные тесты.
  1. pytest -q — краткий вывод.
  1. pytest test_math.py — только тесты из одного файла.
  1. pytest test_math.py::test_sum_positive_numbers — только один конкретный тест.

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

Как читать ошибку? Смотрите трейсбек сверху вниз, но причину ищите в самом низу — там указана строка, где сработал assert. Не нужно панически править весь проект. Сначала найдите конкретное место.

Краткий чек-лист:

  1. Имя файла — test_*.py или *_test.py.
  1. Имя функции — начинается с test_.
  1. Запуск из правильной папки.
  1. При ошибке смотрите последнюю строку трейсбека.

Assert, фикстуры и маркеры на человеческом

Pytest основы: лайфхаки для экзамена без паникиТема «Pytest для экзамена» звучит как сцена из тревожного...

** изображение создано или обработано с помощью ИИ.

Assert. В pytest обычный assert работает как главная проверка — не нужно запоминать десятки специальных методов. Пишете assert result == 4, и при падении pytest сам покажет, чем отличаются значения.

Но assert должен проверять смысл, а не воздух. Плохой тест: assert response. Он может пройти случайно (например, если response — непустая строка или ненулевое число). Лучше проверять конкретные поля: код ответа, значение в JSON, длину списка. Экзамен любит такие мелочи — они показывают, что вы думаете как тестировщик.

Фикстура — это подготовка данных или окружения: временный файл, тестовый список, клиент API. В pytest фикстуру объявляют через декоратор @pytest.fixture. Затем её имя передают аргументом в тест.

Пример из жизни: тесту нужен кофе, но он не хочет каждый раз молоть зерна. Фикстура готовит кофе. Тест просто получает чашку. Если чашка нужна многим тестам, фикстура экономит силы и убирает копирование кода.

Scope фикстур: function (по умолчанию, фикстура создаётся заново для каждого теста), class (один раз на класс), module (один раз на файл), session (один раз на весь запуск). На экзамене обычно хватает знания о scope=»function», не усложняйте без необходимости.

Маркеры помогают группировать тесты. Можно пометить медленные тесты как @pytest.mark.slow, а потом запускать их отдельно или пропускать.

Встроенные маркеры:

  1. @pytest.mark.skip — всегда пропустить тест.
  1. @pytest.mark.skipif(condition) — пропустить, если выполняется условие.
  1. @pytest.mark.xfail — запустить, но ожидать, что тест упадёт (падение не считается ошибкой).

Не путайте skip и xfail. skip говорит «не запускаем». xfail — «запускаем, но падение в рамках ожидаемого». Assert — проверяет конкретный результат. Фикстура — готовит данные для теста. Маркер — управляет набором тестов (пропустить, ожидать падение).

Параметризация и временные ресурсы без магии

Pytest основы: лайфхаки для экзамена без паникиТема «Pytest для экзамена» звучит как сцена из тревожного...

** изображение создано или обработано с помощью ИИ.

Параметризация (@pytest.mark.parametrize) — удобный способ написать один тест вместо нескольких похожих. В тест приходят разные наборы входных данных и ожидаемых результатов.

Пример: проверяем функцию сложения. Передаём пары чисел и ожидаемую сумму. Тест один, случаев несколько. Если один из наборов падает, pytest покажет, какие именно параметры вызвали ошибку.

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

Временные файлы и папки. Встроенная фикстура tmp_path создаёт временную директорию для теста. Это безопаснее, чем писать файлы рядом с проектом: после тестов мусор не остаётся. Но всё равно проверяйте, что именно читаете и куда записываете.

Перехват вывода. Фикстура capsys помогает проверить, что выводится в print (или в stderr). Фикстура monkeypatch позволяет временно изменить переменные окружения или подменить функцию. На базовом экзамене они требуются не всегда, но знать о них полезно.

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

Коротко: параметризуйте одинаковую логику с разными данными; не смешивайте разные сценарии в одном тесте; для временных файлов используйте tmp_path; избегайте зависимости от реальной сети и времени.

Частые вопросы перед экзаменом

Pytest основы: лайфхаки для экзамена без паникиТема «Pytest для экзамена» звучит как сцена из тревожного...

** изображение создано или обработано с помощью ИИ.

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

Почему тест не запускается? Основные причины: неверное имя файла (должно быть test_*.py или *_test.py), имя функции без префикса test_, или вы запускаете команду не в той папке, где лежат тесты.

Можно ли использовать классы для тестов? Да. Название класса должно начинаться с Test, а методы — с test_. Конструктор __init__ в таких классах обычно не пишут.

Что важнее: фикстуры или параметризация? Оба инструмента равно полезны. Фикстуры подготавливают окружение (файлы, данные, подключения). Параметризация позволяет прогонять один тест с разными наборами входных значений.

Надо ли запоминать все ключи командной строки pytest? Нет. Достаточно помнить: pytest, pytest -q (сокращённый вывод), запуск конкретного файла и запуск одного теста через ::.

Что делать, если тест упал (красный результат)? Прочитайте сообщение pytest. Найдите строку, где сработал assert. Посмотрите, какие входные данные использовались. Причина обычно находится именно там.

Можно ли писать несколько assert в одном тесте? Иногда да. Но если проверок много, такой тест сложнее отлаживать. Лучше разделять по смыслу: один тест — одна ключевая проверка.

Как отличить хороший тест от плохого? Хороший тест выполняется быстро, его логика понятна без лишних пояснений, и он проверяет один конкретный сценарий. Кроме того, он не зависит от внешних факторов (сеть, время, случайные данные).

Можно просто выучить готовый шаблон? Можно, но шаблон перестаёт работать при первой же нестандартной задаче.

Надёжнее освоить пять базовых идей: правила именования, работа с assert, назначение фикстур, параметризация и чтение ошибок. Тогда даже новая формулировка не поставит вас в тупик.

Мини-план тренировки на вечер

Pytest основы: лайфхаки для экзамена без паникиТема «Pytest для экзамена» звучит как сцена из тревожного...

** изображение создано или обработано с помощью ИИ.

Перед экзаменом не нужно устраивать марафон на шесть часов. Мозг не станет специалистом по pytest за одну ночь, но может вспомнить главное. Я рекомендую короткую тренировку на 90 минут — без героизма, с водой и нормальным освещением.

Первые 15 минут. Создайте папку и файл test_sample.py. Напишите три простых теста с assert. Один из них должен падать. Запустите pytest и внимательно прочитайте вывод ошибки. Не пролистывайте — сообщение об ошибке учит лучше, чем десять конспектов.

Следующие 20 минут. Добавьте фикстуру, которая возвращает список, словарь или подготовленный объект. Используйте её в двух тестах. Затем специально сломайте возвращаемые данные и посмотрите, как изменится сообщение об ошибке.

Ещё 20 минут. Сделайте параметризацию (@pytest.mark.parametrize). Возьмите функцию, проверяющую длину строки, сумму чисел или нормализацию текста. Прогоните пять наборов данных, один из которых сделайте заведомо неверным. Найдите в выводе pytest, какой именно набор привёл к падению.

Затем 15 минут. Поработайте с маркерами. Добавьте @pytest.mark.skip, @pytest.mark.skipif и @pytest.mark.xfail в отдельные тесты. Запустите файл и посмотрите, какие статусы появятся. Не просто копируйте — проговорите вслух, зачем нужен каждый маркер.

Оставшееся время. Отдайте повторению без компьютера. Закройте редактор и ответьте себе на вопросы: как pytest ищет тесты? чем фикстура отличается от параметризации? когда нужна tmp_path? Если ответ звучит неуверенно, вернитесь к соответствующим разделам тренировки.

Итоговое упражнение:

  1. Напишите тесты для функции, которая делит два числа.
  1. Добавьте проверку деления на ноль.
  1. Создайте фикстуру с набором чисел для тестирования.
  1. Параметризуйте три успешных случая деления.
  1. Один тест пометьте как xfail и запишите для себя причину.

На экзамене. Дышите ровно и не спорьте с выводом pytest. Он сухой, но честный. Сначала проверьте имена файлов и функций, затем данные, затем логику. Такой порядок экономит нервы и время.

Фон

Хочешь начать готовиться, но остались вопросы?

Заполни форму, и мы подробно объясним, как устроена подготовка к ЕГЭ и ОГЭ в ЕГЭLAND

Саша Филатов

    Оставь заявку и мы свяжемся с тобой в течение 15 минут


    не повтори ошибки
    выпускников 2026

    Разберем, где ребята теряли баллы, как сдать ЕГЭ на 270+ и поступить на бюджет в 2027 году

    + Возможность выиграть технику Apple

    ЗАНЯТЬ МЕСТО
    Скидка на 8 марта