代码推送到Jenkins时的随机测试失败

时间:2013-01-04 21:51:31

标签: python django jenkins django-testing django-jenkins

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

我用的是什么:

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

工作:

  • 我有网站的单元测试,冒烟测试和集成测试。 Jenkins已经设置好了,每当代码从我的本地git分支推送到git repo上的Developer和Production分支时,就会在Jenkins中触发构建。

问题:

  • 当我进行' python manage.py测试'
  • 时,我的测试正在本地传递
  • 当代码被推送到其他分支机构(开发人员和生产)时,Jenkins中的随机测试(主要是单元测试)失败。
  • 测试失败后,如果我通过按下“立即构建”手动进行构建。 Jenkins中的按钮,测试通常通过,构建成功。
  • 有时候,如果代码没有变化,代码仍被推送到这些分支,那么Jenkins中的测试会随机失败。

一些常见的错误:

  • AssertionError:302!= 200
  • TypeError:' NoneType'对象不可订阅
  • IndexError:列表索引超出范围
  • AssertionError:datetime.datetime(2012,12,5,0,0,27,2188397)!= datetime.datetime(2012,12,5,0,0,27,239884)
  • AssertionError:响应重定向到' x'预期' y'

到目前为止的故障排除:

  • 在我的计算机本地以及虚拟服务器上本地执行所有测试。它们运行正常。
  • 在本地以及虚拟服务器上执行各个失败的测试。它们运行正常。
  • 试图重新创建失败的条件,但截至目前,测试正在通过。

我看到的唯一问题是,无论何时将代码推送到开发人员和生产brnach,随机测试失败都会启动。有些测试会反复失败。

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

2 个答案:

答案 0 :(得分:1)

这是一个非常难以回答的问题。

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

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

  1. 找到重现失败的方法。如果您可以在自己的笔记本电脑上进行测试失败,那就太好了。如果不能,则必须在失败的机器上进行调试。

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

  3. 保持开放的心态。错误可以在任何地方:硬件,软件环境,代码或测试代码。但除非你是上帝,Linus Torvalds或Brian Kernighan这是一个安全的第一个假设,这个bug起源于你的键盘和座位后面。 (以上所有三个黑客也犯了错误。)

答案 1 :(得分:-1)

问题 - AssertionError:datetime.datetime(2012,12,5,0,0,27,2188397)!= 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)