我有一个mocha单元测试套件。
当我在本地运行它们时,一切正常。当我在Jenkins CI服务器上运行它们时,它们有时会失败,有时会通过。
我只是无法重现他们失败的原因。什么可能导致这种行为?
答案 0 :(得分:7)
由于多种原因,测试可能会间歇性地失败,并确定它们失败的原因通常会揭示您的代码库和环境。
以下是一些可能的原因:
•共享对象 - 如果测试环境未重置为众所周知的状态,则保持状态的单例可能会导致测试之间出现问题。 如果您的测试运行器以非确定性顺序执行测试,您可能会看到实际暴露出已损坏状态问题的随机错误
•环境和外部依赖关系 - 任何可以保持状态的外部对象都可能导致不可预测的结果
•时间 - 有时测试是使用超时或线程休眠来编写的,这些测试太具体了。如果构建服务器在高负载下运行,则这些超时可能不够长
作为一般指导,测试必须是:
答案 1 :(得分:2)
我会尝试通过将执行程序的数量减少到1来缩小问题范围。如果测试仍然间歇性地失败,那么你有一个Test Run War,否则(假设它们在本地运行正常)它看起来像一个Resource Leakage
的更多信息答案 2 :(得分:1)
我希望您重复使用测试夹具进行多次测试。在某些情况下,测试的顺序会从本地计算机上的顺序更改,并且在开始测试时没有正确的夹具。要修复它,你应该给每个测试一个干净的夹具。
另一个原因可能是您在runnen测试(两个具有相同测试配置的构建服务器)时从多个位置重用数据库。为每个构建服务器提供自己的数据库或者子/模拟数据库层。除非您测试与外部资源的连接,否则您的测试不应依赖外部资源。
答案 3 :(得分:0)
如果您正在测试多线程代码并在测试中使用Thread.sleep(time);
,则可能会发生这种情况。如果睡眠时间不够长,测试可能会通过或失败,具体取决于计算机的处理速度。相关讨论: