8

互いに関係のない SpecFlow を使用したテストを実装しています。並列テストの実行を可能にする SpecFlow の構成オプションはありますか? ドキュメントで主張されているように、「最大5つの並列単体テスト」の実行をサポートするVS10およびMSTestランナーを使用しています。

ありがとう、max.yz

4

4 に答える 4

2

SpecFlowのメーカーによって最近リリースされたSpecRunと呼ばれる新しいツールがあります。SpecRunを使用すると、これらのテストを並行して実行できます。SpecRun.Nunitパッケージを一緒に使用すると、NUnitテストを並行して実行できます。CIサーバーでSpecRunを使用してテストを並行して実行しますが、開発者は選択したテストランナーを使用します。

テストフレームワークを変更すると、混乱を招く可能性があります。すべてのテストは開始時にNUnitで行われたため、新しいSpecRunランナーを追加するだけで、他に何も変更されませんでした。非常にシンプルで、開発者にとって透過的です。また、NuGetで利用できるため、インストールは非常に簡単でした。

于 2012-10-08T18:40:23.657 に答える
2

これを実現するために、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 つのフィクスチャからのテストは、同時に実行されているテストを中断するデータベース行を追加または変更します。これを回避する方法はありますが、それはおそらく元の質問の範囲外です。

アレックス。

于 2011-05-24T10:01:49.260 に答える
0

MSTest .testsettings ファイルには、テスト プロジェクト用のオプションがあります。デフォルトでは、テスト ランナーは一度に 1 つのテストのみを実行します。ExecuteノードのparallelTestCount属性を 0 に変更することで、利用可能な限り多くのスレッドで実行されます (何らかの理由で最大 5 に制限されています)。

.teststings ファイルを右クリックして [open with] を選択します。XML エディターを選択して、すぐに始められます。

コード化された UI テストを実行したり、これが機能するようにデータ コレクターを構成したりしないでください。

詳細な説明については、この記事を参照してください

于 2012-01-25T18:40:32.697 に答える