SuperAPI AI 工具集

property-based-testing

测试与质量

查看项目

更新于 10-16 08:11

技能介绍

用途:该技能面向 Python 属性测试(property-based testing),通过 Hypothesis 用“属性”代替固定示例,自动生成大量输入以发现边界条件和边缘用例。适用场景包括:输入空间很大的函数、对所有输入都必须成立的不变量、查找边界条件、序列化/反序列化往返验证,以及 API 与状态机的有状态测试。

主要能力:支持常用策略(strategies),如 st.integers、st.text、st.lists、st.from_regex,并可用 @st.composite 组合出领域对象策略;覆盖常见属性模式,如往返(encode/decode 相等)、幂等(normalize(normalize(x)) == normalize(x))与对照已知实现(oracle);支持用 RuleBasedStateMachine 做有状态测试,以及用 schemathesis 基于 OpenAPI 做 API 模糊测试;可通过 max_examples、deadline、profile 等设置区分 CI 与开发环境。

使用方式:使用 @given 装饰测试函数并传入策略;示例如 @given(st.lists(st.integers())) 后断言排序结果的长度与有序性。官方建议:领域对象用组合策略;示例数量 CI 用 100、开发用 10、发布用 1000;数据库测试用显式模式并限制示例数;慢测试可禁用 deadline(默认 200ms);状态机用 RuleBasedStateMachine。

限制与禁止做法:不得忽略失败示例或在测试中提前 return 隐藏失败;不得使用命中率极低的 filter;不得使用无界输入(如无限制的 st.text());不得修改策略生成的数据(如对生成列表做 append)。