1. 项目背景
本项目为一套基于Web的博客系统,主要功能包括用户登录、文章首页浏览、详情查看、编辑与发布等。为了保障系统的稳定性与用户体验,开展全面的自动化功能测试,确保核心模块在常规及异常场景下均能稳定运行。
2. 测试范围
功能测试范围:
用户登录(成功/失败)
首页功能(登录状态与未登录状态)
博客详情页(查看、编辑、删除)
博客编辑页(发布文章、文章校验)
3. 需求分析
功能测试需求:
支持正确登录系统并跳转至首页
对异常登录信息进行提示(如弹窗、警告)
首页加载文章摘要及交互功能(查看全文、写博客)
博客详情页完整展示标题、时间、正文
博客编辑页支持内容输入、清空、发布及验证展示内容
4. 测试设计
4.1 功能测试设计
为确保博客系统核心模块在各种使用场景下均能正常运行,设计以下功能测试用例:
登录模块测试用例
用例编号 | 用例名称 | 输入数据 | 预期结果 |
---|---|---|---|
TC01 | 成功登录 | 用户名:zhangsan,密码:123456 | 登录成功,进入首页,显示用户昵称 |
TC02 | 用户名错误 | 用户名:zhang,密码:123456 | 弹窗提示“用户名或密码错误” |
TC03 | 密码错误 | 用户名:zhangsan,密码:123 | 弹窗提示“用户名或密码错误” |
TC04 | 空密码 | 用户名:zhangsan,密码为空 | 弹窗提示“密码不能为空”或相似提示 |
TC05 | 空用户名 | 用户名为空,密码:123456 | 弹窗提示“用户名不能为空”或相似提示 |
TC06 | 用户名密码均为空 | 用户名为空,密码为空 | 弹窗提示“用户名和密码不能为空” |
首页模块测试用例
用例编号 | 用例名称 | 测试条件 | 预期结果 |
---|---|---|---|
TC07 | 登录后首页展示 | 已登录 | 页面展示文章标题、头像、写博客按钮等 |
TC08 | 登录后点击“查看全文” | 已登录 | 跳转到博客详情页 |
TC09 | 登录后点击“写博客” | 已登录 | 跳转到写博客页面,展示标题输入框 |
TC10 | 未登录访问首页 | 未登录状态 | 可以查看部分内容,无法进入详情和编辑页 |
TC11 | 点击注销 | 已登录 | 退出登录,返回登录页面 |
详情页模块测试用例
用例编号 | 用例名称 | 测试步骤 | 预期结果 |
---|---|---|---|
TC12 | 查看博客详情 | 点击首页中的“查看全文” | 正确展示文章标题、时间、正文等 |
TC13 | 点击编辑按钮 | 进入详情页后点击“编辑” | 跳转到编辑页面,显示标题输入框 |
TC14 | 点击删除按钮 | 点击“删除”按钮 | 弹窗提示是否确认,点击取消则不删除 |
编辑页模块测试用例
用例编号 | 用例名称 | 测试输入 | 预期结果 |
---|---|---|---|
TC15 | 发布新博客文章 | 标题:文章标题,内容:文章内容 | 回到首页,文章展示在首页列表顶部 |
TC16 | 清空内容后再输入 | 使用 CodeMirror 清空并重新输入 | 正确提交并显示新内容 |
TC17 | 标题或内容为空 | 空标题或空内容 | 提交失败,提示内容不能为空 |
4.2 自动化测试用例设计
技术框架与方法
基于 Python 的 Selenium WebDriver 框架。
所有用例以类与方法的方式组织,按模块拆分(Login、List、Detail、Edit)。
全局显式等待机制:WebDriverWait
+ expected_conditions
,确保页面元素加载完成。
自定义截图工具 getScreeShot()
用于失败记录和回溯分析。
自动化用例结构设计(示例)
python
# 登录成功用例
def LoginSucTest(self):
self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#username"))).send_keys("zhangsan")
self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#password"))).send_keys("123456")
self.wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#submit"))).click()
self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "body > div.container > div.left > div > h3")))
BlogDriver.getScreeShot()
# 编辑文章用例,操作 CodeMirror 输入内容
editor = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#editor > div.CodeMirror")))
self.driver.execute_script("arguments[0].CodeMirror.setValue('文章内容');", editor)
自动化模块覆盖
模块 | 自动化脚本类 | 覆盖方法 |
---|---|---|
登录模块 | BlogLogin |
LoginSucTest ,LoginFailTest |
首页模块 | BlogList |
BlogListLogin ,BlogListUnlogin |
详情页模块 | BlogDetail |
BlogDetail 方法内含多步验证 |
编辑页模块 | BlogEdit |
BlogEdit 方法实现文章创建与断言 |
5. 自动化测试核心点总结
全流程操作自动化,覆盖登录、首页、详情、编辑页。
异常用例测试如空密码、错误密码均考虑。
动态元素(如弹窗、跳转页)通过显式等待精准控制。
使用 CodeMirror 编辑器需借助 JavaScript 脚本进行内容操作,是一项技术难点
6. Bug 管理
6.1 Bug 管理目的
Bug管理旨在系统化地记录、跟踪和分析测试过程中发现的问题,确保每一个缺陷都能被识别、评估、优先处理,并在开发修复后重新验证,保障产品质量。
6.2 Bug 记录方式
所有Bug均通过测试执行过程中发现,并结合截图功能
BlogDriver.getScreeShot()
进行留档。每个Bug包含以下字段:
Bug编号
模块
描述
严重程度(致命 / 高 / 中 / 低)
重现步骤
实际结果
预期结果
当前状态(未修复 / 已修复 / 待验证)
截图路径(用于复查)
6.3 Bug 管理表(详细样例)
编号 | 模块 | 描述 | 严重程度 | 状态 | 重现步骤 | 实际结果 | 预期结果 | 截图路径 |
---|---|---|---|---|---|---|---|---|
B01 | 登录模块 | 密码为空时点击登录无提示 | 中 | 已修复 | 1. 输入用户名;2. 留空密码;3. 点击登录 | 页面无反应,无弹窗提示 | 应弹窗提示“密码不能为空” | ../images/LoginFailTest-2025-06_20-113015.png |
B02 | 编辑模块 | 内容编辑器无法用 send_keys 输入 |
高 | 已解决 | 1. 登录;2. 点击“写博客”;3. 尝试输入内容 | 无法输入内容,send_keys 无效 |
可正常输入内容 | ../images/BlogEdit-2025-06_20-113200.png |
B03 | 编辑模块 | 截图保存路径首次运行时不存在,导致截图失败 | 低 | 未修复 | 执行截图函数 getScreeShot() ,首次运行截图 |
程序报错:找不到路径 | 自动创建路径并保存截图 | 截图失败日志.txt (无截图) |
B04 | 详情模块 | 删除文章按钮点击后未进行确认框验证逻辑测试遗漏 | 中 | 待验证 | 1. 登录;2. 进入详情页;3. 点击删除按钮 | 弹窗提示删除,未覆盖确认“确定”逻辑 | 应测试删除流程包括“确定”及实际删除行为 | ../images/BlogDetail-2025-06_20-113100.png |
6.4 Bug 分析与处理建议
问题分类 | 出现频次 | 原因分析 | 建议 |
---|---|---|---|
表单验证类 | 高 | 前端未对表单输入做空值校验 | 补充前端输入校验与后端验证逻辑 |
编辑器操作类 | 中 | CodeMirror 编辑器使用方式特殊,不能用传统输入方法 | 使用 JavaScript 注入方式操作 setValue() |
弹窗未捕获 | 中 | 弹窗验证覆盖不全,如删除按钮未完全执行“确认”路径 | 增加“确定”路径用例并完善异常处理逻辑 |
工具类异常 | 低 | 截图路径未提前创建,首次运行报错 | 增加路径检测与自动创建逻辑 |