2026年10月24日 1 分钟阅读

别只测页面有没有显示:用 danwo 给 Web 与移动应用做端到端故障测试

tinyash 0 条评论

一条注册流程的 UI 测试通过,不代表用户真的只收到一封欢迎邮件;支付按钮能点,也不代表重复提交不会扣两次款。传统端到端测试常验证“页面看起来对不对”,但副作用是否正确,往往还要靠另一套脆弱的集成测试补足。

danwo 是 Carbonme Inc 发布的开源端到端测试框架,仓库采用 Apache-2.0。它的思路是先像用户一样驱动 UI,再按需检查后端状态:常规定位器测试不需要模型;自然语言步骤可以在首次运行时借助模型找出操作并记录,之后重放记录;若测试涉及支付、邮件或 webhook,则可加上模拟 Provider、业务不变量断言和故障矩阵。

先用确定性定位器覆盖关键路径

项目 README 给出的最小测试使用 @danwo/sdk 的 test,通过 app.open、screen.getByLabel 和 getByRole 操作页面。下面是同类写法的示意,具体选择器需与应用 DOM 相符:

import { test } from "@danwo/sdk"

test("用户可以注册", async ({ app, screen, expect }) => {
  await app.open("/sign-up")
  await screen.getByLabel("Email").fill("ada@example.com")
  await screen.getByLabel("Password").fill("example-password")
  await screen.getByRole("button", { name: "Create account" }).click()
  await expect(screen.getByRole("heading", { name: "Welcome, Ada" })).toBeVisible()
})

这类测试不调用模型,适合登录、表单校验、导航等稳定交互。仓库说明支持 Web,以及 Android Emulator、iOS Simulator 上的移动应用;移动测试的主机要求与 Web 不同,开始前应按文档核对环境。

自然语言步骤适合探索,不必每次都付模型调用

当 UI 经常变化、定位器难以快速写出时,可以用 agent.act 描述任务,再用断言和截图检查结果。README 的示例是将两只蓝色马克杯加入购物篮并前往结账。首次运行需要模型与 API key,工具会记录操作;后续可重放记录,必要时才重新求助模型。CI 可以运行 danwo test --replay-only,确保该路径不调用模型。

import { test } from "@danwo/sdk"

test("购物篮中有两只蓝杯", async ({ app, agent, screen, expect }) => {
  await app.open("/")
  await agent.act("add two blue mugs to the basket and go to checkout")
  await agent.assert("the basket shows two blue mugs")
  await expect(screen).toHaveScreenshot("checkout")
})

要点是把自然语言当作记录生成与 UI 变化的适配方式,而非取消断言。对价格、数量、权限等关键结果,仍应保留可重复的确定性检查。

用不变量与故障矩阵检查副作用

如果测试注册流程,可在 UI 断言之外增加后端不变量:例如数据库中恰好一条注册记录、模拟邮件收件箱中恰好一封欢迎邮件。danwo README 展示了 .invariant(...) 回调,也列出 Stripe、Clerk、Resend、Google、Slack 等模拟 Provider;模拟器通过代理响应,无需真实沙箱密钥或修改应用代码(以各 Provider 文档的当前支持范围为准)。

接着可运行故障矩阵:

npx @danwo/cli matrix tests/waitlist.danwo.ts

README 示例会针对邮件服务 429、重置后响应、数据库序列化失败、重复提交等故障重跑测试,并由不变量判断系统是否仍满足业务规则。真实价值不是“故障越多越好”,而是把幂等性、重试和部分失败变成可执行的验收条件。上线前先选一条有明确副作用的流程,再逐步增加故障类型,避免一开始就把测试矩阵做得难以诊断。

安装与适用边界

项目 Quickstart 要求 Node.js 22.22.3 或更高的 22.x,或 24.11.1 及以上;新项目可在应用目录初始化:

npx @danwo/cli init
npm run test:danwo

初始化过程会询问测试目标、模型/Provider 和编码 Agent 配置,并生成配置及首个测试。仓库同时说明项目仍处早期阶段、API 可能变化,因此建议先在非关键项目试跑,锁定依赖版本,并把生成的测试与记录纳入代码评审。移动端测试还需遵循官方 Android/iOS 环境要求。

danwo 适合希望把“用户界面行为”和“后台副作用”放在同一端到端验收里的团队;若只需要简单稳定的 DOM 断言,普通测试框架可能更轻。它不是免维护测试的捷径:模型生成的首次操作仍需审阅,而不变量要由团队根据业务定义。

相关链接

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。