博客系统测试

博客优快云 立即下载

目录

一、项目背景

1. 项目背景与意义

2. 项目概述

2.1 已实现的主要功能包括

2.2 当前系统存在的不足

3. 测试目标

4. 测试项目相关信息

二、测试安排

三、测试分类

(一)自动化功能测试

1. 编写 Web 测试用例​编辑

2. 搭建 Python 自动化项目

2.1 环境配置准备

2.2 封装公共驱动对象

2.3 分模块编写 tests 测试用例

2.4 自动化执行过程中发现的业务缺陷

(二)性能测试 

1. 模拟并发访问项目事务各页面

2. 高并发下系统产生的问题观测与验证

四、遗留风险

五、测试结果评估


项目名称

博客系统

版本号

V1.0

发布类型

迭代发布

测试负责人

本人

测试完成日期

2026.07.02

联系方式

-

评审人

前端开发、后端开发、测试、产品、交互

批准人

产品负责人

一、项目背景

1. 项目背景与意义

随着博客内容发布、浏览、编辑等线上业务需求落地,需要保障系统多页面、多登录状态下功能稳定可用。单纯依靠手工回归测试会消耗大量重复人力,迭代新版本冒烟效率低下。

本次开展手工功能全量测试 + Python Selenium UI 自动化测试,一方面验证系统核心业务流程无阻断缺陷,保障上线质量;另一方面搭建可持续复用的自动化回归框架,后续版本迭代可一键执行冒烟用例,降低重复测试成本,提前发现页面渲染、弹窗拦截、权限控制等前端交互缺陷。

2. 项目概述

本项目为 Web 端博客管理系统,支持访客未登录浏览、登录用户发布 / 编辑 / 删除个人博客、查看他人博客等核心业务,包含四大核心页面:登录页面、博客列表主页、博客详情页、博客编辑页。测试覆盖登录权限控制、页面渲染、博客编辑发布、访客拦截等全场景。

2.1 已实现的主要功能包括

  1. 用户登录:支持正确账号密码登录、错误账号 / 空密码异常拦截弹窗提示;
  2. 博客列表主页:区分未登录 / 登录两种状态,未登录访问自动弹窗并跳转登录页;登录成功展示个人信息、导航菜单、博客列表三大模块;
  3. 博客详情页:登录用户可查看他人博客仅浏览;查看本人博客可跳转编辑页面,修改内容后重新发布;
  4. 博客编辑页:支持直接链接访问、列表 / 详情页跳转进入;区分未登录、登录两种状态,支持标题 + 富文本正文编辑、提交发布;未登录提交触发登录拦截弹窗;
  5. 基础权限控制:未登录用户无法提交发布博客,仅可打开编辑页面填写内容

2.2 当前系统存在的不足

  1. 页面异常弹窗缺陷:打开博客详情页会高频弹出无关弹窗 “1”,遮挡操作按钮,干扰用户操作与自动化脚本执行;
  2. 页面加载性能缺陷:未登录状态直接访问博客编辑页面,页面渲染速度极慢,长时间空白后才加载表单元素;
  3. 交互提示不完善:未登录填写完整博客内容点击提交,仅弹出简易弹窗,无清晰文字引导用户登录;
  4. 前端 DOM 结构不稳定:大量页面元素依靠绝对 XPath 定位,前端微调页面布局会直接导致操作失效;
  5. 无自动化持续集成机制,每次版本更新只能本地手动执行回归脚本。

3. 测试目标

4. 测试项目相关信息

  • 系统测试地址:博客列表页
  • 前端接口文档:后端 Swagger 接口文档
  • 自动化代码仓库:https://gitee.com/dwaekkiyo/blog-auto-test
  • 配套文档:《博客系统测试计划》、《产品需求文档》、《前端 UI 设计稿》
  • 测试技术栈:Python3 + Selenium4 + WebDriverWait 显式等待 + ActionChains 富文本操作

二、测试安排

模块

子模块

提测时间

工时

排期

进度

备注

用户模块

登录功能

06.31

0.2d

06.31

测试完成

登录成功、异常登录场景全覆盖

博客列表模块

主页渲染、未登录拦截、页面三大模块

07.01

0.2d

07.01

测试完成

区分登录 / 未登录两种状态校验页面渲染、弹窗跳转逻辑

博客详情模块

访客浏览、本人博客编辑重发、权限拦截

07.01

0.2d

07.01

测试完成

区分他人 / 本人博客操作权限,处理高频异常弹窗

博客编辑模块

多入口打开页面、表单提交、空内容校验

07.01

0.2d

07.01

测试完成

覆盖登录 / 未登录两种状态,标题、富文本完整编辑流程

自动化回归

四大核心页面自动化脚本开发调试

07.01

0.2d

07.01

测试完成

Python+Selenium PO 分层自动化框架,封装通用工具类

三、测试分类

(一)自动化功能测试

博客系统测试

博客系统未登录情况下提交博客测试

1. 编写 Web 测试用例

登陆界面详细完成用例:

2. 搭建 Python 自动化项目

2.1 环境配置准备
  1. Python3 环境安装,通过 pip 安装 selenium、webdriver-manager 依赖包;
  2. 配置 Chrome 浏览器驱动,使用 WebDriverManager 自动匹配浏览器版本,无需手动配置驱动文件;
  3. 项目目录分层:comm 公共工具层、tests 页面测试用例层,实现代码解耦复用;
  4. 导入 Selenium 核心组件:WebDriverWait 显式等待、ActionChains 键盘操作、By 元素定位、EC 预期条件类。
2.2 封装公共驱动对象

Utils为工具类,用来封装上述方法:driver,统一等待、截图、点击工具方法

import datetime
import os
import sys
import time

from selenium import webdriver
from selenium.common.exceptions import NoAlertPresentException
from selenium.webdriver.edge.service import Service
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager


class Driver:
    driver = ""
    def __init__(self):
        options = webdriver.ChromeOptions()
        self.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()),options=options)
        self.driver.implicitly_wait(5)
        self.driver.maximize_window()

    # 登录页面弹窗+获取弹窗文本+关闭弹窗
    def HandleLoginAlert(self):
        for _ in range(10):  # 强制清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"

    def getScreeShot(self):
        # 创建屏幕截图
        # 图片文件名称:./2024-05-08-173456.png
        dirname = datetime.datetime.now().strftime("%Y-%m-%d")
        # 判断dirname文件夹是否已经存在,若不存在则创建文件夹
        if not os.path.exists("../images/" + dirname):
            os.mkdir("../images/" + dirname)
        # 图片路径:../images/调用方法-2024-05-08/2024-05-08-173456.png
        # 加上调试函数名称
        filename = sys._getframe().f_back.f_code.co_name + "-" + datetime.datetime.now().strftime(
            "%Y-%m-%d-%H%M%S") + ".png"
        self.driver.save_screenshot("../images/" + dirname + "/" + filename)

BlogDriver = Driver()
2.3 分模块编写 tests 测试用例

此处仅放置博客详情页代码作为展示:

# 博客详情页
import time
from selenium.webdriver import Keys, ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from comm.Utils import BlogDriver

class BlogDetailPageTest():
    url = ""
    driver = ""
    def __init__(self):
        self.driver = BlogDriver.driver
        self.url = "http://47.108.157.13:8090/blog_list.html"
        self.driver.get(self.url)
        BlogDriver.HandleLoginAlert()
        time.sleep(2)
    # 查看他人博客
    def ViewOtherBlog(self):
        # 打开一篇其他用户的博客
        BlogDriver.HandleLoginAlert()
        path = '//div[@class="title" and text()="7.1"]/following-sibling::a[@class="detail"]'
        self.driver.find_element(By.XPATH,path).click()
        time.sleep(2)

        self.driver.back()
        time.sleep(2)
    # 查看本人博客
    def viewSelfBlog(self):
        BlogDriver.HandleLoginAlert()
        my_path = '//div[@class="title" and text()="7.1 自动化test"]/following-sibling::a[@class="detail"]'
        self.driver.find_element(By.XPATH,my_path).click()
        time.sleep(2)
        wait = WebDriverWait(self.driver, 10)
        BlogDriver.HandleLoginAlert()
        # 进入编辑页面
        self.driver.find_element(By.XPATH,'/html/body/div[2]/div[2]/div/div[4]/button[1]').click()
        wait = WebDriverWait(self.driver, 15)

        pre_xpath = '//*[@id="editor"]/div[1]/div[6]/div[1]/div/div/div/div[5]/div/pre'
        # 等待pre可点击
        edit_pre = wait.until(EC.element_to_be_clickable((By.XPATH, pre_xpath)))

        # 1. 点击激活输入框
        editor_element = self.driver.find_element(By.XPATH,'//*[@id="editor"]/div[1]/div[6]/div[1]/div/div/div/div[5]/div/pre')
        editor_element.click()
        time.sleep(0.5)

        # 2. 使用 ActionChains 执行 Ctrl+A 全选
        actions = ActionChains(self.driver)
        actions.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform()
        time.sleep(0.3)

        # 3. 删除选中内容
        actions = ActionChains(self.driver)
        actions.send_keys(Keys.DELETE).perform()
        time.sleep(0.3)

        # 4. 输入新博客内容
        actions = ActionChains(self.driver)
        actions.send_keys("这里测试博客编辑内容").perform()
        time.sleep(2)

        # 5. 点击保存
        editor = self.driver.find_element(By.XPATH,'//*[@id="submit"]')
        editor.click()
        time.sleep(0.5)

        BlogDriver.HandleLoginAlert()
        time.sleep(0.5)
        BlogDriver.HandleLoginAlert()
        BlogDriver.getScreeShot()



具体代码链接:BlogAutoTest: 这是我的博客系统自动化测试项目 - Gitee.com

所有模块测试用例通过 RunTest.py 批量执行

2.4 自动化执行过程中发现的业务缺陷
  1. 博客详情页面弹窗缺陷(BlogDetailPageTest):打开任意博客详情页时,频繁弹出无关弹窗 “1”,遮挡编辑、返回按钮,每一步操作前都需要重复调用弹窗处理方法,脚本稳定性差;
  2. 博客编辑页面性能缺陷(BlogEditPageTest.UnLoginShowCheck):未登录状态直接访问编辑页面渲染速度极慢,页面长时间空白,DOM 表单元素加载延迟,极易出现元素定位超时报错;

自动化执行结果:总用例 8 条,正常通过 6 条,2 条偶发执行失败,失败原因为弹窗干扰、页面加载超时

(二)性能测试 

1. 模拟并发访问项目事务各页面

4 个接口,每个接口 150 样本

  • 响应时间长,吞吐量小或相对稳定,可能系统达到了性能瓶颈
  • 响应时间短,吞吐量大,性能越好
  • 总样本 600 条,全部接口异常率 0%,无报错、无接口失败,功能可用性达标

通过观察线程响应图,发现最后有一个线程没有退出

分析一下聚合列表推测核心原因:

  • 博客列表接口查询耗时极长(最高 94 秒),该线程卡在等待接口返回

通过Jmeter生成的报告可以得出:

  • 150 并发压力下所有接口无报错,业务逻辑健壮,不存在并发锁、数据库崩溃、服务宕机问题;
  • 博客列表页为系统最大性能瓶颈未做分页、数据一次性全量查询返回,数据量大导致数据库查询、前端渲染耗时爆炸,并发越高等待越久,最高等待 94 秒,完全无法满足用户使用;
  • 登录、博客详情页面响应时间过长平均耗时 10~20 秒,99% 用户请求需要等待 30 秒左右,用户体验极差;
  • 系统整体吞吐量极低全部接口合计每秒仅处理 6 个请求,并发承载能力弱,少量用户同时访问就会出现长时间加载;
  • 负载越高性能衰减越明显并发 150 稳定运行时,列表页耗时持续上涨,存在数据库查询无索引、内存未缓存、循环查询等性能损耗累积问题。

但若直接提升并发至 200,会再次出现超时、响应雪崩问题

2. 高并发下系统产生的问题观测与验证

  1. 总样本 800,博客列表页 200 样本产生 3 条报错,并发上升,列表一次性返回海量数据,传输体量过大,超出缓冲区限制,直接触发数据截断报错;同时响应时间飙升至几十秒,吞吐量仅 1.58,系统处理能力严重不足
  2. 高并发下服务端分片 / 缓冲区配置不足以承载列表超大返回报文,TCP 传输过程中数据块截断,出现非 HTTP 类异常,低并发时不会触发,只有加压后才暴露传输缺陷
  3. 列表页在并发升高时同时出现超时卡顿 + 数据传输失败,验证列表未做分页、缓存、数据压缩优化

小幅提升并发就出现业务报错,说明现有架构、数据库查询、前端接口传输逻辑无法支撑多用户同时查看博客列表,线上流量一涨就会出现功能异常

当并发增加到每个接口350时

  • 博客列表是致命性能瓶颈,因未做分页,一次性拉取全量数据,出现响应持续飙升、吞吐量持续下降、数据截断报错;后端线程、数据库连接池被慢查询耗尽,大量请求阻塞,JMeter 线程卡死残留;登录、详情、新增接口读写性能正常,仅列表查询承压能力极差

四、遗留风险

  1. 博客列表页存在严重性能瓶颈,高并发响应极慢且出现数据截断报错,未做分页、缓存优化,线上高峰期易加载失败;
  2. 前端页面缺陷未修复:博客详情页高频弹出无关弹窗 “1” 干扰操作;
  3. 自动化脚本依赖 DOM 结构,无定时 CI 执行,维护与回归效率低;
  4. 后续补充极限并发、长时间稳定性压测

五、测试结果评估

  1. 基础功能正常,低并发下业务流程无阻断缺陷,可临时上线;
  2. 自动化脚本覆盖全核心页面,可用于迭代冒烟,但受弹窗、页面加载慢问题影响,脚本稳定性一般;
  3. 系统并发承载能力差,博客列表是致命短板,高流量会严重影响用户体验甚至报错;
  4. 上线前需优先优化列表分页、缓存、报文压缩,同步修复弹窗、页面渲染慢问题;后续补充全链路自动化与极限性能测试。

基于QT+C++开发的高仿QQ聊天软件+源码+项目说明(期末大作业&课程设计&项目开发) 基于QT+C++开发的高仿QQ聊天软件+源码+项目说明,适合期末大作业、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于QT+C++开发的高仿QQ聊天软件+源码+项目说明,适合期末大作业、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于QT+C++开发的高仿QQ聊天软件+源码+项目说明,适合期末大作业、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于QT+C++开发的高仿QQ聊天软件+源码+项目说明,适合期末大作业、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 立即下载

相关推荐

Starlink vs Kuiper vs OneWeb:三大低轨卫星网络架构对比与实战应用场景解析

本文对比分析了Starlink、Kuiper和OneWeb三大低轨卫星网络架构的技术差异与商业应用场景。从轨道设计、通信性能到商业落地,详细解析了各系统在近地卫星网络领域的独特优势与挑战,为未来全球宽带服务格局提供专业见解。

weixin_29255731的博客 809

新手指南|欢迎来到优快云

嘿,新朋友~第一次来到优快云想必有点蒙圈儿吧!C菌吐血整理了一份使用指南,带你轻松玩转优快云~ 一、登录/注册 1、PC端 1.1 微信注册登录 点击「微信注册登录」按钮,用微信扫描下方小程序码,而后点击「微信登录」,绑定相应手机号即可登录。 1.2 手机免密登录 输入手机号,获取验证码并输入即可。未注册手机验证后自动注册登录,需要注意的是,以下号段不支持注册: 手机卡(虚拟运营商)不支持号段: 中国移动:165 / 1703 / 1705 / 1706 中国联通:167 / 1704 / 1707

优快云 官方博客 19万+

Axure RP9 利用中继器实现列表数据的切换,分页器数据的动态交互加载

Axure RP9 利用中继器制作分页组件 在原型制作中,如何实现分页数据的动态加载、分页与数据的交互,每页显示条数的设定。下面通过制作五年级一班成绩单分页列表,分享给大家,适合有一定axure使用基础的人员,如有更好的方案,请多多指教。 最终效果图: 步骤1:首先利用中继器画出成绩单列表,并绑定成绩单数据。 步骤2:画出每页显示条数控制下拉框,利用中继器画出分页组件 步骤3:新增全局标量maxpage(显示的最多页码),minpage(显示的最小页码),i(循环计数),j(最循环数),selectpa

shandongmike的博客 6819

优快云

优快云 将于 2024 年在全国举办多场技术及行业应用的开发者大会、主题峰会、技术沙龙等会议活动,主要领域包括开源,云原生,AI,数据库,DevOps,操作系统,大数据,研发效能,芯片,元宇宙,自动驾驶,金融,工业互联网等。总的来说,优快云作为中国最大的IT社区和服务平台,不仅为软件开发者和IT从业者提供了丰富的学习资源和职业发展机会,还通过其强大的社区影响力和技术权威性,是一个为 IT 技术人成长及科技企业发展提供全方位服务的开发者生态平台,致力于成就一亿技术人,成为技术人交流和成长的家园。

博客 8万+

数据结构实验1 集合的交、并、差

姓名:Far_Rainbow 学号: 202505000X 专业: 软件工程 年级:2020级 实验名称:实验1 集合的交、并、差 实验内容: (1)实验目的 通过该实验,让学生复习巩固C语言中的循环结构、循环控制条件、分支结构和数组/链表、函数的调用等有关内容,体会到用数组存储集合时,需要记录集合元素的个数,否则输出结果会出现数据越界现象。 (2)实验内容 通过键盘,分别输入两个数据元素类型为正整数的集合A和B,以负数输入为结束条件,输出两个集合的交、并、差。 (3)实验要求 从程序完善性上考虑,集合元

Far_Rainbow的博客 2178

MATLAB实战:5分钟搞定雷达信号分选SDIF算法(附完整源码下载)

本文详细介绍了如何在MATLAB中快速实现雷达信号分选的SDIF算法,通过序列差直方图统计高效识别脉冲重复间隔(PRI)。文章包含完整源码下载,从算法原理到实战调优技巧,帮助工程师在5分钟内掌握核心实现方法,显著提升雷达信号处理效率。

info6的博客 615

博客整理大全

如何快速获得自己的所有csdn博客地址

nameofcsdn的博客 1万+

让 AI 变聪明的 20 条指令:如何让大模型回答得更精准、更专业、更实事求是

让 AI 变聪明,本质上不是写几句神奇咒语,而是把你的任务表达得更清楚,把事实标准设得更严格,把输出格式规定得更明确,把不确定性管理得更认真,把历史对话利用得更充分。大模型的强项是语言生成、信息组织、模式归纳和方案扩展;弱项是事实核验、实时更新、责任判断和对模糊意图的准确猜测。好的指令,就是在用人的判断弥补模型的弱点,让模型把强项发挥在正确的地方。

Sumarua的博客 1506

博客系统测试报告

博客系统测试报告

weixin_73077334的博客 2250

工业4.0 底层逻辑

工业4.0 的概念已经被滥用了,它与物联网,工业物联网等概念一样,几乎什么都往里面装。演变成了一句口号和愿景。许多人并不清楚工业4.0的底层逻辑到底是什么?如何遵循工业4.0 的思想构建新一代智能制造系统?并没用清晰地展示工业4.0的技术路线图。

姚家湾博客 1996

基于知识图谱的智能决策系统

作者:禅与计算机程序设计艺术 1.简介 知识图谱(Knowledge Graph)最早由美国斯坦福大学的Jure Sifne等人于2013年提出,它是一个用于存储、整理和推理复杂多变的网络结构信息的数据模型。它的基本特征是每个事实都有一个统一的标识符ID,并且可以以图形的方式展示各种关系及其边缘。因此,

AI天才研究院 2185

个人博客系统测试用例

个人博客系统测试用例:

一朵花花 1346

STM32G0/G4电机控制中三角函数与浮点运算优化实战

三角函数(sin/cos)和浮点运算是电机矢量控制(FOC)的核心基础,直接影响Clark/Park变换、SVPWM及观测器的实时性与精度。在资源受限的MCU上,标准math.h库因无硬件FPU支持而引发严重时序抖动,导致电流环延迟、转矩脉动增大甚至系统复位。通过硬件加速(如STM32G4的CORDIC协处理器)或定制化定点算法(如STM32G0的查表+线性插值),可将sin/cos计算从数十微秒压缩至1–3 μs量级,提升30倍以上效率。该方案广泛适用于BLDC/PMSM驱动、伺服控制及高动态响应嵌入式运

weixin_35751412的博客 110

我的博客系统测试报告

测试报告,功能测试,自动化测试,性能测试

fanhailomg的博客 669

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

《博客系统测试报告》

博客系统测试报告

一同进步,一同追梦 1208

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

个人博客系统测试报告

因为账号和密码都已经储存在数据库里面,只要对应的输入框输入正常的账号和密码就可以,跳转到博客列表页了。

weixin_70067429的博客 801

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: 问卷系统测试报告
Shingmc3
博客等级 码龄3年 235粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值