《用 Python 构建可靠的自动化 Web 测试:从入门到进阶实战(含 Playwright + pytest + CI/Docker)》
《用 Python 构建可靠的自动化 Web 测试:从入门到进阶实战(含 Playwright + pytest + CI/Docker)》
开篇引入 — 为什么要做自动化 Web 测试(温度与故事)
记得有一次,一个晚上 11 点,测试环境磁盘爆满,生产日志提示一个看似微小的回归导致用户无法登录。人工重复操作耗时且容易遗漏——那一刻我深刻体会到:自动化测试不是奢侈品,而是工程可靠性的底座。
Python 因为生态丰富、语法直观、社区友好,成为自动化测试领域的常见选择。本文带你从基础到实战,讲清楚如何用 Python(以 Playwright + pytest 为主线)写出可维护、可扩展、可在 CI 中稳定运行的 Web 自动化测试脚本,并且分享在团队实战中打磨出的技巧与反模式。
目标读者:既面向初学者(教你上手写第一个测试),也面向有经验的开发/测试工程师(介绍架构、并发、CI、稳定性改进等进阶内容)。
一、自动化 Web 测试的基本构件(概念速览)
在动手前,先把地图看清楚:
- 测试框架:pytest(管理测试用例、断言、fixture)
- 浏览器自动化驱动:Playwright 或 Selenium(Playwright 在稳定性、并发和可视化方面更现代)
- 测试组织:Page Object Model(POM)、测试数据层、公共 fixture
- 运行环境:本地、Docker、CI(GitHub Actions/GitLab CI)
- 报告与调试:截图、视频、Trace、Allure 报告
- 质量保障:幂等、重试策略、等待(explicit wait)、稳定定位器
二、从零开始:写你的第一个测试(Playwright + pytest)
安装(示例)
python -m venv .venv
source .venv/bin/activate
pip install playwright pytest pytest-asyncio pytest-playwright
# 安装浏览器(只需执行一次)
playwright install
注:如果你要用 Selenium,请把 Playwright 替换为
selenium
+webdriver-manager
。本文以 Playwright 为主,因为它对现代 web 特性支持更好,且内置等待机制更完善。
最简单的测试示例(test_example.py)
# test_example.py
from playwright.sync_api import sync_playwrightdef test_open_example_and_title():with sync_playwright() as p:browser = p.chromium.launch(headless=True)page = browser.new_page()page.goto("https://example.com")assert "Example Domain" in page.title()browser.close()
运行:
pytest -q
这个测试展示了最基础的流程:启动浏览器、打开页面、断言标题。
三、把测试变得可维护:Page Object Model(POM)
当测试数量增长,把页面操作封装到页面对象里能显著提升可读性与复用。
示例:简单的登录页 POM
# pages/login_page.py
from playwright.sync_api import Pageclass LoginPage:def __init__(self, page: Page):self.page = pageself.username = page.locator("#username")self.password = page.locator("#password")self.submit = page.locator("button[type=submit]")def goto(self, base_url: str