Skip to content

Программа для тестов и квизов в терминале.

License

Notifications You must be signed in to change notification settings

dovydenkovas/learned-cat

Repository files navigation

Программа тестирования в терминале "Кот учёный"

Build

Позволяет проводить тестирование в терминале. Тесты хранятся в виде markdown файлов, что позволяет быстро и удобно управлять тестами. Для повышения эффективности управления и безопасности система была разделена на серверную часть, хранящую тесты и правильные ответы и клиентскую, имеющую доступ только к сгенерированным вариантам.

Сборка и установка

Сборка

Для сборки проекта необходим компилятор rustc и менеджер пакетов cargo. Чаще всего устанавливаются одним пакетом rust или аналогичным. Необходимо клонировать репозиторий и собрать проект:

make

В результате сборки в корне проекта появятся файлы learned-cat и learned-cat-daemon, которые представляют клиента и сервер соответственно.

Установка

Для установки проекта можно выполнить команду:

sudo make install

Которая:

  • соберет серверное и клиентские приложения,
  • поместит клиента в /usr/bin,
  • создаст файлы сервера в /opt/learned-cat, содержащие примеры конфигурации,
  • добавит пользователя learnedcat владеющего директорией /opt/learned-cat,
  • добавит сервис systemd для запуска сервера.

Настройка

По умолчанию директория сервера /opt/learned-cat/, для настройки необходимо указать путь в переменной окружения LEARNED_CAT_PATH. Общие настройки сервера и тестов находятся в файле settings.toml. Пример настройки, включающей все параметры, создается при инициализации сервера ключем -i и представлен в каталоге example-config. В случае, если был изменен парамер server_address на клиенте необходимо задать адрес сервера с помощью переменной окружения, например:

export SERVER_ADDRESS=127.0.0.1:65432

Markdown файлы тестов лежат в каталоге tests. Тест представляет собой документ, состоящий из заголовков, текста и списков. В начале файла должен располагаться текст - описание теста (баннер), может состоять из любого количества строк. Текст вопроса начинается с заголовка (#), далее следует произвольное количество обычных строк. Варианты ответов представляют собой маркерный список. Неправильные ответы начинаются с символа -, а правильные с +. Ответы также могут занимать несколько строк. Правильных ответов может быть несколько, в этом случае за каждый правильный ответ начисляется одинаковое количество баллов, а за неправильный полагается штраф:

  • За правильный ответ начисляется 1 / n_true баллов, где n_true - количество правильных ответов. Неправильный ответ нивелирует один правильный. При этом общий балл за вопрос не может быть меньше нуля или больше единицы.

Пример теста приведен ниже:

Описание теста. Тут указывается информация, необходимая для прохождения теста.
Например:
Чтобы получить максимальный балл, отвечайте правильно на все вопросы. Удачи!

# Пример вопроса с одним правильным ответом.
- Неправильный ответ.
+ Правильный ответ
- Ещё один неправильный ответ

# Пример вопроса с несколькими правильными ответами
- Неправильный ответ, -0,5 балла.
+ Правильный ответ,   +0,5 балла.
- Неправильный ответ, -0,5 балла.
+ Правильный ответ,   +0,5 балла.

Технические подробности

Описание работы клиента

Клиент отправляет короткие запросы и получает ответы от сервера. Осуществляет две основные функции:

  • Получение информации о доступных тестах (при запуске без аргументов или с ключем -l).
  • Запуск и прохождение теста (при запуске с именем теста в качестве параметра).

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

Клиент отправляет ответы на вопрос серверу, а сервер присылает следующий вопрос. Ответами на вопросы является одно или несколько чисел - номеров правильных ответов, либо слово или строка текста для ответа на открытый вопрос. Числа указываются через пробел без знаков препинания.

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

Описание работы сервера

При запуске сервера с параметром run или -r выполняются следующие действия:

  1. Считывание настроек из файла /opt/learned-cat/settings.toml.
  2. Парсинг тестов, указанных в настройках из markdown файлов и расположенных в каталоге /opt/learned-cat/tests/ (или другом, указанном в настройках).
  3. Чтение базы данных, по умолчанию /opt/learned-cat/marks.db.
  4. Запуск цикла обработки запросов, в этот момент выводится сообщение о номере прослушиваемого порта.

При запуске сервера с параметром export-resuls или -o: Осуществляется экспорт результатов тестирования из каталога /opt/learned-cat/results в виде csv таблицы в формате: имя теста, имя пользователя, время начала теста, время завершения тестирования, результат

В рамках взаимодействия с клиентами сервер осуществляет:

  1. Проверку доступа пользователя. Пользователь может получить информацию только о доступных ему тестах и запускать только доступные ему тесты.
  2. Выдачу описания теста.
  3. Генерацию варианта с учетом настроек теста.
  4. Регистрацию времени начала и времени окончания тестирования.
  5. Подведение итогов, проверку тестирования.
  6. Завершение тестирования при окончании времени.
  7. Занесение оценки за тест в базу данных. Протокол обмена данных пользователя и клиента описан в исходном коде и осуществляется в бинарном формате по протоколу TCP.

Результаты тестирования хранятся в SQLite базе данных и содержат оценку и время тестирования.

About

Программа для тестов и квизов в терминале.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published