跳至主要内容

使用自动评分

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

谁可以使用此功能?

担任课堂管理员的组织所有者可以在课堂中设置和使用作业自动评分。有关课堂管理员的更多信息,请参阅“管理课堂”。

关于自动评分

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

在学生接受作业后,每次将内容推送到作业存储库(或在教师定义的时间表上),GitHub Actions 都会在包含学生最新代码的 Linux 环境中运行自动评分测试的命令。GitHub Classroom 会为 GitHub Actions 创建必要的流程。您无需有 GitHub Actions 的经验即可使用自动评分,但您可以选择修改流程配置以满足您的需求。有关流程和 GitHub Actions 的更多信息,请参阅“关于持续集成”。

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

您可以通过导航到 GitHub Classroom 中的作业来查看哪些学生通过了自动评分测试的概览。绿色对勾表示学生通过了所有测试,红色 X 表示学生未通过部分或所有测试。如果您为一个或多个测试授予分数,则气泡会显示该测试的分数,满分为作业的最大可能分数。

评分方法

GitHub Classroom 提供了不同的自动评分测试预设,如果您不希望自己配置 GitHub Actions 流程,则可以使用这些预设。您还可以选择使用自定义 GitHub Actions YAML 来定义自己的自动评分流程。

使用 GitHub 预设

您可以在没有任何 GitHub Actions 知识的情况下使用预设。您可以输入有关自动评分测试的信息,GitHub Classroom 会自动将所需文件添加到学生作业存储库中。

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

输入/输出测试

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

设置说明
测试名称测试的名称,用于在日志中识别测试
设置命令可选。在测试之前运行的命令,例如编译或安装
运行命令运行测试并生成标准输出以进行评估的命令
输入运行命令的标准输入
预期输出希望从运行命令中看到的标准输出
比较运行命令的输出与预期输出之间的比较类型

  • 包含:当预期输出出现在
    运行命令的标准输出中的任何位置时通过
  • 完全匹配:当预期输出与
    运行命令的标准输出完全相同
  • 正则表达式:如果预期中的正则表达式
    输出与运行命令的标准输出匹配,则通过
超时以分钟为单位,测试在导致失败之前应运行多长时间
分数可选。测试在总分中占的分数

Python 测试

Python 测试运行设置命令,然后运行 pytest。颁发的分数将取决于学生通过 pytest 测试套件中的多少项测试。每项测试的分数相同;你可以通过更改 分数 设置来更改整个测试套件的分数。

设置说明
测试名称测试的名称,用于在日志中识别测试
设置命令可选。在测试之前运行的命令,例如编译或安装。 已安装一些依赖项,但如有需要,你可以安装更多依赖项。无需使用 sudo,而应使用 pip 代替 pip3
运行命令用于运行测试并生成退出代码以进行评估的命令
超时以分钟为单位,测试在导致失败之前应运行多长时间
分数可选。整个 pytest 套件的总分数。每项测试的分数为 分数 / 测试数

运行命令测试

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

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

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

使用自定义 GitHub Actions 工作流

除了使用预设之外,你还可以将任何 GitHub Actions 工作流添加到 starter 代码存储库中的 .github/workflows/classroom.yml 文件。

你可以直接从作业编辑页面编辑 .github/workflows/classroom.yml 文件,方法是选择 自定义 YAML 而不是 GitHub 预设。单击 转换为工作流文件 将提示你提交对入门代码存储库的更改。此同步仅在你入门代码存储库与你的课堂位于同一组织中时才有效。如果你的入门代码存储库位于另一个组织中,则必须手动编辑 .github/workflows/classroom.yml 文件。

为作业配置自动评分测试

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

你可以为现有作业添加、编辑或删除自动评分测试。通过 Classroom UI 做出的所有更改都将推送到现有的学生存储库,因此在编辑测试时请谨慎操作。

  1. 登录 GitHub Classroom

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

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

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

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

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

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

    • 要删除测试,请在测试名称右侧,单击 .

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

配置自动评分测试的运行时间

默认情况下,每当学生将作业推送到 GitHub.com 上的作业存储库时,自动评分测试都会自动运行。但是,如果你想管理你的 GitHub Actions 分钟数,则可以更改此行为。

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

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

下载自动评分结果

您还可以通过“下载”按钮下载学生的自动评分分数的 CSV。这将生成并下载一个 CSV,其中包含指向学生存储库的链接、他们的 GitHub 句柄、花名册标识符、提交时间戳和自动评分分数。

查看单个日志

  1. 登录 GitHub Classroom
  2. 在课堂列表中,单击你想要查看的课堂。
  3. 在作业列表中,单击您要查看的作业。
  4. 在提交的右侧,单击 .
  5. 查看测试输出。有关更多信息,请参阅“使用工作流运行日志”。

进一步阅读