互いに関係のない SpecFlow を使用したテストを実装しています。並列テストの実行を可能にする SpecFlow の構成オプションはありますか? ドキュメントで主張されているように、「最大5つの並列単体テスト」の実行をサポートするVS10およびMSTestランナーを使用しています。
ありがとう、max.yz
互いに関係のない SpecFlow を使用したテストを実装しています。並列テストの実行を可能にする SpecFlow の構成オプションはありますか? ドキュメントで主張されているように、「最大5つの並列単体テスト」の実行をサポートするVS10およびMSTestランナーを使用しています。
ありがとう、max.yz
SpecFlowのメーカーによって最近リリースされたSpecRunと呼ばれる新しいツールがあります。SpecRunを使用すると、これらのテストを並行して実行できます。SpecRun.Nunitパッケージを一緒に使用すると、NUnitテストを並行して実行できます。CIサーバーでSpecRunを使用してテストを並行して実行しますが、開発者は選択したテストランナーを使用します。
テストフレームワークを変更すると、混乱を招く可能性があります。すべてのテストは開始時にNUnitで行われたため、新しいSpecRunランナーを追加するだけで、他に何も変更されませんでした。非常にシンプルで、開発者にとって透過的です。また、NuGetで利用できるため、インストールは非常に簡単でした。
これを実現するために、MSTest から MbUnit に移行しました。ParallelizableAttribute を使用して、MbUnit でテスト フィクスチャ レベルで並列処理を実現できます。ただし、テスト フィクスチャは .feature Gherkin ファイルから生成されるため、SpecFlow ソース コードを取得し、TechTalk.SpecFlow.Generator プロジェクトの MbUnitTestGeneratorProvider クラスを変更して、ParallelizableAttribute を出力する必要がありました。したがって、次のような結果になります。
public class MbUnitTestGeneratorProvider : IUnitTestGeneratorProvider
{
private const string TESTFIXTURE_ATTR = "MbUnit.Framework.TestFixtureAttribute";
private const string PARALLELIZABLE_ATTR = "MbUnit.Framework.ParallelizableAttribute";
private const string TEST_ATTR = "MbUnit.Framework.TestAttribute";
private const string ROWTEST_ATTR = "MbUnit.Framework.RowTestAttribute";
private const string ROW_ATTR = "MbUnit.Framework.RowAttribute";
private const string CATEGORY_ATTR = "MbUnit.Framework.CategoryAttribute";
private const string TESTSETUP_ATTR = "MbUnit.Framework.SetUpAttribute";
private const string TESTFIXTURESETUP_ATTR = "MbUnit.Framework.FixtureSetUpAttribute";
private const string TESTFIXTURETEARDOWN_ATTR = "MbUnit.Framework.FixtureTearDownAttribute";
private const string TESTTEARDOWN_ATTR = "MbUnit.Framework.TearDownAttribute";
private const string IGNORE_ATTR = "MbUnit.Framework.IgnoreAttribute";
private const string DESCRIPTION_ATTR = "MbUnit.Framework.DescriptionAttribute";
public bool SupportsRowTests { get { return true; } }
public void SetTestFixture(CodeTypeDeclaration typeDeclaration, string title, string description)
{
typeDeclaration.CustomAttributes.Add(
new CodeAttributeDeclaration(
new CodeTypeReference(TESTFIXTURE_ATTR)));
typeDeclaration.CustomAttributes.Add(
new CodeAttributeDeclaration(
new CodeTypeReference(PARALLELIZABLE_ATTR)));
SetDescription(typeDeclaration.CustomAttributes, title);
}
これをコンパイルして使用すると、並列化可能なテスト フィクスチャが作成されます。
[System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "1.6.1.0")]
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[MbUnit.Framework.TestFixtureAttribute()]
[MbUnit.Framework.ParallelizableAttribute()]
[MbUnit.Framework.DescriptionAttribute("Test")]
public partial class TestFeature
{
現状の唯一の問題は、テスト フィクスチャが互いに競合しないようにする必要があることです。つまり、1 つのフィクスチャからのテストは、同時に実行されているテストを中断するデータベース行を追加または変更します。これを回避する方法はありますが、それはおそらく元の質問の範囲外です。
アレックス。
MSTest .testsettings ファイルには、テスト プロジェクト用のオプションがあります。デフォルトでは、テスト ランナーは一度に 1 つのテストのみを実行します。ExecuteノードのparallelTestCount属性を 0 に変更することで、利用可能な限り多くのスレッドで実行されます (何らかの理由で最大 5 に制限されています)。
.teststings ファイルを右クリックして [open with] を選択します。XML エディターを選択して、すぐに始められます。
コード化された UI テストを実行したり、これが機能するようにデータ コレクターを構成したりしないでください。
詳細な説明については、この記事を参照してください