2011-01-06 39 views
3

我使用南特清理以前的日志有一个CruiseControl.Net设置,然后将其揭开序幕VS项目的MSBuild的,最后运行NUnit控制台执行测试。CruiseControl.Net和NUnit - 测试完成,但任务不?

它似乎建立了几秒钟(罚款),然后跳上在运行600周的测试,大约需要一分钟。但是,即使日志文件存在,它也会在10分钟内“没有”,此时内置的超时和进程将退出。 CruiseControl.NET网页然后显示失败的结果,但有一个例外:

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> 
+0

您的测试之一是否打开一个新的图形窗口? – 2011-01-07 13:07:20

+0

不行,它们都是API命令行测试。 – 2011-01-07 15:24:01

回答

4

? 2.5.7/2.5.8版本中存在一些问题,导致nunit代理在测试结束时挂起。我有这个问题,并恢复到旧版本的nunit和挂起问题消失。在2.5.9的发行说明中,他们显示“602761 nunit-agent在测试完成后挂起”已得到修复。我还没有升级到2.5.9,但这可能会解决您的问题。

1

你应该做的第一件事就是尝试在本地复制问题。你的测试是否正常运行并干净地退出?在本地运行它们,看看nunit进程是否挂起。

如果你的测试在本地运行正常,试着找出哪些测试构建服务器拖延或它是否完成所有的测试。如果您的构建脚本不能在本地运行,则诊断有点困难。当我们的测试充斥着线程代码的时候,测试(或者测试中的代码)几乎总是在创建线程,然后无法关闭线程,导致NUnit停滞不前。线程问题令人恼火,因为它们是非确定性的,只有在具有更多内核的机器上运行时才可见(如构建服务器)。

如果你有测试线程/外部依赖关系,我会尝试先禁用它们(600个测试需要一分钟运行的事实表明涉及外部依赖和/或线程,因为单元测试通常需要〜 1ms运行)。

您正在使用什么版本的NUnit
+0

我在dos窗口中本地运行它们。他们需要一分钟左右的时间来运行,对于失败的测试有一些例外(他们都是API测试),但是他们确实执行得很好。 – 2011-01-07 15:22:21