问题标签 [freezegun]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
515 浏览

python-3.x - 如何确定哪一行 Python 代码正在生成 PendingDeprecationWarning?

我有一组 Python 3 单元测试,当使用此命令行执行时:

...正在生成PendingDeprecationWarning

是否有一种简单的方法可以让我跟踪最终使用的代码片段imp.py,也许是通过打开某种形式的堆栈跟踪?我已经缩小了一些范围;它似乎只在我使用freezegun时触发。但是, freezegun 本身似乎没有使用imp

0 投票
1 回答
3341 浏览

python - 使用 freezegun,为什么 pytz.utc 和 utcnow() 输出不同的日期时间?

我很困惑为什么使用 freezegun 冻结时间的函数会根据是否datetime.datetime.utcnow()调用或datetime.datetime.now(pytz.utc). 我不是说它坏了,只是我不明白为什么,想知道!

例如,使用此功能:

输出是:

我想第一个是天真的日期时间,但为什么它们的时间不同?

(最终我想知道的原因:如果我在测试中使用 freezegun,并且我使用 pytz 在我的测试代码中生成时间,我想知道它的“正确”行为应该是什么。)

0 投票
0 回答
3091 浏览

python - Python Freezegun 在冻结时间到 datetime.datetime.now() 时给出不同的值

我试图使用 freezegun 将时钟设置回 10 秒进行单元测试。

我发现使用 freezegun 将时间设置为现在会导致 datetime.datetime.now() 的预期行为,但 time.time() 的行为有所不同,因为“冻结”时间落后约 30,000 秒(8 小时)。

使用 datetime.datetime.utcnow(),它关闭 3600 秒(1 小时)。

我需要做什么才能适当地模拟要与 time.time() 一起使用的时间?

使用 now():休息 8 小时

使用 utcnow():休息 1 小时

更新:

这行得通,但我想了解原因:

使用 utcnow() + 1 小时:与预期相同的 time.time() 输出

0 投票
2 回答
2137 浏览

python - django 测试中的模拟时间问题:使用 freezegun 似乎没有冻结时间

我在这里写了一个功能测试来检查我的 API 限制是否按预期工作(将在每个月初休息)。

测试类:

测试在以下情况下工作正常:last_day_of_current_month = datetime.datetime(... second=0)
但在以下情况下将失败:last_day_of_current_month = datetime.datetime(... second=59)

调试后,似乎timeDjangoRestFramework 中使用的模块throttling.UserRateThrottle以某种方式给出了一个值,该值始终领先于我的测试中的冻结时间,这导致了几秒钟的精度问题。

基于FreezeGun Doc time.time()也应该被冻结:

一旦调用了装饰器或上下文管理器,所有对 datetime.datetime.now()、datetime.datetime.utcnow()、datetime.date.today()、time.time()、time.localtime()、time 的调用.gmtime() 和 time.strftime() 将返回已冻结的时间。

但看起来我的情况time.time正确地采用了模拟日期时间的开始时间,但随着时间的推移不断变化,这是意料之外的,预计它会被冻结,直到手动转发时间。

我尝试单独使用模块来模拟time.time使用,但仍然没有解决问题。UserRateThrottlemock

----> 知道可能是什么问题,如何解决?

测试失败:(将时间转发到该月的最后一天:第 14 行

self.assertEqual(resp.status_code, 429)
AssertionError: 200 != 429

DRF 类源代码

0 投票
2 回答
677 浏览

python - factoryboy 不使用 freezegun

简单模型(models.py):

简单工厂(test_factories.py):

manage.py shell

当前日期是 2017-08-16,假日期是 1999-09-09。里面freeze_timedate.today()给假日期,但factoryboy不受freezegun的影响。它仍然给出真实的当前日期。

  • 这是错误吗?如果是,factoryboy 或 freezegun 的错误?

  • 如何解决这个问题?换句话说,如何让factoryboy给出假约会?(现在,我MyModelFactory(start_date=date.today())用来创建带有假日期的模型。)

冷冻枪版本:0.3.9

工厂男孩版本:2.8.1

0 投票
0 回答
1203 浏览

django - Django 单元测试:`freeze_time` 在某些情况下效果不佳(看起来像一个错误..?)

这是我测试TIME_ZONE和`USE_TZ的作用的代码:

结果

奇怪的部分是test_freeze_time1(),在 下进行测试TIME_ZONE='UTC', USE_TZ=True,我认为奇怪的原因是它datetime.now()没有打印出UTC时间,如果我删除了这不是真的@freeze_time("2018-01-04 13:30:55", tz_offset=9)

结果

正如您在此处看到的,两者都UTC在条件下打印出时间TIME_ZONE='UTC', USE_TZ=True

其他设置似乎运行良好。

或者,我错过了什么吗?

0 投票
1 回答
491 浏览

django - Freezegun always causes RuntimeWarning of receiving naive datetime

I'm working with a testcase where an organization can be suspended. Currently I'm using freezegun to freeze a firm time, which is a datetime.datetime object with tzinfo=pytz.UTC.

In the test below you'll see a print of self.fake_datetime which returns a tzaware datetime: 2000-01-01 00:00:00+00:00.

When the test runs, I keep getting the famous RuntimeWarning:

/usr/local/lib/python2.7/dist-packages/django/db/models/fields/init.py:1447: RuntimeWarning: DateTimeField Organization.suspended received a naive datetime (2000-01-01 00:00:00) while time zone support is active. RuntimeWarning)

I've been playing around with the freezegun timezone examples without any success to remove the runtime warning.

Any suggestions on how this should be resolved properly? I'd like to keep using Freezegun for this without a RuntimeWarning. Suppressing is an option, but I'd prefer not to.

update -- Solution based on the answer of xyres

Service was saving the datetime timezone unaware. Old situation commented and new situation is the actual code. I was thinking to much about mocking and assumed that the datetime saved in the service would be mocked with the timezone aware datetime object from the testcase by freezegun - which is not the case.

0 投票
1 回答
1213 浏览

python-unittest - freeze_time 不适用于默认参数

我有一个函数,其参数的默认值为datetime.now(). 方法如下所示,

我有一个类似下面的测试方法,

为什么freeze_time不使用默认参数值?

0 投票
1 回答
364 浏览

python - Pytest flask live_server:无法冻结时间

我正在尝试使用 pytest-flask 为 Flask 应用程序实现单元测试。我的查询的输出取决于当前时间。

对于一致的单元测试,我试图冻结时间。我习惯了freezegun,所以这是我尝试过的:

我可以在日志中看到我的应用程序以正确的冻结时间启动。但是当测试运行时,我可以看到查询端点是用实际的当前时间完成的。夹具似乎live_server重置了当前时间。

你有没有遇到过这个问题?

0 投票
1 回答
309 浏览

python - 将 Boto3 与 freezegun 一起使用会导致 403

我正在使用 boto3 从 AWS S3 存储桶加载一些文件。哪个工作正常。但是对于我的单元测试,我正在调用 freeze_time 然后该函数返回错误:botocore.exceptions.ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden

有没有一种解决方案可以让我继续使用 freeze_time 并从 S3 检索文件?

该代码在没有@freeze_time("2019-01-30")并且添加时不起作用。