入门

为什么选择 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 控制的时钟上;故障每次只注入一个。某个故障下的失败每次都能复现,这正是它值得修复的原因。

本页内容

在每个 Pull Request 上运行

每个 Pull Request 一个 GitHub Check 和一条评论,并附上完整的运行记录。

配置 CI