博客系统自动化测试实战总结

以博客系统为目标 Web 应用,从零开始设计自动化测试用例、搭建测试框架、编写脚本并生成测试报告。以下是对整个实战过程的详细总结,包括测试用例设计思路、项目文件结构、核心函数作用以及运行流程。


一、项目背景与目标

目标 :针对一个Web博客系统,使用 Selenium + Python 实现完整的UI自动化测试。

测试覆盖的四大模块:

  • 登录页面(登陆界面)

  • 博客首页/博客列表页(博客首页)

  • 博客详情页(博客详情页)

  • 编辑博客页(博客编辑页)


二、测试实施步骤

  1. 编写 Web 测试用例 -- 使用思维导图(脑图)梳理功能点与异常场景。

  2. 搭建自动化测试项目 -- 创建 Python 工程,引入 Selenium,设计通用工具类。

  3. 编写自动化测试脚本 -- 分模块实现登录、列表、详情、编辑页的测试逻辑。

  4. 生成测试报告 -- 汇总执行结果,按模板输出报告,评估上线风险。


三、测试用例设计

针对博客系统各页面,我们设计了以下核心测试点:


四、项目目录结构


五、核心文件及函数详解

5.1 common/Utils.py --- 公共工具模块

作用 :封装项目中公共的配置和通用功能,避免代码重复,实现驱动对象的单例管理。

复制代码
import datetime
import os.path
import sys
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
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)
    def getScreeShot(self):
        #创建屏幕截图
        #图片文件名称:./2026-05-30-173456.png
        #图片路径: ./images/2026-05-30-173456.png
        dirname = datetime.datetime.now().strftime("%Y-%m-%d")
        #判断dirname文件夹是否已经存在,若不存在则创建文件夹
        if not os.path.exists("./images/" + dirname):
            os.mkdir("./images/" + dirname)
        #2026-05-30-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()

关键知识点:

代码/技术 作用说明
ChromeDriverManager().install() 自动检测并下载对应版本的ChromeDriver,无需手动配置路径
sys._getframe().f_back.f_code.co_name 反射获取调用当前方法的函数名,用于截图命名,方便定位是哪个测试用例报的错
page_load_strategy = 'eager' 页面加载策略:normal(等所有资源)、eager(DOM就绪即可)、none(不等待)
BlogDriver = Driver() 单例模式,确保整个测试过程中只打开一个浏览器窗口,各页面测试共享登录状态

5.2 tests/BlogLoginTest.py --- 登录页测试

作用 :测试博客系统的登录功能,包括正常登录和异常登录场景。

5.3 tests/BlogListTest.py --- 博客列表页测试

作用 :测试**博客首页(列表页)**的功能,包括页面元素检查、文章数量验证、文章跳转等。

5.4 tests/BlogDetailTest.py --- 博客详情页测试

5.5 tests/BlogEditTest.py --- 博客编辑页测试

作用 :测试发布博客功能,包括正常发布和异常发布场景

5.6 RunTest.py --- 测试执行入口

作用 :作为测试执行的主入口,按顺序调用各模块的测试方法。

执行顺序设计:先登录 → 再访问需要登录状态的页面 → 最后关闭浏览器。由于使用单例Driver,登录状态会一直保持。


六、常见问题与解决方案

问题 原因 解决方案
ElementNotInteractableException 元素存在但不可交互(被遮挡、隐藏、未启用) 等待元素可见/可点击;滚动到元素位置;检查是否有弹窗遮挡
InvalidElementStateException 元素状态不允许操作(如disabled、readonly) 对于富文本编辑器,使用JavaScript执行输入;检查iframe切换
NoSuchElementException 元素未找到 添加显式等待;检查定位器是否正确;确认页面是否已加载
登录状态丢失 每次新建driver实例 使用单例模式共享driver,保持session
截图覆盖 文件名重复 加入时间戳和调用函数名,确保唯一
相关推荐
benchmark_cc6 分钟前
QuantDash 安装成功后,如何验证 Python 环境可以正常导入 SDK?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
zh路西法1 小时前
【模型式强化学习】(二)PETS——从概率动力学模型到模型预测控制(MPC)
pytorch·python·强化学习·pe·mpc·ces·pets
Python自动化直播2 小时前
智能脚本批量管理拆开看:导入、导出、重写、试听
前端·python·ai·秒播
伤心的梧桐叶5 小时前
Picset与创客贴比等待时间,没做完的任务不能从表里消失
python
没有气的汽水5 小时前
一次 SQS 消费者静默退出的排查:问题最后竟然出在日志里
python
用户450030140235 小时前
物业催缴系统为什么总在"冷却"这一步翻车:账期建模与规则命中的几个取舍
python
Web极客码5 小时前
决策模型 + LLM:用 Python 拆解浏览器自动化工作流
java·python·自动化
fanruitian6 小时前
python 装饰器 闭包
python
泡茶喝茶写代码6 小时前
A股量化策略回测实战:从行情数据到绩效评估(第 13 篇):放量突破策略
java·python·股票数据api·股票数据api接口·股票量化数据api·股票量化数据接口
cxyxixiy6 小时前
数智码力:数据核对不用人工比对,Python 快速完成多表格差异校验
开发语言·python·学习