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

环境不稳、用例乱跳?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.

相关推荐
热点推荐
特朗普再爆惊天丑闻!多名白宫内部人士爆猛料:他智商还不如婴儿

特朗普再爆惊天丑闻!多名白宫内部人士爆猛料:他智商还不如婴儿

快乐彼岸
2026-09-11 07:59:51
俄罗斯和中国,投下反对票

俄罗斯和中国,投下反对票

都市快报橙柿互动
2026-09-11 07:11:10
全民化债的时代已经来了

全民化债的时代已经来了

细说职场
2026-09-11 21:34:33
耶伦带着50名经济学家,联手告了特朗普,征了中国的关税也得退?

耶伦带着50名经济学家,联手告了特朗普,征了中国的关税也得退?

施涛说
2026-09-11 16:51:56
女篮惨败,宫鲁鸣下课?新帅或曝光,47岁,执教严厉,或换所有后卫

女篮惨败,宫鲁鸣下课?新帅或曝光,47岁,执教严厉,或换所有后卫

喜欢体育的猫
2026-09-11 07:40:30
今夜,起飞了!美联储加息大消息,股市、黄金、白银,全线大涨!

今夜,起飞了!美联储加息大消息,股市、黄金、白银,全线大涨!

中国基金报
2026-09-11 23:28:31
宜家做了几个1:12的迷你屋,替所有乱糟糟的家说了句话

宜家做了几个1:12的迷你屋,替所有乱糟糟的家说了句话

温一壶月光啊
2026-09-10 21:30:52
49岁钟丽淇被送ICU抢救,老公回应语气紧张,一众友人赶赴医院!

49岁钟丽淇被送ICU抢救,老公回应语气紧张,一众友人赶赴医院!

娱乐团长
2026-09-11 16:21:53
又曝出轨大瓜,男子自曝妻子出轨班长5个月,班长只给他妻子买过情趣内衣,还曝光俩人大尺度聊天内容

又曝出轨大瓜,男子自曝妻子出轨班长5个月,班长只给他妻子买过情趣内衣,还曝光俩人大尺度聊天内容

汉史趣闻
2026-09-10 18:28:47
中国移动回应iPhoneDuo仅支持eSIM:eSIM服务与具体机型相关,目前也在不断更新,建议携机到营业厅咨询

中国移动回应iPhoneDuo仅支持eSIM:eSIM服务与具体机型相关,目前也在不断更新,建议携机到营业厅咨询

鲁中晨报
2026-09-10 09:51:03
中纪委连打两“虎”!

中纪委连打两“虎”!

扬子晚报
2026-09-11 18:33:44
重大调整!亚运会女篮名单突然有变!韩旭李月汝离队,一人回归太意外!宫鲁鸣目标明确,赛程出炉!网友喊话:不要输的太难堪

重大调整!亚运会女篮名单突然有变!韩旭李月汝离队,一人回归太意外!宫鲁鸣目标明确,赛程出炉!网友喊话:不要输的太难堪

小七说篮球
2026-09-11 17:16:18
上手iPhone Duo后我改主意了:折叠屏为何必须做到这么好?

上手iPhone Duo后我改主意了:折叠屏为何必须做到这么好?

报错免疫体
2026-09-11 00:30:16
1-3惨败!第4位8强诞生!就在刚刚,斯诺克爆大冷:世界第86掀翻世界第5!丁俊晖大杀四方,下一站遇强敌

1-3惨败!第4位8强诞生!就在刚刚,斯诺克爆大冷:世界第86掀翻世界第5!丁俊晖大杀四方,下一站遇强敌

锐评利物浦
2026-09-11 09:26:22
让人没想到的是,董建华刚走,他83岁的弟弟就浮出水面:家族身家超300亿,如今在英国买下大楼当起包租公,稳稳占据福布斯香港富豪榜

让人没想到的是,董建华刚走,他83岁的弟弟就浮出水面:家族身家超300亿,如今在英国买下大楼当起包租公,稳稳占据福布斯香港富豪榜

人生录
2026-09-11 00:05:25
刑拘!全网痛骂的“白眼狼女学生”根本不存在,姚先生底裤被扒:履历全靠包装,初中都没毕业

刑拘!全网痛骂的“白眼狼女学生”根本不存在,姚先生底裤被扒:履历全靠包装,初中都没毕业

火山詩话
2026-09-11 17:25:13
维尼修斯态度大反转:穆帅温情保护换来积极防守,伯纳乌静待爆发

维尼修斯态度大反转:穆帅温情保护换来积极防守,伯纳乌静待爆发

星耀国际足坛
2026-09-11 20:45:39
带电动升顶的小米澎程新车被标注为“文化生活服务车” 需一年一检高速节假日不免费?门店回应

带电动升顶的小米澎程新车被标注为“文化生活服务车” 需一年一检高速节假日不免费?门店回应

金融界
2026-09-09 18:18:15
杀进决赛却丢世界第1!萨巴伦卡不解:这很奇怪 会努力把它抢回来

杀进决赛却丢世界第1!萨巴伦卡不解:这很奇怪 会努力把它抢回来

风过乡
2026-09-11 13:08:30
东莞、宁波加入严查赵一鸣好想来,已有十余城开展专项检查

东莞、宁波加入严查赵一鸣好想来,已有十余城开展专项检查

ZAKER新闻
2026-09-11 16:50:23
2026-09-11 23:55:00
51Testing软件测试网 incentive-icons
51Testing软件测试网
中国软件测试人的精神家园
1641文章数 13285关注度
往期回顾 全部

科技要闻

苹果折叠屏比小米华为贵5000元,该怎么选

头条要闻

中方赴印代表团规模有多大 外交部回应

头条要闻

中方赴印代表团规模有多大 外交部回应

体育要闻

37岁还能场场进球,还能翻跟头!

娱乐要闻

黄晓明直言帮太多白眼狼,杨颖遭殃

财经要闻

女装“玖姿”母公司跨境贸易迷局:安正时尚说谎了吗?

汽车要闻

买菜车也有小乐趣 风云T7不止是台合格家用SUV

态度原创

时尚
游戏
手机
本地
军事航空

衣服别总是只穿黑色,看看这几款蓝色单品,清爽高级不过时

《GTA6》裸体小镇现实原型被找到!商家遭遇麻烦了

手机要闻

vivo X500系列定档,新机外观正式公布

本地新闻

Onestage x 乐华娱乐暑期巡回选拔2026

军事要闻

涉伊朗核问题 中国和俄罗斯投下反对票

无障碍浏览 进入关怀版