跳转到主要内容

测试钩子时间

项目描述

zc.time提供了一个创建带当前时间的datetime对象的单一接口。它可以通过不修改标准datetime类来轻松替换测试方法。

>>> import time
>>> import zc.time
>>> now = zc.time.now()
>>> type(now)
<type 'datetime.datetime'>

它默认使用UTC,而标准的datetime并不如此。

>>> now.tzinfo
<UTC>

还有一个utcnow()函数,它返回与now()函数返回值相对应的纯UTC时间。这提供了一个与替换now()函数相似的utcnow()实现

>>> now = zc.time.utcnow()
>>> type(now)
<type 'datetime.datetime'>
>>> now.tzinfo

即使替换了now()(不推荐),这种关系依然成立

>>> import datetime
>>> import pytz
>>> t = datetime.datetime(2010, 4, 1, 10, 50, 30, 2345, pytz.UTC)
>>> old_now = zc.time.now
>>> zc.time.now = lambda: t
>>> zc.time.now()
datetime.datetime(2010, 4, 1, 10, 50, 30, 2345, tzinfo=<UTC>)
>>> zc.time.utcnow()
datetime.datetime(2010, 4, 1, 10, 50, 30, 2345)

提供的reset()函数清理了对控制时间的修改

>>> zc.time.reset()
>>> zc.time.now is old_now
True

提供了一个set_now()函数,它接受一个datetime对象,并使now()utcnow()表现得就像这是真实的时间。传入的时间可以是任何时区;纯时间被转换为UTC,使用pytz.UTC.localize

>>> zc.time.set_now(t)
>>> zc.time.now()
datetime.datetime(2010, 4, 1, 10, 50, 30, 2345, tzinfo=<UTC>)
>>> zc.time.utcnow()
datetime.datetime(2010, 4, 1, 10, 50, 30, 2345)
>>> time.time()
1270137030.002345
>>> naive = datetime.datetime(2010, 4, 1, 12, 27, 3, 5432)
>>> zc.time.set_now(naive)
>>> zc.time.now()
datetime.datetime(2010, 4, 1, 12, 27, 3, 5432, tzinfo=<UTC>)
>>> zc.time.utcnow()
datetime.datetime(2010, 4, 1, 12, 27, 3, 5432)
>>> time.time()
1270142823.005432
>>> t = datetime.datetime(2010, 4, 1, 11, 17, 3, 5432,
...                       pytz.timezone("US/Eastern"))
>>> zc.time.set_now(t)
>>> zc.time.now()
datetime.datetime(2010, 4, 1, 16, 17, 3, 5432, tzinfo=<UTC>)
>>> zc.time.utcnow()
datetime.datetime(2010, 4, 1, 16, 17, 3, 5432)
>>> time.time()
1270156623.005432

要向前移动时间,只需再次使用set_now()

>>> zc.time.set_now(t + datetime.timedelta(hours=1))
>>> zc.time.now()
datetime.datetime(2010, 4, 1, 17, 17, 3, 5432, tzinfo=<UTC>)
>>> zc.time.utcnow()
datetime.datetime(2010, 4, 1, 17, 17, 3, 5432)
>>> time.time()
1270160223.005432

如果应用程序使用time.sleep休眠,这将在报告的时间中得到反映

>>> import time
>>> time.sleep(0.25)
>>> zc.time.now()
datetime.datetime(2010, 4, 1, 17, 17, 3, 255432, tzinfo=<UTC>)
>>> zc.time.utcnow()
datetime.datetime(2010, 4, 1, 17, 17, 3, 255432)
>>> time.time()
1270160223.255432

报告的时间将由请求的精确延迟更新,而不是实际的延迟

使用reset()函数清理这一点

>>> zc.time.reset()

如果可用zope.testing,则reset被注册为通用清理处理程序。这通常不足以进行功能测试,功能测试需要自行调用reset

变更

1.0.2 (2015-04-20)

  • 修复打包错误。

1.0.0 (2015-04-20)

  • time.time包含在由zc.time.set_now控制的范围内。

0.3 (2010-07-23)

  • 添加了对time.sleep()的支持。

0.2 (2010-04-01)

  • 添加了utcnow().

  • 添加了set_now(), reset().

0.1

首次发布。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

zc.time-1.0.2.tar.gz (3.7 kB 查看哈希值)

上传时间 源代码

由以下支持