博客系统测试

📅 2026/7/15 4:37:33
博客系统测试
一、项目背景1.项目背景与意义随着博客系统日常迭代频繁涉及登录、列表展示、详情浏览、编辑发布等多页面交互场景。每次版本上线前测试人员都需要手工验证核心业务流程耗时耗力且容易遗漏边界场景。为提升回归测试效率本次项目引入 Selenium WebDriver 自动化测试框架对博客系统核心功能进行 UI 自动化覆盖。通过自动化脚本替代重复性手工操作实现核心流程一键回归登录、列表、详情、编辑发布等主流程可全自动执行异常场景自动验证未登录拦截、弹窗提示、空密码校验等异常场景自动覆盖可持续集成后续版本迭代中可快速执行冒烟用例提前发现前端交互缺陷2.项目概述本项目基于Python Selenium WebDriver搭建自动化测试框架针对博客系统的四大核心页面进行自动化测试覆盖页面功能登录页用户登录认证博客列表页展示所有博客博客详情页查看单篇博客内容博客编辑页发布/修改博客测试覆盖登录态和未登录态两种场景验证页面渲染、权限拦截、弹窗提示、数据提交等核心交互。3. 已实现的主要功能登录模块支持正确账号密码登录错误密码/空密码触发 Alert 弹窗提示博客列表页未登录访问自动弹窗跳转登录页登录后展示个人信息、导航菜单、博客列表博客详情页登录用户可查看博客详细内容可对博客进行编辑和删除操作博客编辑页支持标题富文本正文编辑登录态可正常发布未登录态发布被拦截4. 测试项目相关信息系统测试地址博客登陆页自动化代码仓库清逍/blog-auto-test配套文档《博客系统测试计划》、《产品需求文档》、《前端 UI 设计图》测试技术栈Python3 Selenium4 WebDriverWait 隐式等待 ActionChains 富文本操作二、测试安排模块子模块提测时间测试工时排期进度备注用户登录模块登录功能未登录状态访问主页、写博客功能7.12博主0.2d7.12测试完成正确登录成功错误密码/空密码弹窗拦截正常博客列表模块未登录拦截个人信息、导航菜单、博客列表展示7.12博主0.2d7.12测试完成区分登录/未登录状态校验页面展示和跳转逻辑博客详情模块查看博客详细内容编辑博客、删除博客7.13博主0.2d7.13测试完成登录用户可查看博客详细内容可对博客进行编辑和删除操作博客编辑模块空内容校验、标题富文本正文编辑、表单提交7.13博主0.2d7.13测试完成覆盖登录/未登录两种状态标题富文本完整编辑流程验证自动化回归四大核心页面自动化脚本开发调试7.13博主0.2d7.13测试完成PythonSelenium框架搭建封装通用工具类Driver管理、Alert处理、截图三、测试分类一自动化功能测试博客系统测试博客系统自动化测试演示1. 编写Web测试用例登录页面详细完成用例2. 搭建Python自动化项目2.1 环境配置准备Python 3.12 环境安装通过 pip 安装 selenium、webdriver-manager 依赖包使用 WebDriverManager 自动管理 Chrome 驱动版本无需手动下载配置项目目录分层common 公共工具层、cases 测试用例层实现代码复用导入 Selenium 核心组件WebDriverWait 隐式等待、ActionChains 键盘操作、By 元素定位。2.2 封装公共工具类import datetime import os.path import sys import time from selenium import webdriver from selenium.common.exceptions import NoAlertPresentException from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager class Driver: def __init__(self): options webdriver.ChromeOptions() self.driver webdriver.Chrome(serviceService(ChromeDriverManager().install()), optionsoptions) # 隐式等待 - 全局生效创建浏览器对象时加一次就行 self.driver.implicitly_wait(10) def getScreenshot(self): dirname datetime.datetime.now().strftime(%Y-%m-%d) if not os.path.exists(../images/ dirname): os.makedirs(../images/ dirname) filename sys._getframe().f_code.co_name - datetime.datetime.now().strftime( %Y-%m-%d-%H%M%S) .png self.driver.save_screenshot(f../images/{dirname}/ filename) def HandleLoginAlert(self): #弹窗不一定立刻出现最好先等待一下然后进行处理否则可能出现问题 time.sleep(1.5) for _ in range(10): try: alert self.driver.switch_to.alert print(关闭弹窗:,alert.text) alert.accept() time.sleep(0.1) except NoAlertPresentException: break # 公共获取用户名 def get_name(self): return zhangsan BlogDriver Driver()2.3 项目目录结构此处仅放置博客登录页代码作为展示import time from selenium.webdriver.common.by import By from common.Utils import BlogDriver class BlogLogin: url driver def __init__(self): self.url http://47.108.157.13:8090/blog_login.html self.driver BlogDriver.driver self.driver.get(self.url) def TestLoginSuccess(self): #正确的账号和密码 self.driver.find_element(By.CSS_SELECTOR, #username).clear() self.driver.find_element(By.CSS_SELECTOR, #password).clear() self.driver.find_element(By.CSS_SELECTOR, #username).send_keys(zhangsan) self.driver.find_element(By.CSS_SELECTOR, #password).send_keys(123456) time.sleep(1) self.driver.find_element(By.CSS_SELECTOR, #submit).click() time.sleep(1) self.driver.find_element(By.CSS_SELECTOR, body div.container div.left div h3) def TestLoginFail(self): #正确的账号和错误的密码 self.driver.find_element(By.CSS_SELECTOR, #username).clear() self.driver.find_element(By.CSS_SELECTOR, #password).clear() self.driver.find_element(By.CSS_SELECTOR, #username).send_keys(zhangsan) self.driver.find_element(By.CSS_SELECTOR, #password).send_keys(111) self.driver.find_element(By.CSS_SELECTOR, #submit).click() time.sleep(2) BlogDriver.HandleLoginAlert() # 错误的账号和正确的密码 self.driver.find_element(By.CSS_SELECTOR, #username).clear() self.driver.find_element(By.CSS_SELECTOR, #password).clear() self.driver.find_element(By.CSS_SELECTOR, #username).send_keys(heihei) self.driver.find_element(By.CSS_SELECTOR, #password).send_keys(123456) self.driver.find_element(By.CSS_SELECTOR, #submit).click() time.sleep(2) BlogDriver.HandleLoginAlert() # 账号为空 self.driver.find_element(By.CSS_SELECTOR, #username).clear() self.driver.find_element(By.CSS_SELECTOR, #password).clear() self.driver.find_element(By.CSS_SELECTOR, #submit).click() time.sleep(2) BlogDriver.HandleLoginAlert() #密码为空 self.driver.find_element(By.CSS_SELECTOR, #username).clear() self.driver.find_element(By.CSS_SELECTOR, #password).clear() self.driver.find_element(By.CSS_SELECTOR, #username).send_keys(zhangsan) self.driver.find_element(By.CSS_SELECTOR, #submit).click() time.sleep(2) BlogDriver.HandleLoginAlert()所有模块测试用例通过 RunTest.py 批量执行2.4 自动化测试执行过程中发现的业务缺陷1.博客登录页面性能缺陷在首次打开博客登录页面时页面渲染速度极慢需要等待数秒才能成功渲染完毕进而支持操作。2.博客列表页面弹窗缺陷在未登录状态下访问博客列表页会弹出弹窗提醒返回登录页面进行登录问题出在此弹窗会出现两次需要确认两次才可回到登录页面。自动化执行结果总用例 8 条正常通过 8 条。二性能测试1. 模拟并发访问项目事务各页面4 个接口每个接口 150 样本响应时间长,吞吐量小或相对稳定可能系统达到了性能瓶颈响应时间短,吞吐量大性能越好总样本 600 条全部接口异常率 0%无报错、无接口失败功能可用性达标通过观察线程响应图发现最后有一个线程没有退出分析一下聚合列表推测核心原因博客列表接口查询耗时极长最高 68 秒该线程迟迟退出不了因为没有得到相应2. JMeter 150 并发压测报告总结2.1 基础运行稳定性本次压测总并发 150 线程4 个接口登录、博客列表页、博客详情页、博客添加各 150 次请求合计 600 次采样请求错误率 0%请求通过率 100%。150 并发下服务未宕机、无业务报错不存在并发锁、数据库崩溃、服务停机类致命故障基础业务逻辑健壮。少量博客列表页出现TruncatedChunkException数据截断异常属于大数据包传输分片异常虽未统计为业务失败但反映大列表返回报文传输存在隐患。2.2 各接口性能瓶颈拆解核心指标对照1. 博客列表页系统最严重瓶颈响应耗时极差平均 26921ms约 27 秒最大 75342ms近 94 秒99 分位高达 73339.23msAPDEX 仅 0.02远低于合格标准0.75几乎全部用户体验极差吞吐量仅 7.84 req/s但单次返回数据量巨大出现报文截断报错问题根源未做分页全量查询一次性拉取海量数据数据库查询 报文传输双重耗时并发越高响应延迟膨胀越严重完全无法满足正常用户访问。2. 博客详情页平均响应 11842.59ms约 11.8 秒99 分位 30007.03ms30 秒APDEX 0.15用户体验极差吞吐量仅 1.84 req/s查询效率低下大概率存在无索引、循环查询、无缓存问题。3. 登录接口平均响应 5652.65ms5.6 秒99 分位 20368.36ms20 秒APDEX 0.22大量用户等待超时感明显吞吐量 4.79 req/s登录校验逻辑 / 数据库查询存在性能损耗。4. 博客添加唯一性能合格接口平均响应仅 54.53ms最大 351ms99 分位 346.41ms全部请求耗时低于 1 秒APDEX 达到 1.0完全满足体验标准吞吐量 1.99 req/s写入操作本身逻辑简单无大量数据查询性能表现最优。2.3 系统整体性能问题1. 整体吞吐能力薄弱4 个接口合计总吞吐量仅 7.34 req/s系统承载并发能力极差少量用户同时访问就会出现长时间页面加载。2. 负载越高性能衰减越明显150 并发稳定运行时博客列表页延迟持续走高说明存在累积型性能损耗数据库查询缺少索引、热点数据无内存缓存、存在 N1 循环查询等底层问题。3. 高并发扩容风险当前仅 150 并发就出现数十秒级响应延迟、大数据报文截断异常若直接将并发提升至 200会出现大面积请求超时、服务响应雪崩无法支撑更大访问量。4. 用户体验整体崩盘全局 APDEX 仅 0.347低于 0.5 的容忍阈值除新增接口外其余核心页面列表、详情、登录均无法满足 500ms、1500ms 的体验标准用户等待感极强。四、遗留风险1. 博客列表接口存在致命性能瓶颈150 并发下平均响应 27 秒、最大近 94 秒存在TruncatedChunkException大数据包截断报错接口未实现分页、无热点数据缓存数据库全量查询导致并发越高加载延迟越严重线上流量高峰期极易出现页面加载超时、数据传输失败。2. 前端页面交互缺陷未修复未登录访问列表页会重复弹出登录拦截弹窗需多次确认才能跳转登录页面首次渲染缓慢自动化执行时易因页面未加载完成引发脚本不稳定。3. 自动化测试体系不完善脚本强依赖页面 DOM 元素结构前端改版后需大量修改定位代码未配置定时 CI 自动执行版本迭代回归只能手动启动脚本测试维护、冒烟回归效率偏低。4. 本次性能测试覆盖范围存在局限性本轮仅完成 150 并发梯度压力测试受本次测试周期与资源限制暂未开展 200 以上极限并发压测、长时间稳定性耐久测试暂未验证系统持续高负载场景下内存泄漏、连接池耗尽等潜在隐患后续迭代阶段可补充该两类测试完善性能评估。五、测试结果评估1. 基础业务功能可用低流量环境可临时上线自动化 8 条核心用例全部通过150 并发压测整体错误率 0%无服务宕机、数据库崩溃、并发锁死等阻断性故障单用户、少量用户访问流程可正常使用。2. 自动化脚本完成核心流程覆盖但执行稳定性一般脚本覆盖登录、列表、详情、编辑发布全业务链路可用于迭代版本冒烟回归但受页面渲染慢、重复弹窗缺陷影响执行过程偶发等待超时、弹窗处理异常需优化等待策略、封装更强的弹窗兼容逻辑。3. 系统并发承载能力薄弱高流量场景用户体验极差博客列表是系统核心短板全局 APDEX 仅 0.347 远低于体验合格线登录、详情页面 99 分位响应达到 20~30 秒少量用户同时访问就会出现长时间页面加载流量高峰会引发大面积卡顿、报文传输报错。4. 上线前优化优先级明确后续需补充全链路测试上线前优先完成博客列表分页改造、数据库查询索引优化、Redis 热点缓存、接口报文压缩同步修复前端重复弹窗、页面慢渲染问题待性能优化完成后补充极限并发压测、长时间稳定性测试并搭建 CI 自动化定时回归流水线。