Msbuild Net和NUnit-测试完成,但任务没有';T
我有一个CruiseControl.Net安装程序,使用Nant清理以前的日志,然后启动VS项目的msbuild,最后运行nunit控制台执行测试 它似乎构建了几秒钟(很好),然后开始运行600个测试,这大约需要一分钟。然而,即使日志文件在那里,它也会在那里“无所事事”10分钟,此时构建超时,进程退出。然后,CruiseControl.NET网页将结果显示为失败,但有一个例外:Msbuild Net和NUnit-测试完成,但任务没有';T,msbuild,nunit,cruisecontrol.net,nant,Msbuild,Nunit,Cruisecontrol.net,Nant,我有一个CruiseControl.Net安装程序,使用Nant清理以前的日志,然后启动VS项目的msbuild,最后运行nunit控制台执行测试 它似乎构建了几秒钟(很好),然后开始运行600个测试,这大约需要一分钟。然而,即使日志文件在那里,它也会在那里“无所事事”10分钟,此时构建超时,进程退出。然后,CruiseControl.NET网页将结果显示为失败,但有一个例外: ThoughtWorks.CruiseControl.Core.Tasks.BuilderException: Com
ThoughtWorks.CruiseControl.Core.Tasks.BuilderException: Command Line Build timed out (after 600 seconds)
at ThoughtWorks.CruiseControl.Core.Tasks.ExecutableTask.Execute(IIntegrationResult result)
at ThoughtWorks.CruiseControl.Core.Tasks.TaskBase.Run(IIntegrationResult result)
at ThoughtWorks.CruiseControl.Core.Project.RunTask(ITask task, IIntegrationResult result, Boolean isPublisher)
at ThoughtWorks.CruiseControl.Core.Project.RunTasks(IIntegrationResult result, IList tasksToRun, Dictionary`2 parameterValues)
at ThoughtWorks.CruiseControl.Core.Project.Run(IIntegrationResult result)
at ThoughtWorks.CruiseControl.Core.IntegrationRunner.Build(IIntegrationResult result)
at ThoughtWorks.CruiseControl.Core.IntegrationRunner.Integrate(IntegrationRequest request) BaseDirectory: , Executable: C:\Program Files\NUnit 2.5.8\bin\net-2.0\nunit-console.exe
下面是ccnet.config脚本。我已经尝试过将超时时间改为3分钟,以防与此有关,但即使这确实有效(没有),这也是一个狡猾的黑客行为,当测试完成运行时,他们应该优雅地退出
我已经在命令行上运行了这个命令,并确认它只需要大约一分钟的时间。有什么理论吗
<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
<project name="CodeTests">
<workingDirectory>C:\Source\Wholesale\Comp.EventControl.TestingFramework\</workingDirectory>
<artifactDirectory>C:\Source\Wholesale\Comp.EventControl.TestingFramework\</artifactDirectory>
<prebuild>
<!-- clean nunit output to avoid CCNET reporting
about previous build tests if current build fails -->
<nant>
<executable>C:\Nant\bin\nant.exe
</executable>
<baseDirectory>C:\Source\Wholesale\Comp.EventControl.TestingFramework</baseDirectory>
<nologo>false</nologo>
<buildFile>nant.build</buildFile>
<targetList>
<target>cleanNunit</target>
</targetList>
</nant>
</prebuild>
<tasks>
<msbuild>
<executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
</executable>
<workingDirectory>C:\Source\Wholesale\Comp.EventControl.TestingFramework\CodeReboot
</workingDirectory>
<projectFile>CodeReboot.sln</projectFile >
<buildArgs>/noconsolelogger
/v:quiet
/noconlog
/p:Configuration=Debug
/p:ReferencePath="C:\Program Files\NUnit 2.5.8\bin;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"
/p:AdditionalReferencePath="C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"
</buildArgs>
<targets>ReBuild</targets >
<timeout>180</timeout >
<logger>c:\Program Files\CruiseControl.NET\server\Rodemeyer.MsBuildToCCNet.dll</logger>
</msbuild>
<exec>
<executable>C:\Program Files\NUnit 2.5.8\bin\net-2.0\nunit-console.exe
</executable >
<buildArgs>/xml:C:\Source\Wholesale\Comp.EventControl.TestingFramework\nunit-results.xml
/nologo C:\Source\Wholesale\Comp.EventControl.TestingFramework\CodeReboot\CodeReboot\bin\Debug\CodeReboot.dll
</buildArgs>
</exec>
</tasks>
<publishers>
<merge>
<files>
<file>C:\Source\Wholesale\Comp.EventControl.TestingFramework\nunit-results.xml
</file>
</files>
</merge>
<xmllogger />
<statistics />
<artifactcleanup cleanUpMethod="KeepLastXBuilds"
cleanUpValue="20" />
</publishers>
</project>
</cruisecontrol>
C:\Source\Wholesale\Comp.EventControl.TestingFramework\
C:\Source\Wholesale\Comp.EventControl.TestingFramework\
C:\Nant\bin\Nant.exe
C:\Source\Wholesale\Comp.EventControl.TestingFramework
假的
南特大厦
干净的
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
C:\Source\Wholesale\Comp.EventControl.TestingFramework\code重新启动
CodeReboot.sln
/noconsolelogger
/v:安静
/noconlog
/p:配置=调试
/p:ReferencePath=“C:\Program Files\NUnit 2.5.8\bin;C:\Program Files\Reference Assembly\Microsoft\Framework\.NETFramework\v4.0”
/p:AdditionalReferencePath=“C:\Program Files\Reference Assembly\Microsoft\Framework\.NETFramework\v4.0”
重建
180
c:\Program Files\CruiseControl.NET\server\Rodemeyer.MsBuildToCCNet.dll
C:\Program Files\NUnit 2.5.8\bin\net-2.0\NUnit-console.exe
/xml:C:\Source\Wholesale\Comp.EventControl.TestingFramework\nunit-results.xml
/nologo C:\Source\Wholesale\Comp.EventControl.TestingFramework\CodeReboot\CodeReboot\bin\Debug\CodeReboot.dll
C:\Source\Wholesale\Comp.EventControl.TestingFramework\nunit-results.xml
您应该做的第一件事是尝试在本地复制问题。您的测试是否正常运行并干净地退出?在本地运行它们,看看nunit进程是否挂起
如果您的测试在本地运行良好,请尝试找出生成服务器正在哪个测试上暂停,或者它是否正在完成所有测试。如果您的构建脚本不能在本地运行,那么诊断起来就有点困难
回到我们的测试充斥着线程代码的那一天,几乎总是有一个测试(或测试中的代码)在创建线程,然后未能关闭线程,导致NUnit挂起。线程问题令人恼火,因为它们是不确定的,只有在具有更多内核的机器上运行时(如..构建服务器)才可见
如果您有具有线程/外部依赖关系的测试,我会首先尝试禁用这些测试(600个测试需要一分钟才能运行,这一事实表明涉及到外部依赖关系和/或线程,因为单元测试通常需要~1ms才能运行) 您使用的是什么版本的nunit?2.5.7/2.5.8版本中存在一些问题,导致nunit代理在测试结束时挂起。我遇到了这个问题,回到了旧版本的nunit,挂起的问题消失了。在2.5.9的发行说明中,它们显示“602761 nunit代理在测试完成后挂起”已修复。我还没有升级到2.5.9,但这可能会解决您的问题。我在dos窗口中本地运行了它们。它们运行大约需要一分钟,失败的测试也会有一些例外(它们都是API测试),但它们的执行一直都很好。通过它们正在完成的脚本,日志文件就在那里,我可以查看它的内部,但进程会一直挂起,直到超时。与开发人员核实,据他们所知,没有多线程在进行。不过这是一个好主意,我们将尝试运行测试的子部分,看看它是否愉快地退出…哦,好发现!现在尝试2.5.9,如果失败,我可能会回到我以前使用过的2.4.7。将返回报告。+1000,2.5.9解决了问题,现在运行正常。现在我只需要整理发布服务器的合并文件部分。非常感谢!出于兴趣,您的构建服务器是否使用了与本地开发人员机器相同的nunit版本?在我的例子中,是的。问题可能是通过生成计算机上的CruiseControl.NET服务进程运行nunit,而不是从开发人员计算机上登录的交互式桌面运行nunit。您的某个测试是否打开了新的图形窗口?不,它们都是API命令行测试。