测试用例:







1. 登录页
1.1 功能测试
1.1.1 异常登录
-
账号与密码均为空 → 点击登录
预期结果:弹窗“请输入账号或密码”,页面不跳转。
实际结果:

状态:符合预期 -
账号不为空、密码为空 → 点击登录
预期结果:弹窗“请输入密码”,页面不跳转。
实际结果:

状态:符合预期
-
账号为空、密码不为空 → 点击登录
预期结果:弹窗“请输入账号”,页面不跳转。
实际结果:

状态:符合预期
1.1.2 错误登录
-
账号密码均错误 → 点击登录
预期结果:弹窗“用户不存在”,页面不跳转。
实际结果:

状态:通过 -
账号错误、密码正确 → 点击登录
预期结果:弹窗“用户不存在”,保持当前页面。
实际结果:

状态:通过
-
账号正确、密码错误 → 点击登录
预期结果:弹窗“账号或密码错误”,页面不跳转。
实际结果:

状态:通过
1.1.3 正常登录
- 账号密码正确 → 点击登录
预期结果:弹窗“登录成功”,跳转至用户管理页,缓存写入登录用户信息且数据无误。
实际结果:



状态:通过
2. 用户管理页
2.1 搜索用户
2.1.1 按用户 ID
-
输入存在 ID → 搜索
预期结果:列表仅展示该用户信息。
实际结果:

状态:通过 -
输入不存在 ID → 搜索
预期结果:弹窗“您所查找的用户不存在”,列表清空。
实际结果:

状态:通过 -
输入特殊字符/汉字 ID → 搜索
预期结果:弹窗“id格式错误(仅支持纯数字)”,列表不变。
实际结果:

状态:通过
-
ID 与昵称框均为空 → 搜索
预期结果:弹窗“请输入用户id或者用户昵称”。
实际结果:

状态:通过 -
输入 <4 位 ID → 搜索
预期结果:弹窗“id长度不能小于4位”,列表不变。
实际结果:

状态:通过 -
输入 >19 位 ID → 搜索
预期结果:弹窗“id长度不能超过19位”,列表不变。
实际结果:

2.1.2 按昵称
-
输入完整存在昵称 → 搜索
预期结果:列表仅展示该用户。
实际结果:

状态:通过
-
输入昵称前缀关键字 → 搜索
预期结果:列表展示所有符合条件用户信息。
实际结果:

状态:通过
-
输入昵称中缀关键字 → 搜索
预期结果:列表展示所有符合条件用户信息。
实际结果:

状态:通过 -
输入昵称后缀关键字 → 搜索
预期结果:列表展示所有符合条件用户信息。
实际结果:

状态:通过 -
输入不存在昵称 → 搜索
预期结果:弹窗“您所查找的用户不存在”,列表清空。
实际结果:

状态:通过
-
英文昵称小写/大写/混合 → 搜索
预期结果:均匹配对应用户信息。
实际结果:

状态:通过
2.2 重置搜索
-
点击重置按钮
预期结果:搜索框清空,列表展示全部用户。
实际结果:

状态:通过 -
已展示全部用户再点击重置
预期结果:页面无变化,无报错。
实际结果:

状态:通过
-
未提交搜索即点击重置
预期结果:输入清空,列表展示全部用户,未触发搜索。
实际结果:


状态:通过 -
连续多次点击重置
预期结果:功能稳定,无卡顿、数据正确。
实际结果:

状态:通过
2.3 拉黑 / 解禁
-
点击“拉黑”标签
预期结果:标签变红“拉黑”,数据库 status=0。
实际结果:


状态:通过
-
点击“解禁”标签
预期结果:标签变绿“正常”,数据库 status=1。
实际结果:


状态:通过
2.4 业务影响
-
拉黑用户报名竞赛
预期结果:页面不跳转,弹窗“您已被列入黑名单,请联系管理员”。
实际结果:

状态:通过
-
拉黑用户登录
预期结果:账号密码正确仍能登录并跳转题库页面。
实际结果:

状态:通过 -
拉黑用户在题库作答
预期结果:页面不跳转,弹窗“您已被列入黑名单,请联系管理员”。
实际结果:

状态:完成
2.5 缓存一致性
-
执行拉黑后查询缓存
预期结果:缓存 status=0。
实际结果:

状态:通过
-
执行解禁后查询缓存
预期结果:缓存 status=1。
实际结果:


状态:完成
2.6 管理员登出
-
点击退出→确认
预期结果:跳转管理员登录页,缓存删除登录用户信息。
实际结果:




状态:通过 -
点击退出→取消
预期结果:页面不跳转,缓存保留用户信息。
实际结果:


状态:通过
2.7 用户列表
-
非边界翻页
预期结果:正常切换,数据无误。
实际结果:


状态:通过 -
边界翻页按钮被禁用仍点击
预期结果:按钮变红,点击无跳转、无报错。
实际结果:

状态:通过 -
快速连续切页
预期结果:最终停留在最后一次操作页面,数据准确。
实际结果:

状态:通过 -
切换每页 5 条
预期结果:展示条数与总页数正确。
实际结果:

切换后:

状态:通过
-
多次来回切换每页数量
预期结果:最终展示符合最后设置,数据稳定。
实际结果:

状态:通过 -
输入存在页码→回车
预期结果:跳转对应页,数据正确。
实际结果:

状态:通过
-
输入不存在/负数/0 页码
预期结果:停留当前页,数据正常。
实际结果:

状态:完成
-
输入当前页码→回车
预期结果:页面不跳转。
实际结果:

状态:完成
3. 题目管理页
3.1 搜索题目
3.1.1 按难度搜索
-
选择简单/中等/困难→搜索
预期结果:列表仅展示对应难度题目。
实际结果:
简单:
中等:
困难:

状态:通过
-
选择难度后点击重置
预期结果:列表展示全部题目。
实际结果:


状态:未执行
3.1.2 按标题搜索
-
输入完整存在标题 → 搜索
预期结果:列表仅展示该题目信息。
实际结果:

状态:通过
-
输入标题前缀/中缀/后缀 → 搜索
预期结果:列表展示所有匹配题目。
实际结果:
前缀:

中缀:

后缀:

状态:通过
-
输入不存在标题 → 搜索
预期结果:弹窗“您所查找的题目不存在”,列表清空。
实际结果:
状态:通过
3.2 重置搜索
-
点击重置按钮
预期结果:搜索框清空,列表展示全部题目。
实际结果:


状态:通过
-
已展示全部题目仍点击重置
预期结果:页面无变化,无报错。
实际结果:

状态:通过 -
搜索框输入未提交即点击重置
预期结果:输入框清空,列表展示全部题目,未触发搜索。
实际结果:


状态:通过 -
多次连续点击重置
预期结果:功能正常,数据展示正常,无卡顿,无报错。
实际结果:

状态:通过
3.3 题目列表
-
翻页/首页/尾页操作
预期结果:逻辑与用户列表一致,数据正确。
实际结果:
首页:
翻页:

尾页:

状态:通过 -
快速连续切页
预期结果:停留在最后一次操作页面,数据准确。
实际结果:

状态:通过
-
切换每页数量及多次切换
预期结果:每页条数符合最终设置,数据稳定。
实际结果:

状态:完成
-
输入页码(存在/不存在/当前)
预期结果:存在页码跳转;不存在则跳转至尾页。
实际结果:
存在:

不存在:


状态:完成
3.4 添加题目
-
填写所有必填→发布
预期结果:提示“添加成功”,列表刷新,新题位于第一页,DB/ES/Redis 写入成功。
实际结果:





状态:通过 -
标题留空→发布
预期结果:前端提示“请添加题目标题”,不发送请求。
实际结果:

状态:通过 -
标题与已有题重复→发布
预期结果:前端提示“该题目已存在”,数据库无变更。
实际结果:

用户端已删除:状态:通过
3.5 删除题目
-
删除存在题目并确认
预期结果:提示删除成功,DB/Redis/ES 同步删除,用户/管理端列表不再显示。
实际结果:
测试删除 “最短连续子数组之和”,

数据库已清除

Redis已删除(key不存在)

ES已删除:(total从15变为14)

用户端已经删除:

状态:完成 -
删除被竞赛引用题目
预期结果:弹窗“该题目已经被竞赛引用,不可删除”。
实际结果:

状态:通过
3.6 编辑题目
-
修改题目内容→发布
预期结果:提示“编辑成功”,返回列表可见最新信息,数据库/缓存同步。
实际结果:



状态:通过
-
标题改为已存在题目→发布
预期结果:提示“该题目已经存在”,数据库与缓存无变化。
实际结果:

编辑成功?。
状态:不通过,竞赛编辑题目可重复 未做校验
4. 竞赛管理页
4.1 查询竞赛
4.1.1 按时间
- 选择有效时间区间→搜索
预期结果:列表展示该时间段所有竞赛。
实际结果:

状态:通过 - 结束时间早于开始时间→搜索
预期结果:组件校验阻止操作,不执行数据库查询。
实际结果:
组件el-date-picker自动将较早的时间定位为开始时间
状态:通过
4.1.2 按标题
-
输入完整存在标题→搜索
预期结果:竞赛列表展示对应竞赛信息。
实际结果:

状态:通过
-
输入标题前/中/后缀→搜索
预期结果:列表展示所有符合条件竞赛。
实际结果:
前缀:

中缀:

后缀:

状态:通过
-
输入不存在标题→搜索
预期结果:竞赛列表为空,弹窗提示 您所查找的用户不存在
实际结果:

状态:通过
-
标题时间都为空直接搜索
预期结果:竞赛列表保持不变 弹窗提示 请输入要查询的竞赛标题或时间
实际结果:

状态:通过
4.2 重置竞赛
- 标题与时间都有值→点击重置
预期结果:条件搜索框清空,列表展示全部竞赛信息。
实际结果:


状态:通过
4.3 发布 / 撤销发布竞赛
-
未到开赛时间竞赛→发布
预期结果:状态tag变绿“已发布”,DB/缓存同步更新,用户端竞赛列表可见。
实际结果:
发布大凯杯

数据库status字段更改

缓存存储

用户端竞赛列表可见:

状态:通过
-
已发布竞赛→撤销发布
预期结果:状态tag变红“未发布”,DB/缓存同步更新,用户端不可见。
实际结果:

数据库字段更新

缓存数据同步清除

用户端竞赛列表不可见

状态:通过
4.4 删除竞赛
-
未开赛可操作竞赛→删除并确认
预期结果:提示删除成功,管理端竞赛列表不再显示,DB/缓存同步删除。
实际结果:
测试删除”大凯杯“

管理端竞赛列表不展示
数据库同步刷新

缓存同步删除

状态:通过
4.5 竞赛列表
- 翻页功能
预期结果:竞赛列表信息展示无误 ,最终数据对应当前页码
实际结果:
翻页前:
翻页后:

状态:通过
2. 快速连续切换
预期结果:停留在最后一次操作页面,数据准确。
实际结果:待执行
状态:未执行
3. 切换每页数量、多次切换
预期结果:最终页面竞赛信息与页面数据对应,数据稳定。
实际结果:待执行
状态:未执行
4. 指定页码切换功能
预期结果:存在页码跳转;不存在则跳转至最后一页。
实际结果:
存在页码:

不存在页码:

状态:通过
4.6 添加竞赛
- 仅填写基本信息→发布
预期结果:弹窗提示“竞赛当中不包含题目”,留在当前页;数据库仅exam表存信息,缓存无记录,状态未发布,客户端竞赛列表不可见,但管理端竞赛列表可见。
实际结果:


数据库exam表存储信息

缓存未存储中枢制造算法杯

管理端竞赛列表可见

客户端竞赛列表不可见:

状态:不通过 客户端竞赛列表可见 未发布无题目”空壳竞赛“
2. 填写所有必填→发布
预期结果:数据库与缓存同步更新,用户端竞赛列表出现该竞赛。
实际结果:

发布该竞赛,管理端竞赛列表可见

用户端竞赛列表可见:

数据库表同步存储竞赛对应题目关系

缓存存储该竞赛数据

状态:通过
-
未填写任何信息→发布
预期结果:弹窗“请先保存竞赛基本信息”。
实际结果:

状态:通过
-
基本信息未填写竞赛名称→保存
预期结果:弹窗“请先填写竞赛名称”。
实际结果:

状态:通过
4.8 编辑竞赛
-
编辑未发布竞赛:修改标题/时间→发布
预期结果:用户/管理端列表展示编辑后信息,DB/缓存同步更新。
实际结果:
编辑前:

编辑后:

管理端竞赛列表信息:

用户端竞赛列表信息:

数据库信息:

缓存信息:

状态:通过
-
编辑未发布竞赛:标题与已发布竞赛重名→保存
预期结果:弹窗“当前竞赛昵称已存在”,停留当前页,不跳转。
实际结果:

状态:通过
5. 缺陷列表
BUG-ADMIN-001
- 严重程度: P2
- 缺陷描述: 管理员编辑竞赛名称时,可将竞赛名称改为竞赛列表已存在的名称,造成两个昵称相同,但是具体内容包括关联题目不同的竞赛出现,造成用户会混淆竞赛内容,可能报错名、看错信息。数据统计易出错,相同名称可能导致数据合并或遗漏。
- 复现步骤:
- 管理员切换至竞赛管理页面
- 管理员选中一条未发布竞赛并点击编辑按钮
- 修改该竞赛标题为已存在的竞赛标题
- 管理员保存竞赛基本信息
- 状态: 已修复
- 备注: 没有对编辑后竞赛各个参数进行严格校验
BUG-ADMIN-002
- 严重程度: P0
- 缺陷描述: 管理员新增竞赛 仅保存竞赛基本信息,但并无发布或进行题目关联后,在客户端竞赛列表可找到该竞赛,即未发布且无题目的空壳竞赛。 影响用户报名:用户看到列表中的竞赛,点击后发现无题目、无法参与,浪费时间和精力。降低用户信任:多次遇到空壳竞赛,会让用户质疑平台的专业性和内容质量,可能减少使用频率。
- 复现步骤:
1.管理员点击添加竞赛
2.管理员填写竞赛基本信息——标题和时间
3.管理员保存竞赛基本信息并返回列表
4.切换用户端 刷新竞赛列表可见该竞赛 - 状态: 已修复
- 备注: 用户端考试列表查询(friend模块)没有过滤未发布的考试,导致管理员创建但未发布的考试仍会显示给用户
5万+

被折叠的 条评论
为什么被折叠?



