小编典典

Jenkins中的随机测试失败

jenkins

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

我的问题:我为网站编写了许多单元测试,回归测试和冒烟测试。我的开发和预生产虚拟环境都连接到Jenkins CI。

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

完成故障排除:

  • 在本地运行测试,它们通过了。
  • 是否在Jenkins CI(使用“立即构建”按钮)中进行了一些手动构建,测试通过了。
  • 单独运行失败的测试,但仍然可以通过。

在较早版本中失败的测试在下一个版本中通过。在较早版本中通过的某些测试在接下来的版本中失败了。有人可以建议我可以做什么吗?


阅读 352

收藏
2020-07-25

共1个答案

小编典典

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

我见过的一些东西导致此:

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

这些都是很难解决的问题。特别是如果他们没有充分的理由离开。它使您感到紧张,因为您怀疑当您急着要修复生产系统中的一个讨厌的错误时,它会再次出现。

2020-07-25