停止发布“僵尸测试”:推出 Project Vandal v0.2.0

发布: (2025年12月21日 GMT+8 12:16)
5 min read
原文: Dev.to

Source: Dev.to

封面图:停止发布“僵尸测试”:介绍 Project Vandal v0.2.0

你将学到

  • Zombie 测试问题 – 为什么通过的测试可能比失败的更危险
  • 运行时 UI 变异 – Vandal 如何破坏实时 DOM 而不是重建源代码
  • Shadow DOM 支持 – 渗透隐藏于标准选择器之外的现代 Web 组件
  • Kill Ratio 指标 – 量化测试套件的实际韧性
  • 快速集成 – 零改写测试的即插即用 Playwright 包装器

僵尸测试问题

你是否曾经看到一个 100 % 通过的测试套件并想过:“这真的在测试什么吗,还是仅仅因为 happy path 没有改变而通过?”
在测试自动化中,我们经常遭遇 test rot——即使应用逻辑已损坏,测试仍保持通过。这些就是 Zombie Tests

隐藏的危险

Zombie Tests 给你一种虚假的安全感。它们是即使拥有庞大的自动化套件,仍然有 bug 滑入生产环境的原因。

什么是 Project Vandal?

Vandal 是一个用于前端的确定性混沌工程工具。与传统的变异测试通过修改源代码(慢且需要大量重建)不同,Vandal 在测试执行期间破坏浏览器中的 实时 DOM

那一刻

传统工具会把 React/Vue 源码中的 if 语句改成 elseVandal 改变 浏览器的现实。它会剥离点击监听器、移动 UI 元素,并在测试运行时破坏表单状态。

Vandal v0.2.0: 有哪些新功能?

我们在 v0.2.0 版本中加入了面向企业级、高并发应用的功能。

  1. 持久混乱(导航生存) ⚓
    UI 变更在页面重新加载和跳转时仍然保持,使用 add_init_script 与深层 MutationObserver 的组合实现。

  2. 递归 Shadow DOM 支持 🕵️‍♂️
    Vandal 现在能够递归穿透 Shadow DOM 边界,针对隐藏在多个 shadow root 中的元素进行操作。

  3. 自动恢复(实时修复) 🩹
    缓存元素的原始状态,并通过 await v.revert_mutation() 实时恢复。

“破坏”手册

  • 隐蔽禁用 – 设置 pointer-events: none。按钮外观完好,但对用户交互而言是“失效”的。
  • UI 位移 – 将元素平移 100 像素。依赖硬编码坐标的测试将会失败。
  • 加载缓慢 – 通过临时隐藏元素模拟 5 秒的 UI 卡顿。检查你的测试是否正确等待。
  • 数据破坏 – 用垃圾数据替换关键标签和输入值,以验证数据验证逻辑。

安装

pip install project-vandal

基本用法

将 Vandal 集成到您现有的 Playwright 测试中,作为异步上下文管理器使用:

from vandal import Vandal

async def test_critical_path(page):
    async with Vandal(page) as v:
        # 1. Apply a persistent mutation
        await v.apply_mutation("stealth_disable", "#checkout-btn")

        # 2. Navigate – the mutation survives!
        await page.goto("https://myapp.com/cart")

        # 3. This SHOULD fail if your test is resilient
        try:
            await page.click("#checkout-btn", timeout=2000)
            print("🧟 MUTANT SURVIVED: Test is a Zombie!")
        except:
            print("💀 MUTANT KILLED: Test is Robust.")

    # Generate a beautiful HTML report
    v.save_report("ci_resilience_report.html")

报告:从控制台到 HTML

Vandal v0.2.0 现在导出结构化的 JSON 和精美的 HTML 报告。 不再需要在控制台日志中挖掘——可视化记分卡已准备好用于您的 CI/CD 仪表板。

高影响力使用案例

  • CI/CD 门控 – 当超过 10 % 的 UI 变体存活时,使构建失败。
  • Shadow DOM 验证 – 自信地测试难以捕捉的 Web 组件。
  • 断言基准测试 – 量化自动化套件的“Kill Ratio”。

加入破坏运动

停止统计代码覆盖行数。开始衡量 断言有效性Project Vandal 让“绿色勾选”再次有意义。

开源

Project Vandal 是一个开源项目。立即在 PyPI 上查看并开始验证您的测试套件的韧性。

Back to Blog

相关文章

阅读更多 »

带物理的 React 雪花效果

封面图片:A React Snowfall Effect with Physics https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2F...