关于自动评分
您可以使用自动评分在 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 所做的更改都会推送到现有学生仓库,请在编辑测试时谨慎操作。
-
登录 GitHub Classroom。
-
在教室列表中,点击您想查看的教室。
-
在要编辑的作业右侧,点击.
-
在左侧边栏,点击 评分与反馈。
-
添加、编辑或删除自动评分测试。
-
要添加测试,在 “Add autograding tests”(添加自动评分测试)下,选择 Add test(添加测试)下拉菜单,然后点击您想使用的评分方法。配置测试后,点击 Save test case(保存测试用例)。
-
要编辑测试,在测试名称右侧,点击。配置测试后,点击 Save test case(保存测试用例)。
-
要删除测试,在测试名称右侧,点击.
-
-
在页面底部,点击 Update assignment(更新作业)。
配置自动评分测试的运行时间
默认情况下,自动评分测试会在学生每次向 GitHub.com 上的作业仓库推送时自动运行。不过,如果您想管理 GitHub Actions 的运行分钟数,也可以更改此行为。
- 登录 GitHub Classroom。
- 在教室列表中,点击您想查看的教室。
- 在要编辑的作业右侧,点击.
- 在左侧边栏,点击 评分与反馈。
- 在自动评分测试列表下方,您可以配置测试的运行时间。
- 每次学生提交作业时: 这是默认行为。
- 按计划: 您可以设置每天或每周的某个时间来运行自动评分测试。
- 手动: 自动评分测试将由您在作业仪表板手动触发。
查看并下载自动评分测试结果
下载自动评分结果
您可以在概览页面点击 “Download”(下载)按钮,下载包含学生作业详细信息的 CSV 文件。该 CSV 将包括学生仓库链接、GitHub 账号、名单标识、提交时间戳以及自动评分得分。
查看单个日志
- 登录 GitHub Classroom。
- 在教室列表中,点击您想查看的教室。
- 在作业列表中,点击您想查看的作业。
- 在提交右侧,点击.
- 查看测试输出。更多信息请参阅 使用工作流运行日志。