Jenkins 中的单元测试失败

Posted

技术标签:

【中文标题】Jenkins 中的单元测试失败【英文标题】:Unit tests failing in Jenkins 【发布时间】:2017-03-20 09:44:44 【问题描述】:

我们在 C# 解决方案中有 10K+ 单元测试,这些测试在本地和 TFS 中运行时都通过了。

现在,我们正在为我们的解决方案堆栈设置 Jenkins,但我们面临着大约 250 个单元持续失败的问题。

当我尝试使用 Visual Studio 和 Commnad 提示符 (MSTest) 在 jenkins 设置服务器中运行它们时,通过了相同的单元测试。

您认为问题是什么?任何有关此问题的线索都会有所帮助。

编辑 1:

我进行了研究,但找不到任何东西,因为问题本身很奇怪。如果您不清楚,请提出问题而不是投反对票。

编辑 2:

我能够找出问题所在。它与 unittests dll 配置文件一起使用。当我通过删除配置文件在服务器中执行 MSTest 时,我看到同一组测试失败,而 Jenkins 设置失败。

我想我们需要修改 Jenkins 门户中配置的步骤以加载 unittests dll 配置文件。

【问题讨论】:

【参考方案1】:

我的猜测是您的测试实际上不是单元测试,而是集成测试或更糟,并且它们不确定地失败。除此之外,您是在要求人们在没有发布源代码的情况下在这里做不可能的事情。

要么发布来源,要么聘请了解 Jenkins IMO 的顾问。

【讨论】:

感谢您的回答。我确信这些是单元测试,我需要看看它们为什么会失败。【参考方案2】:

条件编译符号可能存在​​问题(例如 DEBUGRELEASE 代码):在 VS 中,您通常在 DEBUG 版本上运行测试,在发布版本上在 CI 服务器上运行。

还要查看一些未正确清理的全局状态。某些在测试看似完成后可能仍在运行的线程可能会破坏以后的测试,即使这些后来的测试位于不同的测试 dll 中也是如此。如果测试失败取决于测试运行的顺序,有时可以检测到这一点。

另一个经常面临的问题是依赖于文件中的测试数据:这些文件可能在实际运行测试的虚拟化环境中丢失。使用Deployment 属性。

【讨论】:

【参考方案3】:

NCrunch 也有类似的问题。也许您可以签入 VS 您的“构建”标签平台目标。它应该和 Jenkins 的配置一样。例如“Platform target”是x64,在Jenkins中也应该使用。

【讨论】:

以上是关于Jenkins 中的单元测试失败的主要内容,如果未能解决你的问题,请参考以下文章

设置Jenkins使用Karma和Eslint进行单元测试和Lint检查

Jenkins 中的 Python 单元测试?

Jenkins怎么集成c++单元测试?

使用Jenkins进行的UWP单元测试

xcode中的单元测试用例失败

Jenkins 和 Xcode5 单元测试目标 - 没有测试输出?