You need to enable JavaScript to run this app. 如何查看并保存Hypothesis生成的假设测试输入数据?
优惠活动
大模型
产品
解决方案
定价
更多

如何查看并保存Hypothesis生成的假设测试输入数据?

Hypothesis生成输入数据的保存与复用方案

直接捕获生成用例并持久化

你可以在@given装饰的测试函数内部,直接将每次生成的输入参数序列化后存储,支持导出为Python原生兼容的pickle格式,或者跨语言通用的JSON格式,适配Matlab读取需求。
示例实现:

import hypothesis.strategies as st
from hypothesis import given
import pickle
import json

# 全局容器存储所有测试用例
generated_cases = []

# 替换成你实际需要的输入数据生成策略
@given(st.integers(min_value=0, max_value=1000), st.lists(st.floats(allow_nan=False, allow_infinity=False), min_size=1, max_size=100))
def test_implementation_consistency(input_a, input_b):
    # 先存储当前生成的用例
    generated_cases.append({
        "input_a": input_a,
        "input_b": input_b
    })
    # 执行新旧实现的结果对比
    python_res = your_python_function(input_a, input_b)
    matlab_res = your_matlab_call_wrapper(input_a, input_b)
    # 浮点数对比建议加误差容忍,比如abs(python_res - matlab_res) < 1e-6
    assert python_res == matlab_res

if __name__ == "__main__":
    # 执行测试生成用例
    test_implementation_consistency()
    # 导出为pickle格式,可直接在Python环境复用
    with open("hypothesis_generated_cases.pkl", "wb") as f:
        pickle.dump(generated_cases, f)
    # 导出为JSON格式,方便Matlab读取处理
    with open("hypothesis_generated_cases.json", "w") as f:
        json.dump(generated_cases, f)

固定用例生成序列

如果你不需要单独导出用例文件,只需要每次运行都生成完全相同的输入序列做回归验证,可以直接固定Hypothesis的生成随机源:

  • 方式1:运行脚本前设置环境变量 HYPOTHESIS_SEED=你自定义的固定整数值
  • 方式2:在测试的settings配置中开启derandomize=True参数,即可实现稳定的用例生成

注意事项

  • 若生成的输入包含自定义类、字节流等不可直接JSON序列化的类型,需提前编写转换逻辑转为基础类型后再存储
  • 跨语言对比浮点数结果时,不要直接做全等判断,建议根据业务精度要求设置误差阈值
  • 如需单独存储触发错误的用例,可以在断言失败的异常捕获分支中单独导出对应用例,方便后续调试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 08:48:03