为啥超过 128 个测试时 MSTest 部署一些测试输入文件失败?

Posted

技术标签:

【中文标题】为啥超过 128 个测试时 MSTest 部署一些测试输入文件失败?【英文标题】:Why does MSTest fail to deploy some test input files when there are more than 128 tests?为什么超过 128 个测试时 MSTest 部署一些测试输入文件失败? 【发布时间】:2014-07-25 11:49:15 【问题描述】:

我们在构建服务器上运行自动化测试,该服务器使用 Jenkins 检查源代码、构建它并通过调用 MSTest 运行测试。在我们添加第 129 个单元测试之前,一切正常。然后其他一些测试神秘地失败了。失败的测试都需要输入文件,这些文件应该部署到 TestResults 目录。但是,当添加第 129 个测试时,不会部署这些输入文件!请注意,其他测试也需要输入文件,但确实会部署这些文件。没有明显的原因说明为什么有些测试输入文件会被部署,而有些则不会。

我们尝试过的事情:

第 129 个单元测试添加到哪个测试项目或新测试中包含什么都没有关系(例如:Assert.AreEqual(1, 1);) 以我的身份登录时,在构建服务器上的命令行(Visual Studio 2010 x86 工具)上手动运行 MSTest。当测试超过 128 个时,相同的测试会失败。因此,这不太可能与 Jenkins 或自动化测试在不同的用户帐户(系统)下运行这一事实有关。 将构建代码从构建服务器复制到我的笔记本电脑并在那里运行相同的 MSTest 命令。在我的笔记本电脑上,所有 129 项测试都通过了,即使构建机器和我的笔记本电脑使用的是相同版本的 MSTest (10.0.30319.1)。

有没有其他人见过这样的事情?它必须是仅在添加超过 128 个测试时才会发生的事情,并且可以在一台机器上发生,但不能在另一台机器上发生! 128是巧合吗?我知道这是计算中的一个重要数字。

【问题讨论】:

你如何在服务器上运行测试?您使用的是mstest.exe 还是vstest.console.exe 在MSDN 上交叉发布此问题。 对不起;刚刚看到您的评论 - 我正在使用 VS 2010 中的 mstest.exe。 【参考方案1】:

经过大量调查,MSTest 或它在幕后调用的某些代理似乎存在问题。详情请见MSDN post。

但是当我在构建服务器机器上安装 Visual Studio 2013 时,除了已经安装的 VS2010 之外,所有 129 个测试都将通过,无论是从 VS2010 命令提示符运行 MSTest 还是通过 Jenkins 运行时。请注意,VS2013 用于构建或运行测试;我什至没有在构建服务器上打开它;刚刚安装好了!

所以安装 VS2013 会影响 MSTest for VS2010 的运行方式。也许它修补了 MSTest 或它使用的某些代理,或者更改了一些环境变量,或者......?!所以可能有一个更短的解决方法,但如果你想使用 MSTest for VS2010 执行超过 128 个测试,现在的解决方法是在机器上安装 VS2013 和 VS2013。微软肯定知道这个问题?!

【讨论】:

以上是关于为啥超过 128 个测试时 MSTest 部署一些测试输入文件失败?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 2008 中分析 MsTest 的单元测试?

多次重复 mstest 测试运行

VS2010 中的 MSTest - 如何一步启动所有负载测试

如何使用 MSTest 测试异步代码

为啥 LibSvm 准确率不超过 50%?

MSTest 和 app.config 问题