自动评分:评分规则和执行引擎

- 每个示例的 checks.yaml:书上评价表的功能项转成操作步骤和期望结果(10 个示例共 23 项)
- 引擎:编译一次,每项在沙箱里单独启动一次程序,按控件名操作、调节实训台、核对结果;
  提示框自动点第一个按钮;全站同时最多跑 2 项
- 不通过时写明期望和实际,如"期望6 秒内 txt_even 的文字包含"发现入侵",实际是"正常"";
  找不到书上规定的控件名时直接指出
- 规则写错时指出第几项第几步
- 测试:参考答案全部通过;编译错误、控件改名、判断写反、忘停定时器、接错 DO 口各自报出对应原因

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-10-22 18:20:46 +08:00
1 parent 5bb2940969
commit 37fc747b49
16 files changed
+824

No files matched your search

+29
View File
@@ -0,0 +1,29 @@
# 评分规则:书上评价表的功能项。每项单独启动一次程序,按步骤操作,核对结果。
# 格式说明见 server/src/grading/checks.ts
- title: 增加用户后能用新账号登录
steps:
- click: btnAdd
- text: { control: txtNewUser1, value: zhangsan }
- text: { control: txtPass1, value: "123" }
- text: { control: txtPass2, value: "123" }
- click: btnOk
- text: { control: txtUserName, value: zhangsan }
- text: { control: txtPassword, value: "123" }
- click: btnOk
- expect: { messageBox: 登录成功 }
- title: 用户名或密码不对时提示错误
steps:
- text: { control: txtUserName, value: nobody }
- text: { control: txtPassword, value: wrong }
- click: btnOk
- expect: { messageBox: 无效的密码或用户名 }
- title: 两次输入的密码不一致时不能增加用户
steps:
- click: btnAdd
- text: { control: txtNewUser1, value: lisi }
- text: { control: txtPass1, value: "123" }
- text: { control: txtPass2, value: "456" }
- click: btnOk
- expect: { messageBox: 用户名或密码错误 }
@@ -0,0 +1,18 @@
# 评分规则:书上评价表的功能项。每项单独启动一次程序,按步骤操作,核对结果。
# 格式说明见 server/src/grading/checks.ts
- title: 计算器能正确计算(装箱与拆箱)
steps:
- text: { control: txtNum1, value: "7" }
- text: { control: txtNum2, value: "2" }
- select: { control: cmboxType, item: "+" }
- click: btnCalculate
- expect: { control: txtResult, text: "9" }
- select: { control: cmboxType, item: "/" }
- click: btnCalculate
- expect: { control: txtResult, text: "3.5" }
- title: 多态:不同国家的人说不同的语言
steps:
- click: btnDisplay
- expect: { control: txtDispaly, contains: 张三说的是汉语 }
- expect: { control: txtDispaly, contains: Mary说的是英语 }
+16
View File
@@ -0,0 +1,16 @@
# 评分规则:书上评价表的功能项。每项单独启动一次程序,按步骤操作,核对结果。
# 格式说明见 server/src/grading/checks.ts
- title: LED 屏能正常显示推送的文字
steps:
- select: { control: com_Port, item: COM5 }
- click: btn_Open
- text: { control: txt_SendText, value: 欢迎光临 }
- click: btn_Send
- expect: { led: 欢迎光临 }
- expect: { control: led, ledText: 欢迎光临, desc: 窗体上的 LED 控件也显示"欢迎光临" }
- title: 没有打开串口时推送,弹出出错提示
steps:
- text: { control: txt_SendText, value: 欢迎光临 }
- click: btn_Send
- expect: { messageBox: 发送失败 }
+20
View File
@@ -0,0 +1,20 @@
# 评分规则:书上评价表的功能项。每项单独启动一次程序,按步骤操作,核对结果。
# 格式说明见 server/src/grading/checks.ts
- title: 环境值能正确获取和显示
steps:
- select: { control: com_port, item: COM2 }
- click: btn_Open
- expect: { control: btn_Open, text: 关闭, desc: 按钮文字变成"关闭" }
- click: btn_get
- expect: { control: txt_temperature, text: "25" }
- expect: { control: txt_humidity, text: "60" }
- expect: { control: txt_light, text: "500" }
- title: 环境变化后能获取到新的数值
steps:
- select: { control: com_port, item: COM2 }
- click: btn_Open
- board: { temperature: 31, light: 300 }
- click: btn_get
- expect: { control: txt_temperature, text: "31" }
- expect: { control: txt_light, text: "300" }
@@ -0,0 +1,22 @@
# 评分规则:书上评价表的功能项。每项单独启动一次程序,按步骤操作,核对结果。
# 格式说明见 server/src/grading/checks.ts
- title: 环境值能正确推送到 LED 屏
steps:
- select: { control: com_adamPort, item: COM2 }
- select: { control: com_ledPort, item: COM5 }
- click: btn_open
- click: btn_get
- expect: { control: txt_temperature, text: "25" }
- expect: { led: "25", desc: 显示温度 25 }
- expect: { led: "60", desc: 显示湿度 60 }
- expect: { led: "500", desc: 显示光照度 500 }
- title: 能推送最新的环境信息
steps:
- select: { control: com_adamPort, item: COM2 }
- select: { control: com_ledPort, item: COM5 }
- click: btn_open
- click: btn_get
- board: { temperature: 31 }
- click: btn_get
- expect: { led: "31", desc: 显示最新的温度 31 }
+18
View File
@@ -0,0 +1,18 @@
# 评分规则:书上评价表的功能项。每项单独启动一次程序,按步骤操作,核对结果。
# 格式说明见 server/src/grading/checks.ts
- title: 能通过 ZigBee 打开路灯
steps:
- select: { control: com_port, item: COM4 }
- click: btn_open
- click: rb_Open
- expect: { zigbee: 1, on: true }
- expect: { control: lamp1, on: true }
- title: 能通过 ZigBee 关闭路灯
steps:
- select: { control: com_port, item: COM4 }
- click: btn_open
- click: rb_Open
- click: rb_Close
- expect: { zigbee: 1, on: false }
- expect: { control: lamp1, on: false }
@@ -0,0 +1,23 @@
# 评分规则:书上评价表的功能项。每项单独启动一次程序,按步骤操作,核对结果。
# 格式说明见 server/src/grading/checks.ts
- title: 能手动开关路灯
steps:
- select: { control: com_lamp, item: COM4 }
- select: { control: com_environment, item: COM3 }
- click: btn_open
- click: btn_lampOpen
- expect: { zigbee: 1, on: true }
- click: btn_lampClose
- expect: { zigbee: 1, on: false }
- title: 能实时联动路灯(有人亮灯,没人关灯)
steps:
- select: { control: com_lamp, item: COM4 }
- select: { control: com_environment, item: COM3 }
- click: btn_open
- click: ch_bodyInfrared
- expect: { control: btn_lampOpen, enabled: false, desc: 勾选人体开关后"开"按钮不可用 }
- board: { bodyInfrared: true }
- expect: { zigbee: 1, on: true, within: 6s, desc: 有人经过时打开 }
- board: { bodyInfrared: false }
- expect: { zigbee: 1, on: false, within: 6s, desc: 人离开后关闭 }
+26
View File
@@ -0,0 +1,26 @@
# 评分规则:书上评价表的功能项。每项单独启动一次程序,按步骤操作,核对结果。
# 格式说明见 server/src/grading/checks.ts
- title: 按钮能打开串口、开启定时器,更改按钮文字
steps:
- select: { control: com_port, item: COM3 }
- click: btn_open
- expect: { control: btn_open, text: 关闭, desc: 按钮文字变成"关闭" }
- expect: { control: txt_time, matches: '\d{1,2}:\d{2}', within: 6s, desc: 显示当前时间 }
- title: 能实时显示入侵数据
steps:
- select: { control: com_port, item: COM3 }
- click: btn_open
- board: { infrared: true }
- expect: { control: txt_even, contains: 发现入侵, within: 6s }
- board: { infrared: false }
- expect: { control: txt_even, contains: 正常, within: 6s }
- title: 再点按钮能关闭串口、停止定时器
steps:
- select: { control: com_port, item: COM3 }
- click: btn_open
- expect: { control: txt_time, matches: '\d{1,2}:\d{2}', within: 6s, desc: 显示当前时间 }
- click: btn_open
- expect: { control: btn_open, text: 开启, desc: 按钮文字变回"开启" }
- expect: { control: txt_time, unchanged: 6s, desc: 不再更新时间(定时器应已停止) }
+18
View File
@@ -0,0 +1,18 @@
# 评分规则:书上评价表的功能项。每项单独启动一次程序,按步骤操作,核对结果。
# 格式说明见 server/src/grading/checks.ts
- title: 能正确打开报警灯
steps:
- select: { control: com_port, item: COM3 }
- click: btn_open
- click: btn_alarmOpen
- expect: { relay: 0, on: true }
- expect: { control: alarm1, on: true }
- title: 能正确关闭报警灯
steps:
- select: { control: com_port, item: COM3 }
- click: btn_open
- click: btn_alarmOpen
- click: btn_alarmClose
- expect: { relay: 0, on: false }
- expect: { control: alarm1, on: false }
+26
View File
@@ -0,0 +1,26 @@
# 评分规则:书上评价表的功能项。每项单独启动一次程序,按步骤操作,核对结果。
# 格式说明见 server/src/grading/checks.ts
- title: 按钮能打开串口、开启定时器,更改按钮文字
steps:
- select: { control: com_port, item: COM3 }
- click: btn_open
- expect: { control: btn_open, text: 关闭, desc: 按钮文字变成"关闭" }
- expect: { control: txt_time, matches: '\d{1,2}:\d{2}', within: 7s, desc: 显示当前时间 }
- title: 能实时显示火焰传感器数据
steps:
- select: { control: com_port, item: COM3 }
- click: btn_open
- board: { fire: true }
- expect: { control: txt_even, contains: 发现火情, within: 7s }
- board: { fire: false }
- expect: { control: txt_even, contains: 正常, within: 7s }
- title: 再点按钮能关闭串口、停止定时器
steps:
- select: { control: com_port, item: COM3 }
- click: btn_open
- expect: { control: txt_time, matches: '\d{1,2}:\d{2}', within: 7s, desc: 显示当前时间 }
- click: btn_open
- expect: { control: btn_open, text: 开启, desc: 按钮文字变回"开启" }
- expect: { control: txt_time, unchanged: 7s, desc: 不再更新时间(定时器应已停止) }