日复一日的测试初始化,该简化了
01
在写 UI 自动化测试脚本时,有没有遇到过这样的情况:每个用例的开头都要写一遍“打开页面”“登录”“创建测试数据”?这类重复操作不但浪费时间,还增加了代码维护成本。一旦初始化逻辑变了,所有测试都要手动改一遍。
Playwright 针对这个问题提供了解法 —— 测试钩子(Hooks)和 Fixtures。通过这两种机制,你可以把测试前后的准备与清理工作集中管理,既减少重复代码,又让测试逻辑更清晰。
Hooks:自动化测试的准备工作管家
02
在 Playwright 中,beforeEach和afterEach是最常用的两个测试钩子。顾名思义,前者在每个测试开始前运行,后者则在测试结束后执行。
举个例子,假如你在每个测试中都需要先打开首页、登录账号、跳转到某个模块,那么只需要把这些逻辑写在beforeEach中:
from playwright.sync_api import Page, expectfrom playwright.sync_api import test@test.before_eachdef setup(page: Page): page.goto("https://example.com") page.fill("#username", "user") page.fill("#password", "pass") page.click("text=Login")
这样,每一个测试都能在登录后的上下文中执行,不用再手动重复登录逻辑,代码更整洁,也更不容易出错。
DRY 原则:封装复用操作逻辑
03
为了进一步减少重复,建议将登录、创建列表、打开页面等常用操作提取为辅助函数(helper functions)。这些函数可以集中放在一个helpers模块中,方便多个测试文件调用。
比如我们希望在测试中创建一个“我的电影列表”,可以写一个这样的函数:
from playwright.sync_api import Pagedef create_list(page: Page, name: str, desc: str): page.click("text=Create New List") page.fill("label=Name", name) page.fill("label=Description", desc) page.click("text=Continue")
然后在beforeEach中调用它:
@test.before_eachdef setup(page: Page): page.goto("https://example.com") create_list(page, "My Favorite Movies", "A list of great films")
通过封装,不仅代码更简洁,还能统一维护逻辑。一旦“创建列表”的 UI 变了,只需改一个地方。
Fixtures:比 Hook 更强大的上下文控制器
04
如果你的测试场景更复杂,需要共享一些上下文数据、或控制测试资源的生命周期,Fixtures 会是更好的选择。
Fixtures 是一种特殊的“上下文注入机制”,可以帮你预设测试环境,并将这些环境变量传入每个测试函数中。Playwright for Python 也支持类似的机制,尤其在使用pytest风格时更为灵活。
比如我们可以这样创建一个列表页 fixture:
import pytestfrom playwright.sync_api import Page@pytest.fixturedef list_page(page: Page): page.goto("https://example.com") create_list(page, "My Favorite Movies", "A list of great films") return page
然后在测试中直接使用:
def test_edit_list(list_page: Page): list_page.click("text=My Favorite Movies") list_page.click("text=Edit") # 断言或编辑逻辑
这样,每个使用list_page的测试都会在一个预先准备好的“有列表”的页面中执行,逻辑更专注、代码更清爽。
Hooks vs Fixtures:怎么选?
05
很多人会问,既然beforeEach就能搞定初始化,为什么还要用 Fixtures?答案在于:两者侧重点不同。
如果只是页面跳转、登录、简单数据创建,Hooks 已足够;
如果测试依赖某些复杂上下文(如数据库连接、多用户环境、共享状态),Fixtures 更合适。
Hooks 更偏向流程控制,而 Fixtures 更像是依赖注入,适合构建模块化的测试结构。在大型项目中,两者常常结合使用。
写测试,也要讲“工程思维”
06
自动化测试不是简单的“脚本堆砌”,而是一种有结构、有维护性的工程实践。合理使用钩子和 Fixtures,不但能提高测试效率,也能提升团队协作时的可读性与一致性。
你可以把 Hooks 和 Fixtures 理解为“测试的中间件” —— 把准备工作做在前面,让每个测试专注于验证核心业务行为,而不是为初始化而分心。
小结与实践建议
07
掌握 Hooks 和 Fixtures 是迈向高质量测试代码的重要一步。它们不是什么“高深技能”,而是每一个测试工程师都该具备的基础能力。
建议从自己的测试项目中找一个重复性强的用例,尝试用beforeEach或 Fixture 抽取公共逻辑。你会发现:测试不仅更好写,更好读,也更好维护。
你在使用 Playwright 编写测试时,更喜欢使用 Hooks 还是 Fixtures?有没有踩过什么坑?欢迎留言讨论!
看过就
点赞分享
哦~
领取专属 10元无门槛券
私享最新 技术干货