【问题标题】:vstest.executionengine.exe crahed on TFS, but on my local VS2012 all okvstest.executionengine.exe 在 TFS 上崩溃,但在我的本地 VS2012 上一切正常
【发布时间】:2014-03-01 12:35:03
【问题描述】:

当我在 TFS 服务器上运行测试时,出现以下错误:

The active Test Run was aborted because the execution process exited unexpectedly. To investigate further, enable local crash dumps either at the machine level or for process vstest.executionengine.exe. Go to more details: [http://go.microsoft.com/fwlink/?linkid=232477]

当我在本地机器上运行这个测试时,我得到了“全部通过”的结果。我不知道可能是什么原因,在 TFS 服务器和本地运行的测试有什么区别?

【问题讨论】:

  • 在 TFS 上是否始终失败?
  • 我在构建服务器上遇到了同样的问题。问题间歇性发生。到目前为止,我的解决方法是再次运行构建,一切都很好。我没有在开发者机器上看到这个问题。我的环境是 VS2013/TFS2013 使用 32 位运行器执行测试。

标签: unit-testing visual-studio-2012 tfs tfsbuild


【解决方案1】:

确保您在构建服务器上安装了 Visual Studio 2012。

【讨论】:

    【解决方案2】:

    我们在其中一个 CI 构建中遇到了同样的问题。原因是一个(或多个)测试正在启动单独的线程,并且当在此类线程中发生崩溃而不是在 vstest.executionengine 的主线程中发生崩溃时,该进程只会在没有其他信息的情况下崩溃。按照错误消息中的建议启用故障转储有助于我们本地化有问题的模块。另一种方法是开始从构建定义中删除测试程序集,以便我们只运行部分单元测试,直到我们本地化有问题的测试。

    本地环境和 TFS 的区别在于构建服务器创建的文件夹结构与本地不同,因此一些相对路径会出错。正是在我们的情况下,我们丢失了一些数据文件。我们都忘记将它们映射到构建定义的“源设置”路径中,也忘记正确部署它们。

    【讨论】:

    • 同样的问题,也是测试异步方法(使用VSO + MSpec)引起的。解决方案是用 Method.Wait() 替换 await Method()。
    【解决方案3】:

    今天我们也遇到了同样的异常:

    为测试源运行 Visual Studio 测试运行程序 活动测试运行
    由于执行过程意外退出而中止。到
    进一步调查,在机器上启用本地故障转储
    级别或用于进程 vstest.executionengine.exe。转到更多详细信息:
    http://go.microsoft.com/fwlink/?linkid=232477 测试运行已完成。 0
    执行的测试。测试运行失败。

    所有单元测试用例都被中止。我们不知道为什么以及哪个测试用例导致了崩溃。

    我们已关注"Collecting User-Mode Dumps" 配置 tfs 构建服务器以收集问题的转储文件。

    并使用DebugDiag 分析转储文件。最后我们找出了根本原因。

    根本原因是一个单元测试用例调用了以下方法并导致锁:

    [[PrestubMethodFrame] (System.Messaging.Interop.SafeNativeMethods.IntMQPathNameToFormatName)] System.Messaging.Interop.SafeNativeMethods.IntMQPathNameToFormatName(System.String, System.Text.StringBuilder,Int32ByRef) System.Messaging.Interop.SafeNativeMethods.MQPathNameToFormatName(System.String, System.Text.StringBuilder,Int32 ByRef)+1c System.Messaging.MessageQueue.ResolveFormatNameFromQueuePath(System.String, Boolean)+154 System.Messaging.MessageQueue.Exists(System.String)+ea

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      • 2015-05-26
      相关资源
      最近更新 更多