Python 当代码推送到Jenkins时,随机测试失败

Python 当代码推送到Jenkins时,随机测试失败,python,django,jenkins,django-testing,django-jenkins,Python,Django,Jenkins,Django Testing,Django Jenkins,我之前也问过这个问题,但我对答案不满意 我使用的是: 在Django/python网站上工作 在本地python虚拟环境上完成开发 使用GIT作为我的SCM 为GIT的开发人员和生产分支部署单独的虚拟服务器 使用Jenkins CI进行持续集成。为Jenkins部署了单独的虚拟服务器 工作: 我对网站进行了单元测试、冒烟测试和集成测试。Jenkins的设置使得每当代码从本地git分支推送到git repo上的开发和生产分支时,Jenkins中就会触发一个构建 问题: 当我执行“pyth

我之前也问过这个问题,但我对答案不满意

我使用的是:

  • 在Django/python网站上工作
  • 在本地python虚拟环境上完成开发
  • 使用GIT作为我的SCM
  • 为GIT的开发人员和生产分支部署单独的虚拟服务器
  • 使用Jenkins CI进行持续集成。为Jenkins部署了单独的虚拟服务器
工作:

  • 我对网站进行了单元测试、冒烟测试和集成测试。Jenkins的设置使得每当代码从本地git分支推送到git repo上的开发和生产分支时,Jenkins中就会触发一个构建
问题:

  • 当我执行“python manage.py测试”时,我的测试在本地通过
  • 在Jenkins中,当代码被推送到其他分支(开发人员和生产部门)时,随机测试(主要是单元测试)失败
  • 在测试失败后,如果我通过按Jenkins中的“build Now”(立即构建)按钮手动进行构建,测试通常会通过,并且构建成功
  • 有时,当没有对代码进行任何更改并且代码仍然被推送到这些分支时,Jenkins中的测试会随机失败
一些常见错误:

  • 断言错误:302!=二百
  • TypeError:“非类型”对象不可下标
  • 索引器:列表索引超出范围
  • 断言错误:datetime.datetime(2012,12,5,0,0,27,218397)!=datetime.datetime(2012,12,5,0,0,27,239884)
  • AssertionError:响应重定向到“x”,预期为“y”
故障排除截止日期:

  • 在我的机器和虚拟服务器上本地运行所有测试。他们跑得很好
  • 在本地和虚拟服务器上运行单个失败测试。他们跑得很好
  • 尝试重新创建失败的条件,但到目前为止,测试正在通过
我看到的唯一问题是,每当代码被推送到开发人员和生产部门时,随机测试失败就会发生。有些测试一再失败


谁能告诉我我还能做些什么来解决这个问题。我试图用谷歌搜索这个问题,但没有成功。我知道xunitpatterns网站对不稳定的测试行为有一些很好的见解,但它并没有帮助,因为我在那里尝试了大部分东西

这是一个很难回答的问题

django开发人员可能会遇到一些常见的陷阱,但我不知道

除此之外,这只是正常的调试:

  • 找到重现失败的方法。如果你能在自己的笔记本电脑上测试失败,那就太好了。如果不能,则必须在出现故障的机器上进行调试

  • 获取更多信息。可以进行断言以在失败时打印自定义消息。打印相关变量的值。将调试打印输出添加到代码和测试中。看看哪里事情不是他们应该的样子。谷歌如何使用Python调试器


  • 保持开放的心态。bug可以出现在任何地方:硬件、软件环境、代码或测试代码中。但是,除非你是上帝,莱纳斯·托瓦尔兹或布赖恩·克尼汉,否则这是一个安全的第一假设,这个错误起源于你的键盘和座椅靠背之间的某个地方。(以上三位黑客也都犯了错误。)

    关于这个问题-断言错误:datetime.datetime(2012,12,5,0,0,27,218397)!=datetime.datetime(2012,12,5,0,0,27,239884)

    我使用了冷冻枪库,使日期时间更可预测。 我不知道为什么会出现这个问题,但冻结日期和时间在某种程度上有所帮助

    例如:

    from freezegun import freeze_time
    import datetime
    import unittest
    
    
    @freeze_time("2012-01-14")
    
    def test():
    
    assert datetime.datetime.now() == datetime.datetime(2012, 1, 14)
    

    你能把你发布的其他问题链接起来吗?詹金斯可能正在改变你测试的顺序。如果您的测试不是真正的单元测试,那么在测试之间可能会有一些东西持续存在,从而导致这些问题。我也遇到了完全相同的问题。你是怎么解决的?