网易首页 > 网易号 > 正文 申请入驻

环境不稳、用例乱跳?Playwright自动化避坑大全

0
分享至

一、测试环境不稳定

即使你的脚本写得再完美,如果测试环境自身不稳定,也会导致测试失败。

常见原因:

1. 网络波动:测试机与被测系统之间的网络不稳定。

2. 依赖服务宕机/异常:被测系统依赖的微服务、数据库、消息队列等出现问题。

3. 服务器负载过高:被测系统或测试环境服务器资源紧张,导致响应缓慢。

4. 环境配置差异:CI/CD 环境与本地开发环境的配置不一致。



Playwright 定位与解决技巧:

1. 容器化测试环境

Docker/Kubernetes:使用容器化技术(Docker Compose, Kubernetes)构建一致且可重复部署的测试环境。Playwright 官方提供了 Docker 镜像,非常方便在 CI/CD 中部署。

好处:确保每次运行都在相同的、干净的环境下,排除环境配置差异导致的问题。

# 示例:使用 Playwright 官方 Docker 镜像运行测试docker run -it --rm -v $(pwd):/app -w /app mcr.microsoft.com/playwright/python:latest /bin/bash -c "pip install -r requirements.txt && pytest"

2. 监控与告警

基础设施监控:实时监控测试环境的 CPU、内存、网络、磁盘 IO 等指标。

服务健康检查:监控所有被测系统及其依赖服务的健康状态。

告警机制:一旦发现异常,及时通过邮件、短信或企业微信通知相关人员。

3. 依赖服务 Mock/Stub

对于外部或不稳定的依赖服务,考虑使用 Mock 或 Stub 技术模拟其响应,减少外部因素的干扰,提高测试稳定性。Playwright 提供了强大的网络拦截功能。

# 拦截并 Mock 特定 API 响应page.route("**/api/user/**", lambda route: route.fulfill( status=200, content_type="application/json", body='{"username": "mocked_user", "id": 123}'))# 也可以拦截图片、字体等资源,加速测试或模拟加载失败page.route("**/*.{png,jpg,jpeg,svg}", lambda route: route.abort())

二、闪烁测试

“闪烁测试”是指在代码和环境都没有变化的情况下,时而通过、时而失败的测试用例。它们是自动化测试工程师的噩梦,极大地降低了测试结果的信任度。

常见原因:

1. 竞态条件:脚本与应用之间或应用内部的异步操作竞争资源,导致执行顺序不确定。

2. 不充分的等待:显式等待的时间或条件设置不合理,未能完全覆盖异步操作完成的时间。

3. 随机数或时间依赖:测试逻辑依赖于系统时间、随机数等非确定性因素。

4. 外部系统不稳定:依赖的第三方服务、外部 API 等不稳定。

5. 浏览器/驱动问题:浏览器或 WebDriver 自身偶尔出现的非预期行为。

6. 测试用例耦合:用例之间存在隐式依赖,导致一个用例的失败影响其他用例。

Playwright 定位与解决技巧:

Playwright 及其测试框架(Playwright Test)提供了多项强大功能来对抗 Flaky Tests:

1. Playwright Test 的自动重试机制

Playwright Test Runner 内置了重试机制。在 `playwright.config.ts` (或 `pytest-playwright` 配置) 中设置 `retries` 参数。

● 在 `playwright.config.ts` (JS/TS):

import { defineConfig } from '@playwright/test';exportdefaultdefineConfig({ // ... retries: process.env.CI ? 2 : 0, // 在 CI/CD 环境下重试2次,本地不重试 // ...})

● 在 `pytest` (Python) 中:

可以利用`pytest-rerunfailures` 插件,或在 CI/CD 中配置重试逻辑。

# 命令行运行pytest --reruns 2 --reruns-delay 1 # 失败后重试2次,每次间隔1秒

重要:重试只是权宜之计,治标不治本。它给你时间去定位和修复根本问题,而不是掩盖它们。

2. 强大的调试与分析工具

Playwright Trace Viewer(追踪查看器):记录完整的测试执行轨迹,包括每一步的操作、网络请求、DOM 快照、日志和失败堆栈。这是诊断闪烁测试的终极武器。

启用 Trace:在 `playwright.config.ts` (或 `pytest` 运行参数) 中配置 `trace: 'on-first-retry'` 或 `trace: 'on'`。

运行并分析:失败后,使用 `playwright show-trace trace.zip` 命令打开分析。你可以一步步回放测试,查看每一步的 DOM 状态和元素是否可见、可交互。

视频录制与截屏:失败时自动录制视频和截屏。

配置:在 `new_context()` 或 `launch()` 中配置 `record_video` 和 `screenshot` 选项。

# video_path 是视频保存的目录context = browser.new_context(record_video_dir="videos/", record_video_size={'width': 640, 'height': 480})# ...# 在测试失败时自动截图 (pytest-playwright 默认会做)# page.screenshot(path="failed_screenshot.png")

这些视觉证据对于理解非预期行为至关重要。

3. 优化等待策略和断言

回顾“同步等待问题”部分,确保所有的等待都是显式且精确的。

使用Playwright的`expect`库进行健壮性断言,例如`expect(locator).to_be_visible()`而不是`assert locator.is_visible()`。前者会进行自动等待直到条件满足或超时。

from playwright.sync_api import expect# 断言元素可见,Playwright 会自动等待直到可见或超时expect(page.locator(".success-message")).to_be_visible()# 断言元素不可见expect(page.locator(".loading-spinner")).to_be_hidden()# 断言元素文本内容expect(page.locator("#username-display")).to_have_text("John Doe")

4. 消除非确定性因素

独立用例:确保每个测试用例都是独立的,不依赖于其他用例的执行顺序或状态。利用 Pytest 的 fixture 机制做好 `setup` 和 `teardown`。

清理会话:每次测试前,确保浏览器会话干净。`context.new_page()` 默认会提供干净的页面,但对于 `browser.new_context()` 要注意。

时间/随机数:避免测试依赖于当前时间或随机数。如果必须,则在测试中固定或模拟它们。



三、性能与效率低下

当测试套件变得庞大时,执行时间过长会严重影响反馈速度,降低自动化测试的价值。

常见原因:

1. 测试用例冗余:大量重复或低价值的测试用例。

2. 低效的定位器:使用了过于宽泛或复杂的 XPath/CSS Selector,导致查找元素耗时。

3. 不必要的 UI 操作:频繁的页面跳转、不必要的点击和输入。

4. 串行执行:未充分利用多核 CPU 或分布式资源。

5. 环境性能瓶颈:测试机或被测系统性能不足。

Playwright 定位与解决技巧:

1. 遵循测试金字塔原则

优先编写单元测试和接口测试,它们速度快、成本低。

UI 自动化测试只覆盖关键业务路径和用户场景。避免对每个微小功能都进行 UI 自动化。

2. 优化 Playwright 配置

无头模式 (Headless Mode):在 CI/CD 环境下,默认开启无头模式,可以显著提高执行速度。

browser = playwright.chromium.launch(headless=True) # 默认就是 True

并行执行:Playwright Test Runner 支持多进程并行执行测试用例,充分利用 CPU 核心。

# 运行所有测试,使用 4 个 worker 并行pytest --workers 4

3. 利用 `context` 和 `page` 的生命周期

在 `pytest` 中,`page` fixture 默认是 `function` scope,`browser` fixture 默认是 `module` scope。

对于需要在相同浏览器上下文(例如已登录状态)下运行的多个测试用例,可以考虑在 `module` 或 `class` 级别创建 `context`,在 `function` 级别创建 `page`。这样可以避免每次测试都重新登录或初始化上下文。

4. 最小化 UI 交互

对于只涉及数据校验的场景,优先通过 Playwright 的 `request` context 进行接口调用来完成数据准备或验证,避免不必要的 UI 交互。这比 UI 操作快几个数量级。

5. 精简定位器

避免使用过于宽泛或复杂的 XPath,尤其是以 `//` 开头、遍历整个 DOM 树的 XPath。优先使用 ID、`data-test-id` 等直接且唯一的属性。



四、系统性排查自动化测试问题的通用方法论

除了针对特定问题的解决方案,掌握一套通用的问题排查方法论至关重要。

1. 观察与收集证据

自动化录屏/截屏:配置 Playwright 失败时自动录制视频和截屏。

Playwright Trace Viewer:运行失败后,第一时间打开 Trace Viewer 回放测试,观察每一步的 DOM 状态、网络请求和日志。

详细日志:在脚本中加入详细的日志输出(如操作步骤、变量值、错误信息),失败时能快速定位。

浏览器 Console & Network:在Trace Viewer中查看浏览器控制台是否有 JavaScript 错误,网络请求是否正常(HTTP状态码、响应时间)。

2. 隔离与复现

运行单个用例:尝试单独运行失败的测试用例,排除其他用例的干扰。

简化用例:注释掉与失败无关的代码,逐步简化用例,找出最小复现路径。

本地复现:优先在本地环境(`--headed --debug` 模式)复现问题,方便交互式调试。

3. 验证与调试

手动复现:根据失败时的信息,手动在浏览器中操作,看是否能稳定复现。

逐步调试:在IDE中设置断点,逐步执行代码,观察变量值和元素状态。利用 Playwright Inspector 的 Step-by-step 模式。

断言增加:在关键步骤增加断言,验证中间状态是否符合预期。

4. 定位根因

● 是应用自身的 Bug?测试数据问题?环境问题?还是自动化脚本(定位器、等待、逻辑)的问题?

● 与开发团队沟通,了解最近的代码变更,是否有影响到被测功能。

5. 修复与验证

修复代码:针对定位到的问题,修改自动化脚本或联系开发修复应用 Bug。

验证修复:运行失败的用例,确保问题已解决,并考虑增加新的断言或用例来防止类似问题再次发生。

6. 文档化与分享

● 将排查过程、根因分析和解决方案记录下来,形成知识库。

●在团队内部进行分享,提升团队整体的排查能力和避免踩坑。

总结

每一次失败都是一次学习的机会,每一次排查都是一次自我提升。希望这篇指南能帮助大家在 Web 自动化测试的道路上披荆斩棘,所向披靡!

☑️想了解更多涨薪技能提升方法

✔️可以到公主号【Atstudy技术社区】,即可加入领取 ⬇️⬇️⬇️

转行、入门、提升、需要的各种干货资料

内含AI测试、 车载测试、AI大模型开发、BI数据分析、银行测试、游戏测试、AIGC

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
重大信号释放!9月12日,于北京召开的“一国两制”台湾方案座谈会中,与会专家学者达成了十二项共识

重大信号释放!9月12日,于北京召开的“一国两制”台湾方案座谈会中,与会专家学者达成了十二项共识

扶苏聊历史
2026-09-17 16:54:47
蒋奇明这次翻车给内娱上了一课

蒋奇明这次翻车给内娱上了一课

乡野小珥
2026-09-09 01:00:02
不查不知道!原来他也出席敬一丹葬礼,文艺圈大佬,老婆赫赫有名

不查不知道!原来他也出席敬一丹葬礼,文艺圈大佬,老婆赫赫有名

林雁飞
2026-09-17 17:30:03
与何超琼同居14年,至今没结婚没孩子没名分,地位早已碾压陈百强

与何超琼同居14年,至今没结婚没孩子没名分,地位早已碾压陈百强

就一点
2026-09-10 22:30:17
男子在游戏中充值100万,急用钱被迫转卖账号,评估后只值8000元

男子在游戏中充值100万,急用钱被迫转卖账号,评估后只值8000元

新游戏大妹子
2026-09-15 13:06:24
41岁男子住院死亡,电子病历被鉴定不真实,医院赔131万余元

41岁男子住院死亡,电子病历被鉴定不真实,医院赔131万余元

澎湃新闻
2026-09-16 22:59:18
这样的校服,真恐怖!谁定的啊?

这样的校服,真恐怖!谁定的啊?

南山学脉
2026-09-17 22:11:54
人社部把话说透了!退休人员的5颗“定心丸”,条条戳你心窝子#

人社部把话说透了!退休人员的5颗“定心丸”,条条戳你心窝子#

椰青美食分享
2026-09-18 01:56:12
迪尼:加纳乔该照照镜子,问题在他自己身上

迪尼:加纳乔该照照镜子,问题在他自己身上

懂球帝
2026-09-18 07:27:06
俗语:“客厅四不挂,家旺人也旺”,是哪4样不能挂?不是迷信

俗语:“客厅四不挂,家旺人也旺”,是哪4样不能挂?不是迷信

历史教堂
2026-09-17 16:31:56
财经聚焦|平陆运河何以改变西南出海的“经济账本”

财经聚焦|平陆运河何以改变西南出海的“经济账本”

新华社
2026-09-16 21:29:37
男生4次考公失败,花2.2万旅行6国17座城市,途中看到妈妈朋友圈:“老娘扛你看世界,你替老娘圆梦”,顿时五味杂陈

男生4次考公失败,花2.2万旅行6国17座城市,途中看到妈妈朋友圈:“老娘扛你看世界,你替老娘圆梦”,顿时五味杂陈

背包旅行
2026-09-15 11:30:07
28岁女演员心脏骤停成植物人 昏迷3个月后苏醒 如今连跑8家剧组面试

28岁女演员心脏骤停成植物人 昏迷3个月后苏醒 如今连跑8家剧组面试

闪电新闻
2026-09-17 14:28:30
“从鬼门关走了一遭”,陈建州术后发文:把累当回事、认得心肌梗塞症状、把睡觉当最重要的工作;自称不抽烟不喝酒不应酬,但长期晚睡早起

“从鬼门关走了一遭”,陈建州术后发文:把累当回事、认得心肌梗塞症状、把睡觉当最重要的工作;自称不抽烟不喝酒不应酬,但长期晚睡早起

扬子晚报
2026-09-17 21:38:08
皇马迎来最严峻考验,穆帅得到全队拥护,穆帅决心消除皇马队内的 “自满情绪” !

皇马迎来最严峻考验,穆帅得到全队拥护,穆帅决心消除皇马队内的 “自满情绪” !

福酱的小时光
2026-09-17 18:33:32
史上最严厉对俄制裁法案即将生效!1700名乌军在哈尔科夫被围?

史上最严厉对俄制裁法案即将生效!1700名乌军在哈尔科夫被围?

鹰眼Defence
2026-09-17 11:01:13
何猷亨携女友看演唱会,清瘦身形神似赌王,女友高挑白皙气质出众

何猷亨携女友看演唱会,清瘦身形神似赌王,女友高挑白皙气质出众

小武侃风云
2026-09-17 17:02:01
狱友问我怎么进来的,我:贪10个亿。狱警上来就是一脚:装什么

狱友问我怎么进来的,我:贪10个亿。狱警上来就是一脚:装什么

悬案解密档案
2026-02-26 15:34:48
今夜,多家公司发布利好公告,多股提示风险

今夜,多家公司发布利好公告,多股提示风险

21世纪经济报道
2026-09-18 00:54:49
官至国务院副总理,薄一波为何没当上政治局委员?

官至国务院副总理,薄一波为何没当上政治局委员?

娱乐的宅急便
2026-09-17 12:52:46
2026-09-18 07:40:49
51Testing软件测试网 incentive-icons
51Testing软件测试网
中国软件测试人的精神家园
1647文章数 13285关注度
往期回顾 全部

科技要闻

理想i9来了,这价格战连自己人都打

头条要闻

永和豆浆视频被指擦边:女子穿蕾丝吊带裙、脱黑丝袜

头条要闻

永和豆浆视频被指擦边:女子穿蕾丝吊带裙、脱黑丝袜

体育要闻

逆转朝鲜,国足亚运队“啃老”过关

娱乐要闻

rapper赵涛恋情曝光!带甜馨妈妈散步

财经要闻

缺钱的追觅 隐藏的债务?

汽车要闻

小鹏G9L限时售23.18万 旗舰级的配置/诱人的价格

态度原创

游戏
旅游
手机
家居
本地

暴雪称《星际争霸》IP不会背离RTS传统

旅游要闻

严打之下,旅游强迫购物乱象为何屡禁不止

手机要闻

苹果iPhone 18 Pro系列今日正式开售,国行9999元起

家居要闻

2026建博会(广州) 公装联探展交流活动

本地新闻

不止胖东来!许昌藏着半部三国史

无障碍浏览 进入关怀版