RS School App 自动化测试(Auto-Test)配置指南:从创建题目到 JSON Attributes 参数详解
教育后端前端【免费下载链接】rsschool-appAn application for the RS School education process项目地址https://gitcode.com/gh_mirrors/rs/rsschool-app点击查看免费下载导读本文面向 RS School 平台的教练trainers与管理员admins完整讲解如何在 RS School App 中为课程添加RS School App Test类型的自测任务Self-Education Test包括创建全局任务、挂载到课程、通过 Auto-Test 菜单验证的完整操作流程以及决定测试评分逻辑的核心配置 JSON Attributes 中每个参数的含义与取值规则。读完本文你将能够独立配置一套带严格尝试次数、超时限流与阈值判定等规则的课程自测题并理解其在前端渲染与后端判分中的底层实现。一、功能定位什么是 RS School App 的 Auto-Test 自测任务在 RS School 的教学流程中除了自动代码检查Cross-Check / 代码仓库测试平台还内置了一套题库式自测任务Self-Education教练以 JSON 形式录入题目与答案学生在前端作答后由后端即时判分并写入课程成绩。该功能在仓库中对应两套实现后端判分核心nestjs/src/courses/task-verifications/self-education.service.ts负责校验答案、计算正确率与得分、执行尝试次数与限流规则前端作答页面client/src/modules/AutoTest/components/SelfEducation/SelfEducation.tsx负责把题目渲染为单选Radio或多选Checkbox表单。后端通过TaskType.SelfEducation识别这类任务见 auto-test.service.ts并将其统一暴露给Auto-Test页面。下面按官方流程逐步说明配置方法。二、创建全局测试任务Manage Tasks 页面2.1 进入任务管理页并新建任务在平台导航中进入Manage Tasks页面这是所有课程的全局任务库见下图点击Add Task按钮开始新建2.2 填写任务表单在弹出的表单中依次填写以下字段字段说明Name任务标题会展示在课程任务列表与 Auto-Test 页面中Task Type必须选择RS School App Test后端据此以TaskType.SelfEducation存储见 task.ts 的枚举定义Discipline选择与课程相关的学科Discipline用于归类和筛选Tags可选。设置标签以标明该题与课程的哪个知识点相关例如javascript、html/css等Description URL任务描述的外部链接JSON Attributes核心配置把包含测试设置、题目与答案的 JSON 内容整体粘贴进来完整格式见下文四、JSON Attributes 详解提示JSON Attributes 中的题目结构直接决定了学生端作答表单的渲染方式。前端组件会按multiple字段选择渲染单选还是多选见 SelfEducation.tsx因此务必保证 JSON 结构合法、字段完整。三、将测试任务挂载到具体课程Course Tasks 页面全局任务创建完成后还需要把它挂载到目标课程上学生才会看到该任务在课程菜单中进入Course Tasks页面同样点击Add Task按钮再次填写课程维度的任务配置并保存字段说明Task选择上一步刚创建的全局任务Task Type选择RS School App TestChecker选择Auto-Test表示由平台自动判分而非人工检查Task Owner该任务的负责人Start Date – End Date任务下发时间与截止时间DeadlineScore学生可获得的该任务最高分后端以此作为maxScore参与计算Score Weight任务权重默认1。此值由课程管理者后续统一修正教练在创建任务时请勿修改说明Score Weight属于课程管理层面的调分手段教练创建任务时保留默认值即可避免干扰课程统一的评分口径。四、验证任务是否配置成功Auto-Test 菜单任务添加完成后回到课程菜单进入Auto-Test页面即可看到当前课程下所有 Self-Education 类型任务后端 AutoTestService.getAll 会按TaskType.SelfEducation过滤并关联课程信息返回在 Auto-Test 页面的下拉列表中选择刚创建的测试检查题目渲染、得分与尝试次数提示是否正常前端 Auto-Test 页面由 client/src/modules/AutoTest/pages/AutoTests/AutoTests.tsx 承载任务卡片通过 TaskCard 展示阈值与得分信息例如当学生分数未达到tresholdPercentage时卡片会标记为未通过见 TaskCard.tsx。五、JSON Attributes 详解决定测试评分规则的核心配置JSON Attributes 是整个自测功能的关键。它分为public对学生可见/参与判分的公开配置与answers标准答案两大块。5.1 参数说明参数含义与取值规则strictAttemptsMode严格模式开关默认开启true。为false时关闭严格模式。严格模式下达到最大尝试次数后学生不得再提交得 0非严格模式下学生可以无限次提交但超过最大次数后最终得分减半maxAttemptsNumber最大尝试次数。严格模式下提交次数达到该值后学生本次任务直接得 0非严格模式下超过该次数后每轮得分除以 2numberOfQuestions题目数量必须等于answers数组长度也等于public.questions数组长度否则后端计算的正确率基数会出错tresholdPercentage通过阈值百分比原文拼写即如此。学生正确率需达到该百分比任务才算通过否则得 0 并消耗一次尝试机会oneAttemptPerNumberOfHours提交限流设为正整数时限制为每 N 小时仅可提交 1 次默认 0 表示关闭该限制public.questions题目与选项数组。每道题含question题干、answers选项数组、multiple是否多选设为true渲染为复选框answers标准答案数组元素为正确选项的下标单选为单个数字多选为数字数组顺序必须与public.questions一一对应注意学生重新提交后最终得分为最后一次提交获得的分数——也就是说即使之前的提交拿了高分最后一次提交也可能得 0最终成绩按最后一次记录。5.2 完整示例以下是一个包含单选、多选的标准 JSON 配置{ public: { tresholdPercentage: 70, numberOfQuestions: 10, maxAttemptsNumber: 2, strictAttemptsMode: false, questions: [ { question: Do you like html?, answers: [Yes, No, Maybe], multiple: false }, { question: What is css?, answers: [Cascade style sheets, cosmic super solutions, cool super stuff], multiple: true }, { question: What is not a css selector?, answers: [div, div, a.a, pdiv], multiple: true } ] }, answers: [ [0], [0, 2], [0, 3] ] }示例中的判分逻辑第 1 题为单选正确选项下标为0Yes第 2 题为多选正确选项为[0, 2]即第 0 项和第 2 项第 3 题为多选正确选项为[0, 3]numberOfQuestions在示例中填了10但只列了 3 道题——实际使用时必须把该值改为与题目数量一致的数值否则正确率基数100 / numberOfQuestions会与真实题数不符。5.3 判分算法与参数如何被后端消费后端 verifySelfEducationAnswers 完整实现了上述参数的全部逻辑提交合法性校验答案数量不能超过题目总数且不能为空所有答案值必须是非负整数题目下标必须在answers范围内且不能重复self-education.service.ts。次数与限流判定oneAttemptPerNumberOfHours通过对比上次提交时间与当前时间的小时差实现isNextSubmitAllowed严格模式下attempt maxAttemptsNumber直接抛出ForbiddenException禁止再提交self-education.service.ts。答案比对多选答案先排序再以|连接成字符串进行比较serializeAnswers保证选择顺序不影响正确性判定。得分计算correctAnswersPercent round(100 / numberOfQuestions * correctAnswersCount)若正确率低于tresholdPercentage则得 0 分否则score floor(maxScore * correctAnswersPercent * 0.01)非严格模式下若attempt maxAttemptsNumber得分再floor(score / 2)self-education.service.ts。写库与计分保存TaskVerification记录含答案明细并调用WriteScoreService.saveScore把最终得分写入课程成绩self-education.service.ts。该流程在 task-verifications.service.ts 中对TaskType.SelfEducation分支触发。以上规则均有对应的单元测试覆盖可参见 self-education.service.test.ts如严格模式达到上限抛异常、非严格模式减半得分、oneAttemptPerNumberOfHours为 0 时不限流等用例。5.4 前端如何解释这些参数学生体验侧学生作答页会先对题目做随机打乱再按numberOfQuestions截取展示SelfEducation.tsx因此同一任务每次进入题目顺序可能不同每道题按multiple渲染为单选Radio.Group或多选Checkbox.Group答案以选项下标为提交值SelfEducation.tsx提示文案剩余尝试次数、通过阈值、限流倒计时由 useAttemptsMessage.ts 统一生成例如非严格模式下提示After limit attempts is over you can get only half of a score.设置了oneAttemptPerNumberOfHours时会额外提示only one attempt per N hours其测试用例见 useAttemptsMessage.test.ts任务卡片会展示最大尝试次数、严格模式开关与阈值达成状态AutoTestTaskCard.tsx。5.5 进阶带图片的题目题目与选项均支持图片形式仓库中对应的功能扩展见 PR #798 描述题干图片在题目对象中添加questionImage字段值为图片 URL渲染时显示在题干下方SelfEducation.tsx选项图片将answersType设为image并把answers数组中的元素替换为图片 URL选项会以图片形式展示SelfEducation.tsx。类型定义可参考 client/src/services/course.ts 中的SelfEducationQuestionquestionImage?: string; answersType?: image对应渲染测试见 SelfEducation.test.tsx。六、功能演进参考PR / Issue以下历史改动展示了该功能能力的扩展脉络可帮助你判断当前实例支持的配置范围基础示例首个支持RS School App Test任务类型与 JSON Attributes 的 PR包含上述判分逻辑的雏形对应本文 5.2 节示例题目/选项图片支持为题目与选项增加图片展示能力对应 5.5 节按小时限制提交次数引入oneAttemptPerNumberOfHours参数用于限制每小时提交次数对应 5.1 节参数表。七、常见问题与排错建议现象可能原因与处理学生端题目数量与预期不符numberOfQuestions与public.questions数组长度不一致或前端按numberOfQuestions截取了随机题目请核对 JSON 中两者数值学生提交后被拒绝Forbidden严格模式下尝试次数已达上限或oneAttemptPerNumberOfHours限流未到期见 useAttemptsMessage.ts 中allowStartTask的判定得分低于预期检查tresholdPercentage是否过高非严格模式下超过maxAttemptsNumber后得分强制减半Score字段决定任务最高分多选答案判错确认answers中多选的下标数组与public.questions中该题的选项顺序一致下标从 0 开始创建任务后 Auto-Test 页面看不到确认该任务Task Type为 RS School App Test 且已挂载到当前课程Course Tasks后端仅返回TaskType.SelfEducation且有关联课程的任务赞分享教育后端前端【免费下载链接】rsschool-appAn application for the RS School education process项目地址https://gitcode.com/gh_mirrors/rs/rsschool-app点击查看免费下载相关推荐speed-test高级配置指南自定义服务器和测试参数详解speed test高级配置指南自定义服务器和测试参数详解 speed test是一款强大的命令行工具能够帮助用户通过speedtest.net测试互联网连开发工具miniblink49 内置 Google Test 示例详解从 TEST 宏到参数化测试与监听器 APIv8_6_7 测试套件miniblink49 内置 Google Test 示例详解从 TEST 宏到参数化测试与监听器 APIv8_6_7 测试套件 在 miniblink4前端桌面应用Gcovr深度解析现代C/C代码覆盖率报告的架构设计与实战指南Gcovr深度解析现代C/C代码覆盖率报告的架构设计与实战指南 在持续集成和代码质量保障体系中代码覆盖率分析是不可或缺的一环。对于C/C项目而言传上一篇Gemma-4-12B-it API完全指南从文本生成到函数调用的全场景代码示例下一篇告别AI上色偏色Style2Paints色彩平衡全攻略创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

单片机毕设项目:基于 STM32 或 51 单片机步进电机驱动防盗智能遮阳系统设计 基于 STM32 或 51 单片机多传感语音交互智能晾衣架控制系统设计(025608)

单片机毕设项目:基于 STM32 或 51 单片机步进电机驱动防盗智能遮阳系统设计 基于 STM32 或 51 单片机多传感语音交互智能晾衣架控制系统设计(025608)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/9/25 14:49:52 阅读更多 →
FunClip 视频剪辑:零门槛 3 分钟切出 2 小时录像里的精华

FunClip 视频剪辑:零门槛 3 分钟切出 2 小时录像里的精华

FunClip 视频剪辑:零门槛 3 分钟切出 2 小时录像里的精华 【免费下载链接】FunClip FunASR-powered video transcription, subtitle generation, and LLM-assisted clipping tool with a local Gradio UI. 项目地址: https://gitcode.com/GitHub_Trending/fu/FunC…

2026/9/25 14:55:06 阅读更多 →
大麦抢票脚本从环境到出票的完整上手路径

大麦抢票脚本从环境到出票的完整上手路径

大麦抢票脚本从环境到出票的完整上手路径 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase ticket-purchase 是一个开源的大麦抢票自动化项目&#xf…

2026/9/24 14:31:52 阅读更多 →

最新新闻

实战案例:Agent Sprite Forge 打造 Unity WebGL 生存类小游戏全流程

实战案例:Agent Sprite Forge 打造 Unity WebGL 生存类小游戏全流程

实战案例:Agent Sprite Forge 打造 Unity WebGL 生存类小游戏全流程 【免费下载链接】agent-sprite-forge Agent Skill for generating 2D sprite sheets and map, transparent PNG frames, and animated GIFs from prompts. 项目地址: https://gitcode.com/gh_mi…

2026/9/25 16:55:20 阅读更多 →
Minitron剪枝工作流:Model Optimizer把LLM参数量砍掉40%的全流程

Minitron剪枝工作流:Model Optimizer把LLM参数量砍掉40%的全流程

Minitron剪枝工作流:Model Optimizer把LLM参数量砍掉40%的全流程 【免费下载链接】Model-Optimizer A unified library of SOTA model optimization techniques like quantization, distillation, pruning, neural architecture search, speculative decoding, etc.…

2026/9/25 16:55:20 阅读更多 →
FlexGen 仓库视角下的 Transformers Flax 语言模型预训练实战:从零训练 RoBERTa、GPT-2、T5 与 BART

FlexGen 仓库视角下的 Transformers Flax 语言模型预训练实战:从零训练 RoBERTa、GPT-2、T5 与 BART

推理引擎大模型 【免费下载链接】FlexGen Running large language models on a single GPU for throughput-oriented scenarios. 项目地址: https://gitcode.com/gh_mirrors/fl/FlexGen 点击查看 免费下载 本篇技术指南以 benchmark/third_party/transformers/exam…

2026/9/25 16:55:20 阅读更多 →
基于 Hugging Face Transformers 在 MM-IMDb 上微调多模态双 Transformer(MMBT)分类模型实战指南

基于 Hugging Face Transformers 在 MM-IMDb 上微调多模态双 Transformer(MMBT)分类模型实战指南

推理引擎大模型 【免费下载链接】FlexGen Running large language models on a single GPU for throughput-oriented scenarios. 项目地址: https://gitcode.com/gh_mirrors/fl/FlexGen 点击查看 免费下载 本文以当前仓库中 mm-imdb 示例目录 的官方 README 为核心…

2026/9/25 16:55:20 阅读更多 →
React Native Skia 阴影滤镜实战:用 Shadow 组件实现投影、内阴影与拟物化设计

React Native Skia 阴影滤镜实战:用 Shadow 组件实现投影、内阴影与拟物化设计

图形学移动开发跨平台UI组件 【免费下载链接】react-native-skia High-performance React Native Graphics using Skia 项目地址: https://gitcode.com/gh_mirrors/re/react-native-skia 点击查看 免费下载 Shadow(DropShadow)是 React Nati…

2026/9/25 16:55:20 阅读更多 →
OS第二章随手记(2.1)

OS第二章随手记(2.1)

目录 一、进程阻塞的过程 二、阻塞队列 三、对时钟中断与中断的思考🤔 四、虚拟地址的思考 五、保存程序状态 六、int 0x80 的思考 七、中断源 八、陷入机制 九、MMU的简略描述 十、王道题目知识点总结 一、进程阻塞的过程 进程调用了一个系统调用函数去访…

2026/9/25 16:54:19 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →