团队作业5——测试与发布(Alpha版本)
| 这个项目属于哪个课程 | 课程链接 |
|---|---|
| 作业要求 | 作业链接 |
| 作业的目标 | 完成团队项目Alpha版本的测试与发布 |
| Github链接 | 仓库地址 |
一、广工枢纽系统测试报告
(一)测试总结
1. 在测试过程中总共发现了多少 Bug?每个类别的 Bug 各多少个?
| Bug 类型 | 数量 | 说明 |
|---|---|---|
| 已确认且已修复的Bug | 6个 | 含前端4个、后端2个 |
| 无法重现的 Bug | 1个 | 在复测时无法成功复现 |
| 属于设计如此,不是 Bug | 3个 | 包含内容加载延时、某些字段为空属于爬虫源站限制 |
| 能力不足无法修复,且未来不修复(大模型特性) | 2个 | 如大模型问答中偶发幻觉、回答格式不统一 |
| 需修复但没有时间,延期到下个版本 | 2个 | 包括搜索结果排序优化、异步加载动画 |
2. 修复的Bug(已修复6个)
- 前端跨域请求失败(CORS 配置错误)
- 问答模式下部分关键词返回空数据
- 时间解析函数错误导致排序异常
- 爬虫抓取的部分字段包含多余 HTML标签
- 前端数据渲染偶发undefined报错
- 后端栏目接口返回顺序错误(未按时间排序)
3. 不能重现的Bug(1个)
- 前端出现短暂白屏,debug 时无法再次复现
4. “就是这样设计的,不是 Bug” (3 个)
- 爬虫源站更新频率不稳定导致数据偶尔为空
- 某些栏目内容本身较短,看起来像“缺失数据”但实际为原站内容如此
- 接口请求大模型时延迟较长,本身就是大模型API的特性(不过已经采用流式回答,看着大模型一点点输出不会让用户感觉等待了很久)
5. 没有能力修复、未来也不修复(2 个)
- 大模型回答偶尔出现轻微幻觉(比如给出不相关的扩展解释)
- 大模型生成的文本格式化不一致(句式或换行方式不同)
这些问题无法从前后端代码层面根本解决,属于大模型固有的不稳定性。
6. 未来版本才修复的 Bug(2 个)
- 栏目页搜索结果排序逻辑优化(当前只按时间排序,未来可以设计按关键词筛选等)
- 页面异步加载缺少 loading 动画(影响体验但非功能性Bug)
7. 场景测试(Scenario Testing)
以下为基于现实用户行为设计的典型场景:
场景 1:学生快速查询校内重要通知
- 用户行为:输入“奖学金”“补考”“选课”等关键词
- 需求:获取最新且准确的学校官方信息
- 系统通过:问答模式 -> 解析问题 -> 检索知识库 -> 返回结果
- 成功点:快速、自动整合来自多个来源的校内通知
场景 2:用户浏览某个主题的全部内容
- 行为:进入“党建快讯”栏目
- 目标:按主题查看新闻列表,了解最近的党建活动
- 系统组合:爬虫 -> 栏目分类 -> 列表展示 -> 分页/筛选
场景 3:校友了解学校活动、近况
- 行为:询问 “校园新闻”或“校友活动”
- 系统帮助用户:整合多个站点信息 + 时间排序,在不需要收藏浏览多个学校网站的情况下了解学校近况
8. 9. 不同类型用户的使用方式 & 需求和目标
| 用户类型 | 需求 & 目标 | 使用方式 | 系统如何满足 |
|---|---|---|---|
| 学生 | 查通知、查竞赛、查课程信息 | 通过栏目模式快速浏览最新公告;在问答模式中输入自然语言查询,如“今天有什么竞赛?”、“查一下课程安排”。 | 问答模式提供智能查询;栏目模式按板块分类显示各类信息。 |
| 教师 | 查教学指南、查官方文件、获取行政通知 | 通过栏目模式定位到目标文档;使用问答模式快速检索政策条目,如“教学日历在哪看?” | 分类浏览提供官方文档;问答模式支持关键词检索与智能解析。 |
| 校外人员 | 了解学校概况、招生就业信息 | 进入系统后按栏目查阅学校简介、招生说明;或使用问答模式提出咨询,如“广工在哪里?”、“最近学校有什么活动?” | 栏目模式提供清晰的学校信息结构;问答模式提供快速简要的解释性回答。 |
10. 软件如何组合功能满足需求
- 爬虫自动汇聚各站点信息
- 知识库清洗、结构化存储
- 问答模式方便用户自然语言提问
- 栏目模式方便按主题浏览
- 统一接口层前后端快速联调
- 测试体系保证功能稳定
11. 测试矩阵(Test Matrix)
| 测试功能 | 测试项 | 操作 | 预期结果 | FireFox | Chrome | Edge |
|---|---|---|---|---|---|---|
| 首页功能 | 初始界面 | 页面加载 | 正常显示首页内容 | ✅ | ✅ | ✅ |
| 首页功能 | 初始界面 | 用户注册 | 正常显示首页内容 | ❌ | ✅ | ✅ |
| 首页功能 | 导航栏 | 点击“主页” | 无变化 | ✅ | ✅ | ✅ |
| 首页功能 | 导航栏 | 点击“社区” | 进入社区页面 | ✅ | ❌ | ✅ |
| 首页功能 | 注册按钮 | 输入正确格式信息 | 注册按钮可点击,弹出成功提示 | ✅ | ✅ | ✅ |
| 首页功能 | 登录按钮 | 输入正确账号密码 | 登录成功,跳转主页 | ✅ | ✅ | ✅ |
| 首页功能 | 忘记密码按钮 | 点击“forget password” | 忘记密码按钮可点击,弹出成功提示 | ✅ | ❌ | ✅ |
| 问答功能 | 问答模式 | 在问答框输入查询内容 | 输出关键词相关内容 | ✅ | ✅ | ✅ |
| 表单功能 | 通知公告 | 点击“图书馆讯” | 显示图书馆相关内容 | ✅ | ✅ | ✅ |
| 表单功能 | 通知公告 | 点击“体育馆讯” | 显示体育馆相关内容 | ✅ | ✅ | ✅ |
| 表单功能 | 通知公告 | 点击“通识公告” | 显示通识公告相关内容 | ✅ | ✅ | ✅ |
| 表单功能 | 通知公告 | 点击“建党快讯” | 显示建党快讯相关内容 | ✅ | ✅ | ✅ |
| 表单功能 | 通知公告 | 点击下方翻页按钮 | 正常显示下一页内容 | ❌ | ✅ | ✅ |
| 表单功能 | 水电服务 | 点击“水电服务” | 正常显示水电服务内容 | ✅ | ✅ | ✅ |
| 表单功能 | 水电服务 | 点击下方翻页按钮 | 正常显示下一页内容 | ❌ | ✅ | ✅ |
| 表单功能 | 后勤报修 | 点击“后勤报修” | 正常显示后勤报修内容 | ✅ | ✅ | ✅ |
| 表单功能 | 后勤报修 | 点击下方翻页按钮 | 正常显示下一页内容 | ❌ | ✅ | ✅ |
| 表单功能 | 教务信息 | 点击“教务信息” | 正常显示教务信息内容 | ✅ | ✅ | ✅ |
| 表单功能 | 教务信息 | 点击下方翻页按钮 | 正常显示下一页内容 | ❌ | ✅ | ✅ |
| 表单功能 | 关于我们 | 点击“关于我们” | 正常显示关于我们内容 | ✅ | ✅ | ✅ |
| 表单功能 | 个人设置 | 点击“个人设置” | 正常显示修改密码内容 | ✅ | ✅ | ✅ |
| 表单功能 | 个人设置 | 点击“确定” | 确定按钮可点击,弹出成功提示 | ✅ | ❌ | ✅ |
| 表单功能 | 退出登录 | 点击“退出登录” | 正常显示询问是否退出 | ✅ | ✅ | ✅ |
| 表单功能 | 退出登录 | 点击“取消” | 正常显示首页内容 | ✅ | ✅ | ✅ |
| 表单功能 | 退出登录 | 点击“确定” | 确定按钮可点击,弹出成功提示 | ✅ | ✅ | ✅ |
分析测试矩阵的整体数据:
Edge浏览器展现出最优的适配性能,是本次测试中运行最丝滑的浏览器。具体表现为在全部25项测试项中,Edge浏览器的测试结果均为“通过”(✅),无任何功能异常情况。无论是首页初始界面的加载与注册操作、导航栏各模块的跳转切换,还是表单功能中通知公告查看、水电服务调用、个人设置修改等复杂操作,Edge浏览器都能精准响应操作指令,稳定输出预期结果,未出现按钮失效、页面跳转异常、内容显示错误等问题,操作流畅度与功能稳定性表现突出。
算法测试用例描述
- clean data
test_data_clean会话启动后,成功收集到 1 个测试用例。
- 用例路径:
test_data_clean.py::test_clean_json - 执行结果:PASSED(通过)
- 总耗时:0.06秒(1个测试用例全部通过)
数据清洗文件成功列表如图所示:

- keyword extractor
测试会话启动后,成功收集到 4 个测试用例。
- 整体执行状态:全部通过(4 passed)
- 总耗时:0.14秒
数据查询关键词成功列表如图所示:

关键词搜索用例详情
- 用例路径:
test_keyword_extractor.py::test_search_keyword_skill- 执行结果:PASSED
- 功能说明:测试关键词「技能」的搜索
- 输出信息:✅ 查找到「技能」相关内容共 2 条!
- 用例路径:
test_keyword_extractor.py::test_search_nonexistent_keyword- 执行结果:PASSED
- 功能说明:测试搜索不存在的关键词(「不存在的关键词 123」)
- 输出信息:✅ 查找到「不存在的关键词 123」相关内容共 0 条!
- 用例路径:
test_keyword_extractor.py::test_search_empty_keywords- 执行结果:PASSED
- 功能说明:测试搜索空关键词列表
- 输出信息:✅ 查找到「」相关内容共 0 条!
- 用例路径:
test_keyword_extractor.py::test_invalid_folder_path- 执行结果:PASSED
- 功能说明:测试无效的文件夹路径
- 输出信息:错误:文件夹不存在,请检查路径:../invalid_folder
- time train
测试会话启动后,成功收集到 4 个测试用例。
- 整体执行状态:全部通过(4 passed)
- 总执行耗时:0.03秒
数据时间转换成功列表如图所示:

- 图书馆爬虫功能测试结果分析
测试会话启动后,成功收集到 3 个测试用例。
- 整体执行状态:全部通过(3 passed)
- 警告数量:3个
- 总执行耗时:41.77秒
各测试用例详情
- 用例路径:
test_library.py::test_get_page_urls- 执行结果:PASSED
- 测试功能:从图书馆首页获取文章列表
- 用例路径:
test_library.py::test_get_article_content- 执行结果:PASSED
- 测试功能:从文章详情页获取正文内容
- 用例路径:
test_library.py::test_crawl_library_func- 执行结果:PASSED
- 测试功能:完整爬取流程(含数据保存)
library爬取执行详情如图所示:


library爬取测试结论:
图书馆爬虫的「文章列表获取」「文章内容抓取」「完整爬取+保存」核心功能均通过验证,成功抓取多页文章数据并保存到指定路径,功能表现符合预期(3个警告需进一步排查非核心逻辑的提示信息)。
- notice爬虫功能测试结果分析
测试会话启动后,成功收集到 4 个测试用例。
- 整体执行状态:1个失败、3个通过(1 failed, 3 passed)
- 警告数量:4个
- 总执行耗时:45.64秒
各测试用例详情
- 用例路径:
tests_notice.py::test_parse_list_page- 执行结果:PASSED
- 测试功能:从通知列表页获取文章信息
- 执行说明:成功解析列表页,验证文章包含title/url/date字段且URL合法
- 用例路径:
tests_notice.py::test_parse_detail_page- 执行结果:FAILED
- 测试功能:从通知详情页获取正文内容
- 报错信息:TypeError: parse_detail_page() missing 1 required positional argument: 'headers'
- 核心原因:调用parse_detail_page时仅传入文章URL,未传入该函数必需的headers参数
- 用例路径:
tests_notice.py::test_crawl_all_pages- 执行结果:PASSED
- 测试功能:爬取多页通知
- 执行说明:成功抓取多页通知列表(覆盖2020-2025年通知),包括:
- 抓取列表页:https://www.gdut.edu.cn/index/tzgg.htm(2025年通知)
- 抓取列表页:https://www.gdut.edu.cn/index/tzgg/10.htm 至 1.htm(2020-2025年历史通知)
- 验证所有爬取文章包含title/url/date/content完整字段
- 用例路径:
tests_notice.py::test_crawl_notice_func- 执行结果:PASSED
- 测试功能:完整爬取流程(含文件保存)
- 执行说明:成功爬取所有通知并保存至指定路径:
D:\GdutInfoHub\tests\tests_crawler\test_notice_temp\notice_news_raw.json
notice爬取执行详情如图所示:


notice爬取测试结论分析:
- 报错类型:TypeError(参数缺失)
- 根因:
parse_detail_page函数定义时要求传入headers参数(请求头),但测试用例中仅传入了文章URL,未传递该参数,导致函数调用失败。 - 影响范围:仅测试用例本身报错,不影响实际爬取功能(
crawl_all_pages/crawl_notice_func内部调用时已传入headers参数)。
- tool_func工具函数测试结果分析
测试会话启动后,成功收集到 6 个测试用例。
- 整体执行状态:全部通过(6 passed)
- 警告数量:1个
- 总执行耗时:1.11秒
各测试用例详情
- 用例路径:
tests_tool_func.py::test_get_html_success- 执行结果:PASSED
- 测试功能:正常URL能否成功获取HTML
- 执行说明:成功从广工官网通知页(https://www.gdut.edu.cn/index/tzgg.htm)获取非空HTML字符串,验证了正常请求的处理能力
- 用例路径:
tests_tool_func.py::test_get_html_invalid_url- 执行结果:PASSED
- 测试功能:无效URL是否返回空字符串
- 执行说明:向无效URL(http://invalid.gdut.test.nonexist)请求时,
get_html返回空字符串,与测试预期完全匹配
- 用例路径:
tests_tool_func.py::test_get_html_timeout- 执行结果:PASSED
- 测试功能:超时请求是否返回空字符串
- 执行说明:向超时URL(http://httpstat.us/200?sleep=20)发起1秒超时请求,
get_html返回空字符串,异常处理逻辑符合预期
- 用例路径:
tests_tool_func.py::test_save_json_creates_directory- 执行结果:PASSED
- 测试功能:save_json是否能自动创建不存在的目录
- 执行说明:自动创建临时目录
tool_func_temp,并生成文件:D:\GdutInfoHub\tests\tests_crawler\tool_func_temp\test_news_raw.json
- 用例路径:
tests_tool_func.py::test_save_json_writes_correct_content- 执行结果:PASSED
- 测试功能:save_json是否能正确写入JSON内容
- 执行说明:读取生成的JSON文件,验证写入内容与测试输入的[{"title":"测试文章1","content":"内容1"},{"title":"测试文章2","content":"内容2"}]完全一致
- 用例路径:
tests_tool_func.py::test_save_json_correct_filename- 执行结果:PASSED
- 测试功能:save_json生成的文件名是否正确
- 执行说明:生成文件名
notice_test_raw.json,符合{news_type}_raw.json的命名规则

tool_func测试结论
- 功能完整性:
get_html(正常请求/无效URL/超时请求)和save_json(目录创建/内容写入/文件名规范)的所有核心场景均验证通过,函数逻辑与预期完全匹配; - 执行效率:6个测试用例总耗时仅1.11秒,无性能瓶颈,满足爬虫工具函数的高效性要求;
- 异常处理:
get_html对网络异常的处理逻辑(返回空字符串)稳定可靠,无崩溃或非预期返回值; - 警告说明:1个警告为非核心逻辑的提示信息,未影响函数功能稳定性,可暂不处理。
综上,tool_func工具函数的所有测试场景均通过验证,可直接用于爬虫流程中的HTML获取和JSON数据保存环节。
12. Alpha 版本发布的出口条件(Exit Criteria)
我们认定以下条件满足后可发布 Alpha 版本:
系统达到以下条件即可认定为 Alpha 可发布:
- 所有核心功能均可正常使用:
- 问答模式
- 栏目模式
- 用户登录注册
- 多站点爬虫
- 已修复全部高优先级 Bug(不崩、不挂、不阻塞核心流程)
- 测试覆盖关键场景,且结果通过
- 性能满足基础需求(页面 2s 内加载完成)
- 已完成最小可用的 UI 与交互流程
- 已产出测试文档、接口文档、部署说明
(二)测试过程
在本次 Alpha 版本的测试周期中,测试负责人带领团队以真实用户的视角逐步推进测试流程。从测试目标的明确开始,团队首先搭建了稳定的测试环境,包括多种浏览器(Chrome、Edge)和不同操作系统(Windows 10、Windows 11),并确保后端服务以及本地知识库能够在相同基础上顺利运行。随后,为让测试尽可能贴近实际使用场景,我们预先编写了覆盖通知展示、问答响应、边界输入行为与接口数据格式的测试用例,并在正式测试前完成了所有准备工作。
随着测试执行阶段的开始,团队先从最基本的功能验证入手。我们进入每一个栏目页面,逐个触发分页、过滤等操作,观察数据是否按预期呈现;紧接着切换到问答模式,让系统回答诸如“寒假时间是什么时候?”、“学校近期的竞赛有哪些?”等常见问题,同时不断输入空查询、无效关键词、重复请求等异常情况,测试系统的健壮性。在接口测试环节,测试人员以前端的身份发送各种正确与错误的请求体,检查API的容错能力并确保跨域配置不会成为影响联调的障碍。
为了进一步验证系统在连续使用下的稳定性,团队进行了基础级别的性能测试。我们连续多次向问答接口发送请求,观察响应是否稳定;同时不断切换栏目页面,确保不同数据源的渲染不会出现失败或延迟。最后,通过一系列场景测试,我们将学生、老师、新生等不同类型用户在真实校园环境下的典型需求转化为可执行场景,再逐一走查。例如,本科生可能快速浏览竞赛消息,研究生关注政策与文件,新生希望查询校园网和图书馆使用方式,而老师则更看重公告的清晰呈现。在这些过程中,我们检验系统是否真正能为每类用户提供顺畅的访问体验。
整体而言,测试流程顺利推进,系统在功能性与稳定性方面已接近可发布的 Alpha 阶段标准。至于测试过程中发现的问题与异常情况、测试方法,均已在上方(一)1. 与10.进行了完整列出与分类。
二、ALPHA 版本发布说明
(一)功能介绍
广工枢纽(GDUT Hub)是广东工业大学校园智能信息聚合平台,支持师生获取通知公告、水电服务、后勤报修、教务信息等校内内容,实现校园信息的聚合与智能化服务。
1. 登录页面
功能流程
- 用户在对应输入框填写学号 / 工号、密码
- 点击 “Sign In” 按钮提交身份验证请求
- 验证通过后跳转至系统首页

1.1 输入密码登录
- 用户填写用户名、密码至对应输入框
- 点击 “Sign Up” 按钮提交注册请求
![]()
1.2 忘记密码
- 登录界面点击 “Forget password?” 触发弹窗
- 查看弹窗内的密码找回说明
- 点击关闭按钮(×)返回注册界面

2. 登录成功进入首页
- 可通过侧边栏 / 快捷入口访问对应校园服务功能
- 在查询输入框提交内容(如假期安排)以获取对应信息

2.1 自然语言问答
用户输入问题,系统结合知识库与大模型生成回答
注:因为安全考虑api key无法上传github,使用问答模式需要找团队成员提供api key

2.2 信息栏目
- 跳转到相关关键词条目,如校园通知、水电服务、教务公告、后勤通知等
- 按类型分类:校园通知、水电服务、教务公告、后勤通知等。
- 详情查看:点击通知标题查看完整内容。
- 关键词搜索:可按关键词、时间区间筛选通知。
- 通知更新:结合爬虫实时更新水电服务公告。
- 考试安排:提供各类考试、比赛时间、地点及报名信息。
- 公告与提醒:教务通知、选课提醒等集中显示。
2.2.1 通知公告




2.2.2 水电服务

2.2.3 后勤服务

2.2.4 教务信息

3. 关于我们
关于我们团队详细介绍

4. 个人设置
对账号进行密码修改

5. 退出登录
完成操作后退出登录

(二)修改的缺陷
由于本次为项目的第一版 Alpha 版本,主要目标是完成基础功能的整合与联调,因此不存在旧版本缺陷的修改内容。本版本中出现的问题均为首次发现,并在测试报告中进行了分类整理。
(三)对运行环境的要求
为了确保系统正常运行,建议使用以下环境配置:
- 操作系统:Windows / macOS / Linux
- 主流浏览器如Edge,可联网
- Python:3.10+
(四)安装方法
详情参考Github中README部分。
# 克隆代码
git clone https://github.com/sevanthea7/GdutInfoHub.git
# 环境配置(仅首次使用前需要)
cd GdutInfoHub/gdut-info-hub
npm install
pip install volcengine-python-sdk[ark] jieba flask
# 启动前端
cd GdutInfoHub/gdut-info-hub
npm run dev
# 启动后端
python -m src.app.app
(五)问题与限制
当前版本仍处于 Alpha 阶段,系统暂未部署统一的后端服务,因而带来以下问题与限制:
1. 用户需要自行部署服务
问题 / 限制:
系统目前不提供在线后台,用户必须在本机或自有服务器上手动运行 Flask 后端,初次使用可能略有门槛。
解释:系统运行成本小且功能精简,我们认为后期需要维护的功能较少且不需要依赖平台服务器。同时本地部署也不会导致不存在因后端下线或维护而导致的服务不可用情况。
2. 用户需自行管理 API key,自理调用成本
问题 / 限制:
模型 API 的调用费用(如使用第三方大模型)由用户自行承担,需要自己管理开销。
解释:
- 允许用户自由切换不同 AI 模型服务商,使用更便宜或免费的 API,甚至自建或本地推理模型。不会被强制绑定到某一种付费模式,实现完全的“可替换性”和“成本可控”。
- API key 完全由用户管理,不会上传或暴露给任何第三方,大大降低隐私与安全风险。我们对“注册信息文件、key 文件、配置文件”进行了明确的区分,目录结构清晰,用户替换自己的 key 非常简单、安全。
(六)发布方式及发布地址
本次 Alpha 版本以源代码方式发布,均托管于 GitHub,以便团队协作、问题追踪与版本更新。
- GitHub 仓库地址:
https://github.com/sevanthea7/GdutInfoHub
用户可直接在仓库中获取前端与后端所有代码,按照上述步骤或README中的操作指引即可完成部署与运行。


浙公网安备 33010602011771号