入门
为什么选择 danwo
danwo 能做到你对端到端测试的所有期待,还会检查按钮在界面背后实际做了什么。
danwo 具备你对端到端框架的所有期待:定位器、用自然语言写的智能体步骤(回放时不调用模型),以及视觉对比,支持 Web、Android 和 iOS。对于注册、登录、搜索和结账这类页面,这些就足够了。
它更进一步的地方在界面背后。页面可能显示“谢谢”,而 Stripe 却对这张卡扣了两次款;或者一个重复到达的 webhook 让积分发放了两次。当你的应用涉及这些问题时,danwo 也能回答。
有什么不同
| danwo | 典型的端到端工具 | |
|---|---|---|
| 用定位器和智能体驱动 UI | 是,支持 Web、Android 和 iOS | 是 |
| 回放时不调用模型 | 是:验证过的步骤会缓存为定位器 | 有时 |
| 视觉对比 | 基准图、遮罩和阈值,支持 Web 和设备 | 通常支持 |
| 第三方服务 | 模拟,带真实的主机名、状态和签名的 webhook | 真实的沙箱,或写在应用代码里的 mock |
| 检验后端 | 针对第三方服务调用、webhook 和数据的不变性校验(invariant) | 像素和 DOM |
| 故障注入 | 根据本次运行实际发出的调用规划故障矩阵 | 否 |
| 竞态与数据故障 | 重复提交、并发用户、Postgres 和 Redis 故障、时间旅行 | 否 |
| 失败记录 | 步骤、第三方服务调用瀑布图、副作用差异、模拟器状态 | 视频和 DOM |
| 运行位置 | 你的电脑和你的 CI,使用你的数据 | 通常是托管服务 |
背后的理念
无需修改应用代码。 应用像在生产环境中一样运行,只是通过环境变量指向一个出站代理。代理把第三方服务的主机名转发到 danwo 的模拟器,其他请求照常发往原来的目的地。不存在需要与代码保持同步的测试替身。
模拟器,而不是 mock。 每个模拟器在多次调用之间保持状态,像第三方服务一样为 webhook 签名,并返回第三方服务 SDK 能够解析的错误格式。danwo fidelity 会将它们与真实 API 对照检查,因此一个行为发生偏离的模拟器会让检查失败,而不是让你的测试通过。
不变性校验评判的是运行结果,而不是脚本。 测试主体描述用户如何到达某个状态;它的不变性校验描述无论运行过程如何,之后必须成立的事实。正因如此,同一个测试可以在几十种故障下回放,并且每一次都能给出有意义的结论。
默认确定性。 智能体的选择在第一次运行时被录制,之后直接回放;模拟器运行在 danwo 控制的时钟上;故障每次只注入一个。某个故障下的失败每次都能复现,这正是它值得修复的原因。