You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hypothesis能否实现类似PropEr的测试用例样本统计功能?

Hypothesis测试用例分布统计方案

完全可以,Hypothesis 内置的hypothesis.event接口就是专门用来实现这类测试用例分布统计能力的,和PropEr的collect/2功能定位完全匹配。

具体使用方式

  • 你只需要在测试逻辑中,针对每一条生成的测试用例,调用event()方法传入你要统计的分类标签即可,Hypothesis 会在测试运行结束后自动统计每个标签对应的用例占比,输出标准化的分布统计报告。

对应你给出的Erlang PropEr示例,用Hypothesis实现的等效Python代码如下:

from hypothesis import given, event
from hypothesis.strategies import lists, tuples, integers, characters

# 对应示例中的key、val生成规则,可根据实际测试场景调整
def key():
    return characters()
def val():
    return integers()

def to_range(bucket_size, val):
    # 对应原示例的分桶逻辑,将重复数归到固定步长的区间
    lower = (val // bucket_size) * bucket_size
    upper = lower + bucket_size
    return f"({lower},{upper})"

@given(lists(tuples(key(), val())))
def test_dupes(kv):
    m = dict(kv)
    for k, _v in kv:
        assert k in m
    # 计算重复键的总数量
    dup_count = len(kv) - len({k for k, _ in kv})
    # 等效于PropEr的collect方法,上报统计标签
    event(f"dupes,{to_range(5, dup_count)}")

输出效果

测试正常通过后,Hypothesis会在测试结果末尾附带事件统计信息,和你给出的PropEr输出逻辑一致,会明确展示每个分类标签对应的用例占比,典型输出如下:

test_dupes: PASSED

100 passing examples, 0 failing examples
Event distribution:
* 82.0% dupes,(0,5)
* 12.0% dupes,(5,10)
* 5.0% dupes,(10,15)
* 1.0% dupes,(15,20)

扩展说明

  • 如果需要做数值类指标的定向观测,可以搭配hypothesis.target接口使用,支持对生成用例的数值特征做聚合统计;如果需要记录单条用例的调试细节,可以用hypothesis.note接口。
  • 如果需要把统计数据上报到内部监控系统,可以自定义Hypothesis执行监听器,在测试生命周期钩子中读取收集到的event数据,自行完成上报逻辑即可。

内容的提问来源于stack exchange,提问作者Yoshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 10:57:27