TFS构建中,Visual Studio单元测试的运行速度较慢

26

我的项目有1000多个单元测试,在本地机器上,所有测试都在10秒内运行完成。但是当它们在TFS Build上运行时,有些测试运行速度比其他测试明显要慢。其中3个测试需要大约1-2分钟才能完成,另外4个需要5-30秒,其余的则只需要几分之一秒。我注意到所有这些较慢的测试都使用了 Microsoft Fakes 中的假对象,并且每个较慢的测试都是其类中第一个运行的测试。但是很多其他的测试也使用了假对象(有些使用得更频繁),并以正常速度运行。我想知道可能导致这种减速的原因是什么,以及如何解决它。

编辑:我注意到每个较慢的测试都在一个不使用模拟对象的测试后运行。也许这种减速是由 ShimsContext 的初始化引起的。在我的测试类中,ShimsContext 是在 TestInitialize 和 TestCleanup 方法中创建和释放的。这样做对性能有显著影响吗?


@sshm,你找出这是为什么了吗?我的测试在本地运行只需要20秒,但目前在托管的构建服务器上已经用了35分钟!谢谢,Russ。 - RuSs
这是一个新的减速,还是一直都是这样?第一个猜测是,在TFS Build上,它在每个测试完成后记录测试结果,往返旅行会让你崩溃。我会查看trx文件,并查看它认为测试运行了多长时间。另一个常见问题似乎是如果您配置了intellitrace以在所有测试上运行。然后需要收集大量信息。 - Mike
这里也有同样的问题。我们有大约400个单元测试,在本地运行需要约5分钟,但在TFS构建中需要超过一个小时。非常令人沮丧。 - Craig
2个回答

1
首先,我强烈建议您远离shim。它们是一个累赘,并且除了极少数情况外,根本不需要。为可测试性而设计您的代码,您将发现可以不使用它们。
其次,shim不是线程安全的,不能安全地并发使用。很可能这就是您看到的运行时间非常慢的原因。
要么您的本地正在进行不应该并发的操作(MS表示它不安全,但未执行),构建服务器则不会。
要么构建服务器尝试并行处理,导致问题。
调整并发设置以禁用它,并查看对您的运行时有何影响。

0

2
微软开发者社区指出单元测试的速度较慢。即使使用更好的机器配置,在TFS Build上运行单元测试对他们来说也非常缓慢。 请参考以下链接: https://developercommunity.visualstudio.com/content/idea/351207/starting-then-running-all-unit-tests-in-a-solution.html - jo_Veera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接