0

そのため、teamcity を介して .net プロジェクトの NUnit テストを実行するためのより良い方法があるに違いないと考えていました。現在、プロジェクトのビルドには約 10 分かかり、テスト ステップには 30 分ほどかかります。

Nunit テストを 3 つのグループに分割し、それぞれを別のエージェントに割り当てることを考えていました。そして、開始する前に、最初のビルドにビルドの依存関係があることを確認してください。

これは私が考えた最善の方法でした。別の方法も検討すべきですか?
余談ですが、最後にすべての Nunit テストを組み合わせて、3 つの異なるマシンでビルドされているテストから 1 つのレポートを取得することは可能ですか? 誰かが巧妙なハックを考えない限り、これは可能だとは思いません。

4

3 に答える 3

2

NUnit ユーザーはParallelizable、さまざまな場所で属性を使用して、NUnit でテストを並行して実行できるようになりました。

例:

[Parallelizable(ParallelScope.All)]
[TestFixture]
public class LengthOfStayRestServiceAsyncTests
{
    [Test]
    public void Test1()
    {
        Assert.That(true, Is.True);
    }
}

または、さらに良いことに、これをテスト プロジェクトのProperties\AssemblyInfo.csファイルに貼り付けます。

[assembly: Parallelizable(ParallelScope.Fixtures)]

ソース:
https://github.com/nunit/docs/wiki/Parallelizable-Attribute
https://templecoding.com/blog/2016/02/29/running-tests-in-parallel-with-nunit3

于 2019-09-13T14:30:57.177 に答える
1

再帰的な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>

実際に最初にテストdllをビルドするには、明らかにコンパイルターゲット(またはこの場合はCompileAndPackage)が必要です。

これもローカル開発者のNUnitの結果を台無しにしますが、すでにその問題にぶつかっているので、それを支援するツールを作成しました:https ://github.com/15below/NUnitMerger

于 2012-07-31T15:38:45.343 に答える
1

Nunit テストの並列実行については、 http://www.nunit.org/index.php?p=pnunit&r=2.5 で PnUnit を参照してください。Nunitに Log4Net を使用するように構成できるレポートについては、こちらの例を参照してください: http://www .softwarefrontier.com/2007/09/using-log4net-with-nunit.html

于 2012-07-02T23:13:45.917 に答える