能否为Hypothesis测试的收缩(shrinking)阶段设置时间限制?
针对Hypothesis收缩过程设置时间限制的解决方案
当然可以给收缩过程单独设置时间限制,Hypothesis提供了几个实用参数来控制:
- 使用
shrink_timeout参数:在@hypothesis.settings装饰器中直接指定该参数(单位为秒),比如设置shrink_timeout=300,就能让收缩过程最多运行5分钟,超时后会停止并返回当前找到的最小用例。 - 搭配
max_shrinks参数:如果不想单纯依赖时间限制,还可以限制收缩的最大尝试次数,比如max_shrinks=1000,避免无限制的收缩操作消耗资源。 - 全局超时
timeout:若要给整个测试流程(包括用例生成和收缩)设置总时间上限,可使用timeout参数,但注意这会覆盖默认超时配置,需根据测试场景调整。
举个实际配置的例子:
from hypothesis import settings, Verbosity @settings( verbosity=Verbosity.debug, shrink_timeout=300, # 收缩过程最多运行5分钟 max_shrinks=1000 # 最多尝试1000次收缩操作 ) def test_your_state_machine(): # 你的RuleBasedStateMachine测试代码
另外,如果收缩过程耗时过于夸张,还可以临时关闭收缩(设置shrink=False),先定位到触发bug的原始用例,之后再针对性地开启收缩,能大幅节省前期排查时间。
内容的提问来源于stack exchange,提问作者HaskellElephant
相关产品推荐
相关产品推荐

