詹金斯的随机测试失败

Sau*_*bhM 2 jenkins

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

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

最近,只要代码中的更改被推送到它们,Jenkins CI中的两个环境都会随机进行测试失败.有时,测试会随机失败而不会推进任何代码更改.

完成故障排除

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

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

Lee*_*dor 8

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

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

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

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

  • @ user1789493 - 您需要查看失败的测试,并找出它们可能失败的可能原因。我们不能为你这样做。我要向你保证的一件事是:这是你已经做过的事情。无论是在您的代码中还是在您的配置中。 (2认同)