跳至主要内容

使用自动评分

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

谁可以使用此功能?

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

关于自动评分

您可以使用自动评分在 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 会将测试命令的输出与期望结果进行比较评估。

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

  • 包含: 当期望输出出现时即通过
    在运行命令的标准输出中的任何位置
  • 精确: 当期望输出完全相同时即通过
    与运行命令的标准输出相同
  • 正则表达式: 当期望输出中的正则表达式匹配时即通过
    匹配运行命令的标准输出
超时以分钟为单位,测试运行多长时间后若未完成则判为失败
点数可选。该测试在总分中占的分数

Python 测试

Python 测试运行一个设置命令,然后运行 pytest。授予的分数取决于学生在 pytest 测试套件中通过的测试数量。每个测试的分值相同;您可以通过更改 Points 设置来修改整个测试套件的总分。

设置描述
测试名称测试的名称,用于在日志中标识该测试
设置命令可选。在测试之前运行的命令,例如编译或安装。部分依赖已经预装,如有需要可自行安装。无需使用 sudo,请使用 pip 而非 pip3
运行命令运行测试并生成用于评估的退出码的命令
超时以分钟为单位,测试运行多长时间后若未完成则判为失败
点数可选。整个 pytest 测试套件的总分。每个测试的分数为 Points / number_of_tests

运行命令测试

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

GitHub Classroom 为多种编程语言提供了语言特定的运行命令测试预设。例如,Run node 测试会预填设置命令 npm install 和测试命令 npm test

设置描述
测试名称测试的名称,用于在日志中标识该测试
设置命令可选。在测试之前运行的命令,例如编译或安装
运行命令运行测试并生成用于评估的退出码的命令
超时以分钟为单位,测试运行多长时间后若未完成则判为失败
点数可选。该测试在总分中占的分数

使用自定义 GitHub Actions 工作流

除了使用预设,您还可以在起始代码仓库的 .github/workflows/classroom.yml 文件中添加任意 GitHub Actions 工作流。

在作业编辑页面中选择 Custom YAML(自定义 YAML)而不是 GitHub presets(GitHub 预设),即可直接编辑 .github/workflows/classroom.yml 文件。点击 Convert to workflow file(转换为工作流文件)后,系统会提示您将更改提交到起始代码仓库。此同步仅在您的起始代码仓库与课堂位于同一组织时有效。如起始代码仓库位于其他组织,您必须手动编辑 .github/workflows/classroom.yml 文件。

为作业配置自动评分测试

您可以在创建新作业时添加自动评分测试。更多信息请参阅 创建个人作业创建小组作业

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

  1. 登录 GitHub Classroom

  2. 在教室列表中,点击您想查看的教室。

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

  4. 在左侧边栏,点击 评分与反馈

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

    • 要添加测试,在 “Add autograding tests”(添加自动评分测试)下,选择 Add test(添加测试)下拉菜单,然后点击您想使用的评分方法。配置测试后,点击 Save test case(保存测试用例)。

    • 要编辑测试,在测试名称右侧,点击。配置测试后,点击 Save test case(保存测试用例)。

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

  6. 在页面底部,点击 Update assignment(更新作业)。

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

默认情况下,自动评分测试会在学生每次向 GitHub.com 上的作业仓库推送时自动运行。不过,如果您想管理 GitHub Actions 的运行分钟数,也可以更改此行为。

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

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

下载自动评分结果

您可以在概览页面点击 “Download”(下载)按钮,下载包含学生作业详细信息的 CSV 文件。该 CSV 将包括学生仓库链接、GitHub 账号、名单标识、提交时间戳以及自动评分得分。

查看单个日志

  1. 登录 GitHub Classroom
  2. 在教室列表中,点击您想查看的教室。
  3. 在作业列表中,点击您想查看的作业。
  4. 在提交右侧,点击.
  5. 查看测试输出。更多信息请参阅 使用工作流运行日志

延伸阅读

© . This site is unofficial and not affiliated with GitHub, Inc.