★★★★☆

Hegel: 通用属性测试协议

来源: hegel.dev日期: 2026-03-25评分: 4星
属性测试 PBT Hypothesis 协议设计 Rust

核心摘要

Hegel是一个基于Hypothesis构建的通用属性测试协议和库家族,解决了一个核心问题:编写好的PBT库很难,在每种语言中都编写一遍更是难上加难。

核心亮点

  • 核心问题:PBT库最困难的部分(bug查找分布、自动收缩、灵活的生成器原语)理论上可以复用,但在每种语言中都要重写
  • 解决方案:服务器-客户端架构
    • 服务器实现PBT核心:数据生成、收缩等
    • 客户端实现各语言的面向用户语法:属性和生成器
  • 当前实现:hegel-rust已可用,更多语言库即将推出
  • 协议层:目前使用Unix sockets,但协议与传输层解耦,可替换
  • 工作流程
    • 客户端发送generator schema(如{"type": "integers", "min_value": 100})
    • 服务器生成匹配的任意值并返回
    • 失败时服务器执行shrink,返回最小失败用例

技术细节

当hegel-rust测试运行时:

  1. 首次运行时,hegel-rust启动服务器子进程并握手
  2. 客户端告诉服务器新测试开始及设置(如test_cases=200)
  3. 测试执行中tc.draw()被调用时,客户端发送generator schema给服务器
  4. 服务器生成值并返回,客户端执行测试
  5. 测试失败时,服务器执行shrink并返回最小用例
意义:Hegel将属性测试的核心算法与语言特定实现分离,使得各语言可以共享最优质的PBT能力,降低开发门槛。

访问项目 →