Создание автопроверок
Автопроверки в GitVerse Lab позволяют автоматически проверять и оценивать работы участников. Эта функция помогает организаторам эффективно проверять множество решений без необходимости ручного ревью каждого отдельного репозитория.
Система автопроверок поддерживает различные языки программирования и форматы тестов, позволяя гибко настраивать процесс оценки в соответствии с требованиями конкретного задания.
Настройка автопроверок
Создание автопроверки через конструктор
Платформа предоставляет удобный визуальный интерфейс для создания базовых сценариев тестирования без написания сложного кода конфигурации.
Для создания автопроверки через конструктор выполните следующие шаги:
- Перейдите в нужный модуль GitVerse Lab.
- Начните создавать задание.
- На шаге «Настройка автопроверок» выберите опцию GitVerse конструктор.
- В выпадающем меню выберите тип проверки: «Ввод-вывод» (для программ, читающих данные из
stdinи выводящих результат вstdout) или «Команда запуска» (для проверки скриптами, где результат оценивается по коду возврата). - Выберите используемый язык программирования из предложенного списка (Java, Node, Python, C, C++ и другие).
Конфигурация тестов на примере ввода-вывода
При выборе типа проверки «Ввод-вывод» система предложит вам заполнить форму с правилами тестирования.
Вам необходимо настроить следующие параметры:
- название теста — укажите понятное и простое название для теста, например
Hello world test; - команда настройки — введите команду для подготовки окружения (опционально), например
./setup.sh; - команда запуска — укажите команду для запуска программы, например
./calculator.sh; - ввод — введите тестовые данные, которые будут переданы в программу, например
2; - выход — укажите ожидаемый результат выполнения программы, например
4; - макс. балл — установите максимальное количество баллов за успешное прохождение данного теста, например
100; - тайм-аут — укажите максимальное время выполнения теста в секундах, например
10.
Tip
Вы можете добавить сразу несколько тестов для одного задания, нажимая на кнопку «Добавить тест». Это позволит проверить различные аспекты работы программы и граничные условия.
Настройка YAML для автопроверок
Для более сложных сценариев проверки (когда визуального конструктора недостаточно) вы можете вручную настроить YAML-конфигурацию CI/CD.
Для перехода к ручной настройке:
- В интерфейсе настройки автопроверок нажмите кнопку Настроить YAML.
- В открывшемся редакторе изучите предложенный базовый шаблон YAML-файла.
- Измените конфигурацию
workflowв соответствии с вашими архитектурными требованиями и сохраните результат.
Базовый YAML-файл для автопроверок имеет следующую структуру:
name: Autograding Tests
on:
- pull_request
jobs:
run-autograding-tests:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
# Здесь вы размещаете свои тесты для автоматической оценки
# Дополнительную информацию можно найти в документации: [https://gitverse.ru/actions/autograding-io-grader](https://gitverse.ru/actions/autograding-io-grader)
#
# Пример запуска набора тестов:
# - name: Run tests
# uses: [https://gitverse.ru/actions/autograding-io-grader@v2](https://gitverse.ru/actions/autograding-io-grader@v2)
# with:
# test-name: Addition Test
# id: addition-test
# command: "./bin/add.sh"
# input: 1 2
# expected-output: 3
# comparison-method: exact
# timeout: 10
- name: Autograding Reporter
uses: [https://gitverse.ru/actions/autograding-grading-reporter@v2](https://gitverse.ru/actions/autograding-grading-reporter@v2)
# Чтобы вывести результаты тестов, используйте действие autograding-grading-reporter:
# env:
# ADDITION_TEST_RESULTS: "${{ steps.addition-test.outputs.result }}"
# with:
# runners: addition-test
Пример конфигурации автопроверок
В приведенном ниже примере bash-скрипт startCheck.sh запускает JavaScript-файл calc.js, который должен реализовывать функцию возведения переданного числа в квадрат. При подаче на вход значения 2 система ожидает на выходе значение 4.
Info
Все описанные ниже файлы собраны в качестве наглядного примера в этом репозитории.
Файл .gitverse/workflows/smartclass.yml
name: Autograding Tests
on:
- pull_request
jobs:
run-autograding-tests:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- id: test1
name: calc_test
uses: [https://gitverse.ru/actions/autograding-io-grader@v2](https://gitverse.ru/actions/autograding-io-grader@v2)
with:
test-name: calc_test
command: bash startCheck.sh
input: "2"
expected-output: "4"
comparison-method: exact
timeout: 1
max-score: 100
- name: Autograding Reporter
uses: [https://gitverse.ru/actions/autograding-grading-reporter@v2](https://gitverse.ru/actions/autograding-grading-reporter@v2)
env:
TEST1_RESULTS: ${{ steps.test1.outputs.result }}
with:
runners: test1
Файл README.md
# Задание: Реализовать умножение числа на себя
В файле `calc.js` реализуйте функцию `calculateSquare`:
```javascript
function calculateSquare(number) {
// Верните число, умноженное на само себя
return number;
Файл startCheck.sh
#!/bin/bash
# Проверяем наличие Node.js
if ! command -v node &> /dev/null; then
echo "Node.js not installed"
exit 1
fi
# Запускаем calc.js с переданными входными данными
read INPUT
NODE_NO_WARNINGS=1 node -e "
const calculateSquare = require('./calc.js');
const number = parseFloat('$INPUT');
console.log(String(calculateSquare(number)));
" 2>/dev/null
Файл calc.js
function calculateSquare(number) {
// TODO: добавьте свой код здесь
return number;
}
module.exports = calculateSquare;
Результаты автопроверок
Система отслеживает изменения в форках и запускает проверки без участия организатора при выполнении участниками целевых действий.
После того как участник создаст запрос на слияние в ветку master своего репозитория, произойдет следующее:
- платформа автоматически запустит настроенные в задании тесты;
- участник сможет увидеть статус и результаты прохождения проверок во вкладке CI/CD;
- результаты проверки станут доступны в интерфейсе задания для организатора;
- организатор сможет изучить подробный отчет о выполнении тестов, включая затраченное время и итоговые баллы.
Info
Если тест не прошел, участник сможет увидеть логи с причиной ошибки, чтобы самостоятельно исправить свою работу и обновить запрос на слияние.
Warning
Чтобы участники не могли схитрить и изменить условия проверки, рекомендуется включить защиту веток, в частности заблокировать возможность изменения файла
smartclass.yml. Важно: включив защиту всех веток, вы также автоматически запретите использовать принудительную отправку изменений (force push).
Советы по эффективному использованию автопроверок
Для обеспечения качественной проверки работ придерживайтесь следующих правил:
- Тесты должны покрывать не только основные, но и граничные случаи логики.
- Значения тайм-аутов должны учитывать сложность вычислительной задачи.
- Примеры ожидаемых входных и выходных данных в описании (README) помогают участникам лучше понять формат.
- Используйте максимально описательные и понятные названия тестов для облегчения процесса отладки.
- Регулярно обновляйте тесты в конфигурации, если вносите изменения в требования к самому заданию.