测试钩子时间
项目描述
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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c3bbfd5b878c9b8d478ba97ecd7af9efcc87886bacc030c6213c3adb71b08f3a |
|
MD5 | a039333d2aa3a3b75ced445fca1b7eb5 |
|
BLAKE2b-256 | d22f1882e604d12621d0acf929d11723735a0c8f25280d5c59db70648a54545a |