契约效用的随机设计

hesitate的Python项目详细描述


https://travis-ci.org/mhallin/hesitate-py.svg?branch=master

assert,但不太…自信。


由于性能原因,您是否跳过编写assert语句?别再跳过了! 犹豫不决,通过概率的方法,使你的设计合同断言更快!

怎么做?

不处决他们。

是的。

犹豫不决将测量您编写的每个assert语句的执行时间,并执行慢的 比快的频率低。你决定你认为合理的时间 平均每个断言,并且犹豫将控制断言运行的频率以匹配 那。

看起来是这样的:

# worker.pydefdo_work(data):assertdata_is_valid(data)# Super slow!returnwork_work(data)# main.pyimporthesitatehesitate.attach_hook(target_timing=0.002,# 2 milliseconds per assert on average)importworkerworker.do_work(invalid_data)# Might not raise AssertionError! Who knows?

使用受py.test影响的ast重写器时,会出现犹豫。它连接到python的模块加载程序 在加载代码时,它会动态地截取和重写代码。犹豫存储断言时间 在一本普通的字典里,当应用程序退出时,所有的东西都会被遗忘。这是最重要的 对于长寿命进程(如应用程序服务器)很有用。

安装

pip install hesitate

应用程序启动时尽快调用hesitate.attach_hook()。必须这样做 在加载任何要插入的模块之前,请不要犹豫。attach_hook接受三个可选参数:

  • initial_probability-在知道断言的时间之前,它最初运行的概率。 默认值为1.0,这将导致所有断言在第一次运行时触发。将此值降低到 避免每次应用程序启动时,系统中都充斥着可能很慢的断言。
  • target_timing-每个断言应该聚合的预期持续时间(秒)。违约 是0.1。
  • convergence_factor-断言的度量收敛的速度。时机 一个断言是低通过滤,这控制了过滤的速度。1.0意味着 总是使用新值。0.0意味着它永远不会改变其初始值。违约 是0.7。

python支持

使用Python2.7、3.2、3.3、3.4和PyPy2.4测试犹豫。

django积分

犹豫不决是预先打包的django应用程序,它与您的设置集成在一起,并且 支持django 1.6和1.7。

INSTALLED_APPS=(# Hesitate should be loaded first of all apps!'hesitate.wrappers.django',# The rest of your apps here)HESITATE_ENABLED=True# Optional, defaults to the inverse of DEBUG# These parameters reflect the attach_hook parameters and are all optional:HESITATE_INITIAL_PROBABILITY=1.0HESITATE_TARGET_TIMING=0.1HESITATE_CONVERGENCE_FACTOR=0.7

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将字符串转换为自定义对象   java如何从socket方法获取数据?   Java中的soap读取回车和新行   java在单击时替换图像   java推荐的使用RXJava执行异步任务的方法   java MySql连接器JDBC驱动程序不支持连接池吗?   java将活动堆栈清理到顶部   java计数用户输入的数量   java从webservice下载大文件导致应用程序性能问题   JavaLocalDate。EPOCH不可用   java如何在使用Selenium等待一定时间后,在页面无法加载(get(url))时自动刷新页面   java Calendar setLenient方法不允许检查年份字段的健全性   java Eclipse和intelliJ 安卓 SDK问题   java为什么我可以在没有super关键字的情况下调用父方法?   java iText的PDF格式不好