簡體   English   中英

以多線程方式運行nUnit測試

[英]Running nUnit tests in a multithreaded fashion

是否有可能以多線程方式運行nunit測試? 有沒有跑步者可以提供這個?

在有人跳過“單元測試”概念之前,讓我解釋一下:這些不是我們使用nunit進行功能/集成測試的單元測試 ,其中一些測試非常慢,有很多等待狀態。 因此,多線程可以大量幫助他們。

我知道作為最后的手段,我可​​以在測試中推出自己的多線程,但這會引入不必要的開銷。

試試Pnunit

但是當然我們也必須得到TeamCity的支持;-)

據稱NUnit3將支持多線程。

這里是對PNUint http://www.codicesoftware.com/opdownloads2/oppnunit.aspx的引用。 我們使用它作為環境的一部分來加載測試具有廣泛的ajax功能的Web應用程序

我不敢相信MSTest沒有列出。 Visual Studio一直支持多個並發測試。

我們設置了一個遞歸的MSBuild腳本來同時運行單元測試dll,它看起來像這樣:

  <Target Name="UnitTestDll">
    <Message Text="Testing $(NUnitFile)" />
    <ItemGroup>
      <ThisDll Include="$(NUnitFile)"/>
    </ItemGroup>
    <NUnit ToolPath="$(NUnitFolder)" Assemblies="@(ThisDll)" OutputXmlFile="$(TestResultsDir)\%(ThisDll.FileName)-test-results.xml" ExcludeCategory="Integration,IntegrationTest,IntegrationsTest,IntegrationTests,IntegrationsTests,Integration Test,Integration Tests,Integrations Tests,Approval Tests" ContinueOnError="true" />
  </Target>

  <Target Name="UnitTest" DependsOnTargets="Clean;CompileAndPackage">
      <Message Text="Run all tests in Solution $(SolutionFileName)" />
      <CreateItem Include="$(SolutionFolder)**\bin\$(configuration)\**\*.Tests.dll" Exclude="$(SolutionFolder)\NuGet**;$(SolutionFolder)**\obj\**\*.Tests.dll;$(SolutionFolder)**\pnunit.tests.dll">
        <Output TaskParameter="Include" ItemName="NUnitFiles" />
      </CreateItem>
    <ItemGroup>
      <TempProjects Include="$(MSBuildProjectFile)">
        <Properties>NUnitFile=%(NUnitFiles.Identity)</Properties>
      </TempProjects>
    </ItemGroup>
    <RemoveDir Directories="$(TestResultsDir)" Condition = "Exists('$(TestResultsDir)')"/>
    <MakeDir Directories="$(TestResultsDir)"/>

    <MSBuild Projects="@(TempProjects)" BuildInParallel="true" Targets="UnitTestDll" />
  </Target>

你顯然仍然需要你的編譯目標(或者在我們的例子中是CompileAndPackage)來實際構建測試dll。

這也為大多數報告工具弄亂了你的NUnit結果,但是我們已經編寫了一個工具來解決這個問題: https//github.com/15below/NUnitMerger

您可能希望查看Overshore多線程測試框架,該框架具有ThreadManager類,您可以始終稍微擴展以添加“失敗”測試的概念。

http://weblogs.asp.net/rosherove/archive/2007/06/22/multi-threaded-unit-tests-with-osherove-threadtester.aspx

如果您只使用斷言,則可以計算異常。

祝好運

ps:為什么不運行幾個nant / nunit-runner進程?

我正在使用MultithreadedTC Java庫的.NET端口。 我的端口稱為Ticking Test ,源代碼在GitHub上發布。

TickingTest最初並不打算做你正在嘗試的事情,但它可能會奏效。 它允許您使用標記有TestThread屬性的多個方法編寫測試類。 每個線程可以等待某個滴答計數到達,或者斷言它認為當前滴答計數應該是什么。 當所有當前線程被阻塞時,協調器線程會提前滴答計數並喚醒正在等待下一個滴答計數的所有線程。 如果您有興趣,請查看MultithreadedTC概述以獲取示例。 MultithreadedTC是由編寫FindBugs的一些人編寫的。

我在一個小項目中成功使用了我的端口。 缺少的主要功能是我無法在測試期間跟蹤新創建的線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM