说明:这篇里对 Playwright 与 Cypress 的描述来自它们的官方文档(附链接),TestDog 的部分来自项目文档与源码。我没有替任何一方编「用起来什么感觉」------选型最怕的就是拿别人的体感当自己的结论。
一、先确认四个事实前提
- 四条路线都能跑。它们底层都能驱动真实浏览器,简单的「打开页面 → 点一下 → 断言文本」用哪个都写得出来。所以比较的重点不是「能不能」,而是代价。
- 真正的差别在「定位器从哪来」:手写、录制、还是模型生成?定位器是 E2E 里最贵的那部分维护成本。
- 差别在「AI 参与哪一段」:只在生成阶段参与,还是每次执行都参与?后者听起来更聪明,但它让执行失去了确定性。
- 差别在「资产放在谁那儿」:代码仓库、用例库文件,还是厂商的云端?这决定了数据主权和交接方式。
下面的对比都围绕这四点展开。
二、四条路线各自的形状
路线 1:Playwright 裸写
它是什么:直接用 Playwright 的库和 Test Runner 写脚本。
强项(官方能力) :多语言(JavaScript/TypeScript、Python、Java、.NET);跨浏览器(Chromium、Firefox、WebKit);自带 codegen ------官方文档明确写了它会「录下你在浏览器里的操作生成测试」,并按 role、text、test id 的优先级挑定位器 ,遇到多个匹配元素时会自动把定位器改得更唯一;还支持保留登录态(storageState)与 Inspector/追踪调试。
代价 :codegen 只是起点,录出来的脚本仍要人维护;用例库、回归编排、执行证据(截图/console/network)、报告、历史记录这些东西都得自己搭或自己拼------这些恰恰是「跑一次」和「能天天跑」之间的差距。
适合:有工程能力、要细粒度控制、把 E2E 当代码写进 CI 的团队。
路线 2:Cypress
它是什么:官方定位已经不只是 E2E 跑测器,而是「quality platform」------把端到端测试、组件测试、无障碍检查、覆盖率串成一个工作流(它的 Cloud 是配套的商业产品线)。
强项 :前端团队上手快,组件测试与调试体验是它的招牌;跨域场景在官方文档里给了专门的 cy.origin 方案。
代价 :官方自己在「Trade-offs」页列了架构带来的取舍------它在浏览器内部运行(这是它调试体验好的原因,也是它限制的来源),其中一条明确写着「不能同时打开多个浏览器」。这类取舍不是 bug,是架构选择的必然结果,选它就要接受。
适合:以 web 前端行为为主、团队熟悉 JS、看重组件测试与调试体验。
路线 3:商业录制回放(SaaS 类)
它是什么:可视化录制 + 云端(或托管)执行 + 团队报表/权限的商业产品。
强项(这类产品通常的卖点):零搭建起步、不写代码也能录、并行执行、团队可见的报告与权限体系。
代价(这类产品通常的代价):执行环境与被测数据往往要出内网;按座位数或跑量计费,长期成本随团队规模线性上涨;复杂断言、自定义逻辑和深度调试受产品边界限制------遇到平台不支持的能力时,你只能等,或者绕。
适合:需要快速铺开、有预算、被测系统可以在云上跑、且不打算自建基础设施的团队。
这一节我刻意只描述「这一类产品的一般特征」,不点名比较具体厂商------没有实测就拿别人的营销词做对比,是选型文章最容易翻车的地方。
路线 4:本地 E2E 工具(TestDog 属于这一类)
它是什么:把「生成/录制 → 确认 → 保存为脚本 → 确定性回放」做成一个本地桌面应用,脚本是 Playwright 在执行,项目/脚本/记录都在本地 SQLite。
具体形状(来自项目文档与源码):
- 两条产线 :自然语言生成(先出「预拆分计划」:测试意图、前置条件、数据约束、验收目标与必验项,确认后才执行),或 Playwright codegen 手动录制后解析成结构化步骤;
- 脚本是可编辑的语义定位器步骤,不是黑盒录像------每一步有动作、选择策略、定位值、参数、说明;
- 回放是确定性的 ,不调用模型(Token 消耗 0);定位器失效时才会请求模型自愈,且上传/滚动/断言不走自愈;
- 断言覆盖 UI / 接口 / WebSocket,失败步骤自动存截图并采集 console 与 network(最近 20KB);
- 复杂组件用语义动作插件(Ant Design / Element / Vant / MUI 的下拉、日期、级联等),治「点了但没选上」;
- 资产可携带 :用例导出为
.testcase文件,含上传动作时连文件一起打包(v2 包),能进 Git、能让编程 agent 按技能包直接生成。
代价 :跑在你自己机器上------没有托管调度、并发队列和团队权限;多机协作要靠 .testcase 文件和 Git;模型质量决定了生成上限(网关、模型、视觉开关、思考深度、最大步数都要自己配)。

三、一张对比表
| 维度 | Playwright 裸写 | Cypress | 商业录制回放(SaaS) | 本地 E2E 工具 |
|---|---|---|---|---|
| 定位器从哪来 | 手写 / codegen(官方按 role、text、testid 优先) | 手写 / 选择器 | 录制生成,多为平台私有格式 | 模型生成或录制解析,落为可编辑的语义定位器 |
| 执行确定性 | 完全确定 | 完全确定 | 通常确定 | 完全确定(回放不调模型) |
| AI 参与哪一段 | 无 | 无 | 平台内(黑盒) | 仅生成 + 定位自愈,可关闭/可审查 |
| 断言能力 | 全部(自己写) | web 断言 + 网络拦截 | 平台提供,受产品边界限制 | UI / 接口 / WebSocket 断言内置 |
| 复杂组件 | 自己处理 | 自己处理 | 平台插件,覆盖度看厂商 | 组件库语义动作插件 + 预设 |
| 资产形态 | 代码(进 Git 最自然) | 代码 | 平台云端用例 | .testcase 文件,可进 Git / 可被 agent 生成 |
| 数据位置 | 你的仓库 | 你的仓库(Cloud 可选) | 厂商云端 | 本地 SQLite |
| 执行位置 | 你的机器 / 你的 CI | 你的机器 / 你的 CI(Cloud 可选) | 厂商云端 | 你的机器(无托管调度) |
| 成本结构 | 人力(写与维护) | 人力 + Cloud 订阅 | 座位/跑量订阅 | 人力 + 模型调用(回放为 0) |
| 上手门槛 | 需要工程能力 | 前端友好 | 最低 | 中等(要配网关与环境) |
四、五个决定性问题
对比表看不完的,用这五个问题问自己:
- 失败证据要落到哪里? 只要日志,还是要截图 + console + network + 历史记录?后者需要平台级能力。
- AI 允许参与哪一段? 如果答案是「每次执行都要」,请先接受「结果不可复现」的代价;如果只要「生成和救定位」,确定性回放才成立。
- 被测系统能不能上云? 不能,SaaS 类直接出局(除非有私有化部署)。
- 谁来维护定位器? 有专职测试开发,裸写可行;没有,就要考虑「录制 + 语义定位 + 只在失效时自愈」这条路。
- 协作方式是什么? 跨机器多人用一套用例 → 需要托管式或 Git 工作流;单人/小队 → 本地工具最省事。
五、什么时候不该选本地 E2E 工具
- 你要的是单元测试、组件测试(那是 Vitest/Jest/Cypress/Playwright 组件测试的地盘);
- 你要多机并行、按队列调度、给全公司看报表------那是托管平台或自建 CI 集群的事;
- 你需要多语言 SDK(Java/Python 直接调库)而不是一个桌面应用;
- 你需要大量跨 iframe、跨多标签页的操作(本类工具通常不跨 iframe 找元素);
- 你需要把接口全 mock 掉跑假数据回归(这套方案的价值恰恰建立在真实请求上);
- 你的团队不愿意维护业务代码里的测试锚点 ------定位器优先级再高,代码不给
data-testid也只能掉到末档。


六、它们经常是组合,不是替代
现实里最常见的组合是:
- Playwright / Cypress 做贴近代码层的验证(组件、集成、边界逻辑),因为它们离开发者最近;
- 本地 E2E 工具管「回归资产」:把跑通的业务主流程沉淀成可回放的用例,配上证据与历史记录,让「每天跑一遍」这件事变得便宜;
- SaaS 平台负责跨团队可见性(如果确有需求),此时本地用例以文件形式导出、再导入收敛。
关键在于认清各自解决的是不同问题:写测试 ≠ 管测试资产。前者的瓶颈是表达力,后者的瓶颈是维护成本与可信度。

七、一句话
选型别从「哪个工具更强」开始,从「我的瓶颈在哪」开始:瓶颈是表达力就选裸写,是上手成本就选录制类,是资产化与维护成本就选能把用例沉淀下来的方案。任何一方的代价都要能被你说出口,才叫选型;说不出口的,都是后面要还的债。
参考链接:
- Playwright 官方:playwright.dev/docs/codege...(录制与定位器优先级)
- Cypress 官方 Trade-offs:docs.cypress.io/app/referen...
- Cypress 跨域测试:docs.cypress.io/app/guides/...
- TestDog:github.com/xianyongwen... · 文档:softwing.top/testdog-doc...