Skip to main content

使用自动分级

您可以通过配置测试在作业仓库中运行,来自动提供对您学生提交的代码的反馈。

谁可以使用此功能?

Organization owners who are admins for a classroom can set up and use autograding on assignments in a classroom. 有关课堂管理员的详细信息,请参阅“管理教室”。

关于自动分级

您可以使用自动评分来自动检查学生在 GitHub Classroom 上的工作。 可以为作业配置测试,每次学生推送到 GitHub.com 上的作业库时,测试就会立即运行。 学生可以查看测试结果,进行更改,并推送以查看新结果。

学生接受作业后,每次推送到作业仓库(或按教师定义的计划)时,GitHub Actions 都会在包含学生最新代码的 Linux 环境中运行自动分级测试的命令。 GitHub Classroom 为 GitHub Actions 创建必要的工作流程。 无需使用 GitHub Actions 的经验即可使用自动评分,但可按需选择修改工作流配置。 有关工作流和 GitHub Actions 的详细信息,请参阅“关于持续集成”。

您可以使用测试框架、运行自定义命令、编写输入/输出测试或组合不同的测试方法。 用于自动分级的 Linux 环境包含许多流行的软件工具。 有关详细信息,请参阅“使用 GitHub 托管的运行器”中最新版本的 Ubuntu 的详细信息。

您可以通过导航 GitHub Classroom 中的作业来查看哪些学生通过了自动分级测试的概况。 绿色复选标记表示学生的所有测试都已通过,红色 X 表示学生的部分或所有测试都未通过。 如果您为一个或多个测试评分,则气泡会显示测试的分数以及作业可得最高分数。

评分方法

GitHub Classroom 提供了不同的自动评分测试预设,使用预设可免除配置 GitHub Actions 工作流。 还可选择使用自定义 GitHub Actions YAML 来定义自动评分工作流。

使用 GitHub 预设

无需了解 GitHub Actions 即可使用预设。 可输入有关自动评分测试的信息,GitHub Classroom 会自动将所需文件添加到学生作业存储库中。

预设有三种类型:输入/输出测试、Python 测试和运行命令测试。

输入/输出测试

输入/输出测试可以选择性运行设置命令,然后向测试命令提供标准输入。 GitHub Classroom 根据预期结果评估测试命令的输出。

设置说明
测试名称测试的名称,用于识别日志中的测试
设置命令可选。 在测试之前运行的命令,如编译或安装
运行命令运行测试并生成用于评估的标准输出的命令
输入运行命令的标准输入
预期输出您要视为运行命令的标准输出的输出
比较运行命令的输出和预期输出之间的比较类型

  • 包括:当预期输出出现在 run 命令的标准输出中的任何位置时
    传递
  • 精确:当预期输出与 run 命令的标准输出完全相同时
    传递
  • 正则表达式:当预期输出中的正则表达式与 run 命令的标准输出匹配时
    传递
超时测试在导致失败之前应运行多长时间(分钟)
可选。 测试从总分中获得的分数

Python 测试

Python 测试运行安装命令,然后运行 pytest。 获得的分数取决于学生在 pytest 测试套件中通过的测试次数。 每个测试的分数都相同;可通过更改 Points 设置来更改整个测试套件的分值。

设置说明
测试名称测试的名称,用于识别日志中的测试
设置命令可选。 在测试之前运行的命令,如编译或安装。 我们已经安装了一些依赖项,但如有需要,可安装更多。 无需使用 sudo,并且应使用 pip 而不是 pip3
运行命令运行测试并生成用于评估的退出代码的命令
超时测试在导致失败之前应运行多长时间(分钟)
可选。 整个 pytest 套件的总分值。 每个测试的分值均为 Points / number_of_tests

运行命令测试

运行命令测试运行设置命令,然后运行测试命令。 GitHub Classroom 检查测试命令的退出状态。 退出代码 0 会导致成功,任何其他退出代码都会导致失败。

GitHub Classroom 为各种编程语言提供语言特定的运行命令测试预设。 例如,运行节点测试使用 npm install 预填充 setup 命令,使用 npm test 预填充 test 命令。

设置说明
测试名称测试的名称,用于识别日志中的测试
设置命令可选。 在测试之前运行的命令,如编译或安装
运行命令运行测试并生成用于评估的退出代码的命令
超时测试在导致失败之前应运行多长时间(分钟)
可选。 测试从总分中获得的分数

使用自定义 GitHub Actions 工作流

除使用预设,还可将任意工作流添加到起始代码存储库中的 .github/workflows/classroom.yml 文件中。

可直接在分配编辑页面编辑 .github/workflows/classroom.yml 文件,选择自定义 YAML 而不是 GitHub 预设。 单击转换为工作流文件将提示你将更改提交到起始代码存储库。 仅当起始代码存储库与教室位于同一组织中时,此同步才有效。 如果起始代码存储库位于另一个组织中,则必须手动编辑 .github/workflows/classroom.yml 文件。

配置作业的自动评分测试

您可以在创建新作业时添加自动评分测试。 有关详细信息,请参阅“创建个人作业”或“创建组分配”。

您可以添加、编辑或删除现有作业的自动评分测试。 通过课堂 UI 所做的所有更改都将推送到现有的学生资料库,因此在编辑测试时要小心。

  1. 登录 GitHub Classroom

  2. 在课堂列表中,单击要查看的课堂。

  3. 在要编辑的作业的右侧,单击

  4. 在左侧边栏中,单击“评分和反馈”。

  5. 添加、编辑或删除自动评分测试。

    • 要添加测试,请在“添加自动评分测试”下选择“添加测试”下拉菜单,然后单击要使用的评分方法。 配置测试,然后单击“保存测试用例”。

    • 要编辑测试,请点击测试名称右侧的 。 配置测试,然后单击“保存测试用例”。

    • 要删除测试,请点击测试名称右侧的

  6. 在页面底部,单击“更新作业”。

在运行自动评分测试时进行配置

默认情况下,当学生在 上向分配存储库推送时,都将自动运行自动评分测试。 但是,如果要管理 GitHub Actions 分钟数,则可更改此行为。

  1. 登录 GitHub Classroom
  2. 在课堂列表中,单击要查看的课堂。
  3. 在要编辑的作业的右侧,单击
  4. 在左侧边栏中,单击“评分和反馈”。
  5. 自动评分测试列表下方可配置自动评分测试的运行时间。
    • 每次学生提交作业时:这是默认行为。
    • 按计划:可以设置每天或每周运行自动评分测试的时间。
    • 手动:从作业分配仪表板手动触发自动评分测试运行。

查看和下载自动分级测试的结果

下载自动评分结果

可以使用概述页面上的“下载”按钮下载包含学生作业详细信息的 CSV。 这将生成并下载一个包含学生仓库链接、其 GitHub 处理、名册标识、提交时间戳和自动评分的CSV。

查看单个日志

  1. 登录 GitHub Classroom
  2. 在课堂列表中,单击要查看的课堂。
  3. 在作业列表中,单击要查看的作业。
  4. 在提交右侧,单击
  5. 查看测试输出。 有关详细信息,请参阅“Using workflow run logs”。

延伸阅读