首页/开发/软件测试速查/基于属性的测试(Property-Based Testing)
测试基础与分层67 条

基于属性的测试(Property-Based Testing)

描述对任意输入都成立的性质(如编码解码后等价),由框架生成大量随机输入并自动缩减反例;由 QuickCheck(Haskell)开创。

软件测试速查开发更新于 2026-10-12

Hypothesis 示例

Hypothesis 示例
from hypothesis import given, strategies as st

@given(st.lists(st.integers()))
def test_reverse_twice_is_same(xs):
    assert list(reversed(list(reversed(xs)))) == xs
  • 常见性质:幂等、可逆、顺序无关、范围保持、与参考实现一致
  • 反例自动缩减(shrinking)是核心价值:把大输入缩到最小失败样本
属性测试适合解析器、算法、序列化与状态机;不适合替代具体示例的验收测试。

易错点

  • 性质写得过弱(如只断言不抛异常),测试通过但无意义
  • 随机策略不可复现时未固定 seed,排查困难

数据来源与参考

  • Hypothesis 官方文档(hypothesis.readthedocs.io)
  • Claessen & Hughes《QuickCheck》(2000)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌