CruiseControl.Net и NUnit - тесты завершены, а задача - нет? - PullRequest
3 голосов
/ 06 января 2011

У меня есть настройка CruiseControl.Net с использованием Nant для очистки предыдущих журналов, а затем он запускает сборку ms проекта VS и, наконец, запускает nunit-console для выполнения тестов.

Кажется, что он собирается в течение нескольких секунд (нормально), а затем переходит к выполнению 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>

Ответы [ 2 ]

4 голосов
/ 07 января 2011

Какую версию nunit вы используете? В версии 2.5.7 / 2.5.8 возникли проблемы, из-за которых nunit-agent зависал в конце теста. У меня возникла эта проблема, и я вернулся к старой версии nunit, и проблема с зависанием ушла. В примечаниях к выпуску 2.5.9 они показывают, что «602761 nunit-agent зависает после завершения испытаний» было исправлено. Я еще не обновился до 2.5.9, но это может решить вашу проблему.

1 голос
/ 07 января 2011

Первое, что вы должны сделать, попытаться повторить проблему локально. Ваши тесты работают правильно и выходят чисто? Запустите их локально и посмотрите, не зависает ли процесс nunit.

Если ваши тесты работают нормально локально, попробуйте выяснить, на каком тесте останавливается сервер сборки или он завершает все тесты. Если ваши сценарии сборки не могут быть запущены локально, диагностировать немного сложнее.

В те времена, когда наши тесты были пронизаны многопоточным кодом, почти всегда был случай, когда тест (или тестируемый код) создавал потоки, а затем не мог их закрыть, в результате чего NUnit зависал. Проблемы с многопоточностью вызывают раздражение, поскольку они не являются детерминированными и могут быть видны только при запуске на компьютерах с большим количеством ядер (например, на серверах сборки).

Если у вас есть тесты с многопоточностью / внешними зависимостями, я бы сначала попытался их отключить (тот факт, что 600 тестов занимает минуту, указывает, что внешние зависимости и / или многопоточность задействованы, поскольку модульный тест обычно занимает ~ 1мс бежать).

...