Проверка заданий с помощью утилиты pyneng#
Начиная с раздела «4. Типы данных в Python» для проверки заданий используются автоматические тесты. Они помогают проверить все ли соответствует поставленной задаче, а также дают обратный отклик по тому, что не соответствует задаче. Как правило, после первого периода адаптации к тестам, становится проще делать задания с тестами.
Помимо перечисленных выше положительных моментов, в тестах также можно посмотреть какой итоговый результат нужен: прояснить структуру данных и мелочи, которые могут влиять на результат.
Для запуска тестов используется pyneng.py
- скрипт, который находится в
репозитории заданий.
Где решать задания#
Задания надо выполнять в подготовленных файлах. Например, в разделе 04_data_structures есть задание 4.3. Чтобы выполнить его надо открыть файл exercises/04_data_structures/task_4_3.py и выполнять задание прямо в этом файле после описания задания.
Это важно потому что тесты привязаны к тому, что задания выполняются в определенных файлах и в определенной структуре каталогов. Кроме того, что задания надо делать в подготовленных файлах, обязательно скопировать себе весь каталог exercises (а еще лучше весь репозиторий pyneng-examples-exercises), так как тесты зависят от файлов в каталоге exercises, не только от файлов в каталоге конкретных заданий.
Установка скрипта pyneng#
Для начала, его надо установить, чтобы не надо было каждый раз писать python pyneng.py
.
Для установки скрипта, в репозитории должны находиться файлы pyneng.py и setup.py. Если репозиторий создавался после 28 января 2021 из шаблона pyneng-examples-exercises, эти файлы находится в корне репозитория. Иначе, их надо скопировать в свой репозиторий самостоятельно.
Надо перейти в свой репозиторий, например (пишите имя своего репозитория):
cd my_repo/
Затем внутри репозитория дать команду
pip install .
Это установит модуль и даст возможность вызывать его в любом каталоге по слову pyneng.
Скрипт pyneng#
Этапы работы с заданиями:
Выполнение заданий
Проверка, что задание отрабатывает как нужно
python task_4_2.py
или запуск скрипта в редакторе/IDEПроверка заданий тестами
pyneng 1-5
Если тесты проходят, смотрим варианты решения
pyneng 1-5 -a
Примечание
Второй шаг очень важен, потому что на этом этапе намного проще найти ошибки в синтаксисе и подобные проблемы с работой скрипта, чем при запуске кода через тест на 3 этапе.
Скрипт упрощает запуск тестов, так как не надо указывать никакие параметры, по умолчанию вывод настроен на подробный и запускается с плагином pytest-clarity, который улучшает diff при отличиях в решении и правильном решении. Также скрываются некоторые вещи, например, warning которые показывает pytest, чтобы не отвлекать от задачи.
Тесты по-прежнему можно запускать с помощью pytest, если вы уже к нему привыкли или ранее использовали. Скрипт pyneng всего лишь обертка вокруг запуска pytest.
Вторая часть работы скрипта - копирование вариантов решения заданий. Эта часть сделана для удобства,
чтобы не надо было искать ответы и задумана так, что сначала задание должно пройти
тест и только после этого pyneng -a
отработает и покажет ответы (скопирует их в текущий каталог).
Для копирования ответов, скрипт клонирует репозиторий ответов в домашний каталог пользователя,
копирует нужные ответы и удаляет репозиторий ответов.
Проверка заданий тестами#
После выполнения задания, его надо проверить с помощью тестов. Для запуска тестов, надо вызвать pyneng в каталоге заданий. Например, если вы делаете 4 раздел заданий, надо находиться в каталоге exercises/04_data_structures/ и запустить pyneng одним из способов, в зависимости от того какие задания на проверять.
Запуск проверки всех заданий текущего раздела:
pyneng
Запуск тестов для задания 4.1:
pyneng 1
Запуск тестов для заданий 4.1, 4.2, 4.3:
pyneng 1-3
Если есть задания с буквами, например, в 7 разделе, можно запускать так, чтобы запустить проверку для заданий 7.2a, 7.2b (надо находиться в каталоге 07_files):
pyneng 2a-b
или так, чтобы запустить все задания 7.2x с буквами и без:
pyneng 2*
Получение ответов#
Если задания проходят тесты, можно посмотреть варианты решения заданий.
Для этого к предыдущим вариантам команды надо добавить -a
.
Такой вызов значит запустить тесты для заданий 1 и 2 и скопировать ответы, если тесты прошли:
pyneng 1-2 -a
Тогда для указанных заданий запустятся тесты и для тех заданий из них, которые прошли тесты, скопируются ответы в файлы answer_task_x.py в текущем каталоге.
Вывод pyneng#
Warning#
В конце вывода теста часто написано «1 warning». Это можно игнорировать, предупреждения в основном связаны с работой каких-то модулей и скрыты чтобы не отвлекать от заданий.
Тесты прошли успешно#

Тесты не прошли#
Когда какие-то тесты не прошли, в выводе показываются отличия между тем как должен выглядеть вывод и какой вывод был получен.
Отличия показываются как Left и Right, к сожалению тут нет такого что зеленым выделен правильный вариант, а красным неправильный, надо смотреть по ситуации. Каждый раз при выводе отличий, перед ними есть строка вида:
assert correct_stdout in out.strip()
В этом случае Left это правильный вывод, right вывод задания:

или так:
return_value == correct_return_value
В этом случае Right это правильный вывод, Left вывод задания:
