詹金斯的随机测试失败

时间:2012-12-31 20:18:46

标签: jenkins

我在Python上工作 - Django网站。我使用GIT作为我的VCS。对于持续集成,我使用Jenkins CI。我已经使用Python设置了两个虚拟环境,一个用于开发,另一个用于预生产。

我的问题: 我为网站编写了许多单元测试,回归和冒烟测试。我的开发和预生产virtualenvs都与Jenkins CI相关联。

最近,每当代码中的更改被推送到Jenkins CI时,两个环境中的测试都会随机失败。有时,测试会随机失败而不会推进任何代码更改。

完成故障排除:

  • 在当地进行测试,他们正在通过。
  • 在Jenkins CI中手动构建了一些(使用“立即构建”按钮),测试正在通过。
  • 单独进行失败的测试,他们仍然在经过。

在早期版本中失败的测试在下一个版本中传递。在早期版本中传递的一些测试在下一版本中失败了。有人可以建议我能做什么吗?

1 个答案:

答案 0 :(得分:8)

您将不得不确定导致测试随机失败的环境因素。

我见过的一些事情导致了这一点:

  • 内存 - CI计算机上还有其他运行的东西 没有足够的记忆来完成所有这些并构建你的东西​​
  • 时间 - 您的代码中有些内容会因为内容而失败 时间。例如,我的代码将在2月29日失败。它 成功后可能会让我们感到惊讶。它可能就像一个 如果只有一个数字,则无法格式化秒数。
  • 外部依赖项 - 您的测试依赖于其他服务器 起来。如果它发生故障或真的很忙,它将不会响应你的 测试代码和测试失败。这可能是一个数据库服务器。
  • 数据库内容 - 您可能没有为针对数据库运行的测试正确设置所有前提条件
  • 并发 - 有时多线程代码只会在条件恰到好处(或者只是错误)时失败。一个 由外部因素引入的小随机延迟可以使代码 工作或使其失败。它容易被忽视的竞争条件 多线程代码。
  • 服务器(或CPU) - 有时测试会失败 如果它在测试机器中的特定服务器或核心上运行。 当然,如果您只有一台测试机器,则不会发生这种情况。但 如果一台机器坏了,连接不好(防火墙 规则),其他进程运行,更少(或更多)内存,您的测试 当它们被随机分配到那个上运行时可能会失败。
  • [在此插入] - 还有一百万。

这些都是难以解决的问题。特别是如果他们没有充分理由离开。它让你感到紧张,因为你怀疑它会在你急于修复生产系统中的一个令人讨厌的错误时回来。