跳至主要内容

使用自动评分

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

谁可以使用此功能?

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

关于自动评分

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

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

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

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

评分方法

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

使用 GitHub 预设

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

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

输入/输出测试

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

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

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

Python 测试

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

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

运行命令测试

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

GitHub Classroom 为多种编程语言提供了特定于语言的运行命令测试的预设。例如,**运行节点**测试会预先填充设置命令为npm install,测试命令为npm test

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

使用自定义 GitHub Actions 工作流

除了使用预设,您还可以将任何 GitHub Actions 工作流添加到启动代码存储库中的.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. 查看测试输出。有关更多信息,请参阅“使用工作流运行日志”。

进一步阅读