【问题标题】:Python unit test passes locally, but fails in Jenkins when comparing datesPython 单元测试在本地通过,但在比较日期时在 Jenkins 中失败
【发布时间】:2022-01-20 01:21:18
【问题描述】:

以下测试在本地通过,因为本地是 EST:

    def test_get_local_ts(self):
        dt = Utils.get_local_ts().strftime('%Y-%m-%d')
        dt1 = datetime.now().strftime('%Y-%m-%d')
        self.assertEqual(dt, dt1)

但在 Jenkins 管道中运行时失败。

因为 Jenkins 服务器在 UTC 时间运行,但是方法 get_local_ts 正在返回本地时间。

于是就发生了这个错误:

self.assertEqual(dt, dt1)

AssertionError: '2021-12-16' != '2021-12-17'

此外,只有在美国东部标准时间晚上 7 点之后运行它时才会失败,此时 UTC 会滚动到第二天。

我怎样才能让它随时在本地和 Jenkins 中通过?

谢谢!

【问题讨论】:

  • “Jenkins 服务器在 UTC 时间运行”和“get_local_ts 正在返回本地时间”是什么意思?您是否尝试过对 datetime.now() 使用 tz 参数以便处理时区感知对象?

标签: python unit-testing jenkins


【解决方案1】:

如果您的单元测试涉及日期时间对象,那么您可能应该将时区设置为测试设置的一部分。单元测试应该在受控条件下运行,而不依赖于外部因素。

https://docs.python.org/3/library/time.html#time.tzset

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 2019-12-07
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多