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

博客系统为目标 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
截图覆盖 文件名重复 加入时间戳和调用函数名,确保唯一
相关推荐
小江的记录本1 小时前
【JVM虚拟机】JVM调优:常用JVM参数、调优核心指标、OOM排查、GC日志分析、Arthas工具使用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
大数据魔法师1 小时前
Streamlit(十三)- API 参考文档(六)- 媒体展示组件
python·web
爱写代码的倒霉蛋2 小时前
Hello-Agents的第一个练习-5分钟实现一个智能体(实现详解)
python
金銀銅鐵2 小时前
[Java] 用图形化界面演示 iadd, isub, iconst_<i> 指令的效果
java·后端·python
春日见2 小时前
五分钟入门 强化学习---DQN(Deep Q Net)算法与实现
人工智能·python·深度学习·算法·microsoft·机器学习
SomeOtherTime2 小时前
Geojson相关(AI回答)
java·前端·python
weelinking2 小时前
【产品】11_实现后端接口——数据在背后如何流动
java·人工智能·python·sql·oracle·json·ai编程
Dxy12393102162 小时前
三种方式避坑:案例 + 解决方法
python·mysql
moMo3 小时前
Python 的 dict 和 set —— 有无value的区别
python