跳转到主要内容

Libfaketime 封装器。

项目描述

Faketime

Faketime 是一个薄薄的 Python 封装,围绕由 Wolfgang Hommel 编写的惊人的 C 库 libfaketime,你可以用它来欺骗 UNIX 进程关于时间和日期是什么。

为什么存在这个包装器?

  • 它提供了一个方便且 Pythonic 的接口,你可以用它来欺骗使用 Python 运行的子进程。
  • 它提供了一个在 Mac OS X 和 Linux 上都相同的 Python 接口(libfaketime 在两者中都以略有不同的方式使用)。
  • 它提供了一个自包含的库,可以安装在任何环境中运行一致的虚拟env - 从软件包管理器安装 libfaketime 可以在不同操作系统和软件包管理器上获得较旧、有错误的版本。

安装

pip install faketime

使用

>>> from commandlib import Command
>>> from faketime import Faketime
>>> from datetime import datetime
>>> faketime = Faketime("currenttime.txt")
>>> datecmd
{'LD_PRELOAD': '/full/path/to/virtualenv/site-packages/faketime/libfaketime.so.1', 'FAKETIME_TIMESTAMP_FILE': '/full/path/to/currenttime.txt'}


>>> datecmd = Command("date").with_env(**faketime.env_vars)
>>> datecmd.run()
[ should print current time ]

>>> faketime.change_time(datetime(2050, 6, 7, 10, 9, 22, 713689))
>>> datecmd.run()
Tue  7 Jun 10:09:21 BST 2050

上述示例显示了如何使用 faketime 与 commandlib 一起使用,尽管可以在字典中使用环境变量与任何命令运行器(例如 Popen)一起使用。

这个库背后的故事是什么?

这个库可用于多种用途,但我主要构建它是为了能够使用 hitchstory 编写测试,同时向 postgres、django 和 celery 撒谎关于日期和时间。

最初我尝试使用 freezegun 来测试 Python 代码,但我意识到它每次只能真正处理一小段代码。此外

  • 如果该代码执行了一个包含其他代码的 Python 进程,那么其他代码将获取 当前 时间而不是冻结时间,从而破坏测试。
  • 它无法伪造,比如,postgres 的时间,所以如果 SQL 查询中嵌入了 datetime 查询,那么就会破坏测试。

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页