试用前准备:全班模拟压测、评分并发 6→16、手动备份与恢复
- test/classroom.ts:45 个虚拟学生走一遍登录、运行、自测、提交,统计每个环节等多久 - 评分并发可配置(SIM_GRADE_CONCURRENCY,默认 16),提交队列同时评的份数跟着走; 2 核实测项目 8 任务 3 全班自测从约 4 分钟降到约 1.5 分钟 - 检查的默认等待 2 秒→5 秒,机器忙时不再误判正确的程序 - 删除学生时删除他的数据库(编号会重新用给新学生) - deploy/backup.sh、deploy/restore.sh:手动备份到宿主机 backups/,恢复前先备份 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e8058376dd
commit
982b1297aa
23 files changed
+479
-25
No files matched your search
@@ -499,6 +499,22 @@ describe('数据库页面', () => {
|
||||
expect((await new Browser().get('/api/db')).status).toBe(401)
|
||||
}, 60000)
|
||||
|
||||
test('删除学生时删除他的库:编号重新用给新学生时看不到前一个人的库', async () => {
|
||||
const t = await teacher()
|
||||
const classId = await classWithStudents(t, [{ username: 's1', name: '甲', password: 'p1' }])
|
||||
const s1 = new Browser()
|
||||
await s1.login('s1', 'p1')
|
||||
await s1.post('/api/db/query', { database: 'master', sql: 'CREATE DATABASE 甲的库' })
|
||||
const [{ id }] = (await t.get(`/api/teacher/classes/${classId}/students`)).body
|
||||
await t.delete(`/api/teacher/students/${id}`)
|
||||
|
||||
await t.post(`/api/teacher/classes/${classId}/import`, { rows: [{ username: 's2', name: '乙', password: 'p2' }] })
|
||||
expect((await t.get(`/api/teacher/classes/${classId}/students`)).body[0].id).toBe(id)
|
||||
const s2 = new Browser()
|
||||
await s2.login('s2', 'p2')
|
||||
expect((await s2.get('/api/db')).body.databases).toEqual([])
|
||||
}, 60000)
|
||||
|
||||
test('恢复实验初始数据:只替换实验用到的库', async () => {
|
||||
const t = await teacher()
|
||||
await t.post('/api/db/query', { database: 'master', sql: 'CREATE DATABASE 我的库' })
|
||||
|
||||
Reference in new issue
Block a user