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

博客系统为目标 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
截图覆盖 文件名重复 加入时间戳和调用函数名,确保唯一
相关推荐
luckdewei2 小时前
FastAPI 资产管理系统实战:复杂 ORM 关联、Alembic 迁移与 N+1 查询优化
python
aqi008 小时前
15天学会AI应用开发(八)使用向量数据库实现RAG功能
人工智能·python·大模型·ai编程·ai应用
Csvn9 小时前
`functools.lru_cache` —— 一行代码搞定缓存加速
后端·python
金銀銅鐵1 天前
[Python] 从《千字文》中随机挑选汉字
后端·python
cup111 天前
[技术复盘] Windows Python 打包实战:Nuitka 环境踩坑总结与 CI 自动化构建全指南
python·ai·环境变量·ci·nuitka·skill
aqi001 天前
15天学会AI应用开发(七)有了大模型为什么还要引入RAG
人工智能·python·大模型·ai编程·ai应用
金銀銅鐵1 天前
用 Python 实现 Take-Away 游戏
python·游戏
copyer_xyf1 天前
Agent 流程编排
后端·python·agent