契约效用的随机设计

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 Selenium Web驱动程序。负载策略不稳定   JAVAsql。SQLException:没有合适的驱动程序无法创建“oracle”类的JDBC驱动程序。jdbc。驾驶员用于连接URL的OracleDriver   java谷歌地图“优化路径点”如何解决旅行推销员的问题?   java这段代码可能会造成潜在的内存泄漏吗?   java更改JCombobox的高度   java如何清除jtable中的数据   JavaHadoop:错误安全性。UserGroupInformation:MapReduce程序中的PriviledgedActionException   java如何将sonarlint添加到gradle任务中?   性能为什么Java排序优于原语计数排序   java Spring属性PlaceHolderConfigure从数据库加载   java从泛型获取类不起作用   java Spring@Transactional传播属性   java试图拥有主菜单和子菜单类   XSL的java后处理步骤   java第一个字母和最后一个字母、第二个字母和倒数第二个字母之间的差值之和,依此类推,直到单词的中心   switch语句在Java中的下一个出发点   java 安卓如何在OnBackpress()时设置viewpager的特定项目位置?