web-dev-qa-db-ja.com

MSTestを使用してコマンドラインからSpecFlowシナリオをどのように実行しますか?

Visual Studio 2010があり、2つのVSソリューションを使用しています。 1つ目はWebアプリケーションで、2つ目は厳密にSpecFlowテスト用です。 SpecFlow機能を実行するためだけにVisualStudioの2つのインスタンスを同時に実行すると、使用可能なすべてのRAMが消費され、処理速度が低下します。

GoogleとここStackOverflowで検索を行い、さらにMSTestコマンドラインツールでMSのドキュメントを熟読しましたが、答えが見つかりませんでした。完全なSpecFlowテストスイートは完了するのに最大45分かかり、実際に実行する必要があるのはいくつかのシナリオだけです。

MSTestを使用してコマンドラインから個々のSpecFlow機能、さらには個々のシナリオを実行する方法があるかどうか疑問に思っていましたか?

11
Greg Burghardt

舞台裏のスペックフローテストは、通常のmstestユニットテストです。したがって、次のようなものを使用して、同じ方法でそれらを実行できるはずです。

特定のシナリオを実行するには:

mstest /testcontainer:tests.dll /test:GivenMyScenarioWhenIDoSomeStuff

いくつかの特定のシナリオを実行するには、/ testフラグを複数回使用できます。

mstest /testcontainer:tests.dll /test:GivenMyScenarioWhenIDoSomeStuff /test:GivenMyScenarioWhenIDoSomemthingElse

機能を実行するには

mstest /testcontainer:tests.dll /test:MyFeatureName

たとえば、@ MyTagを使用してシナリオにタグを追加する場合は、オプションを使用することもできます。

/category:MyTag to filter down the scenarios to run.

機能ファイルの背後にある生成されたコードを見て、実際にどのように機能するかを理解してください。mstestに精通している場合は、非常に簡単です。

17
foobarcode

「Specrun.Specflow」という名前のnugetパッケージがダウンロードされます。また、app.configが変更され、unitTestProvider name = "SpecRun"が設定されるため、unitTestProvider name = "MSTest"または "NUnit"を削除できます。App.configの変更を保存すると、VisualStudioから機能ファイルを再生成するように求められます。 [はい]をクリックしてソリューションを作成します。表示されるのは、テストファイルが再生成されたことです。コマンドプロンプトでC:\ Users \\ Documents\Visual Studio 2015\Projects \に移動し、runtests.cmdと入力すると、すべての機能ファイルが直接トリガーされます。

3
UNG

SpecFlow 3.0がリリースされたので、.NETCoreでSpecFlowを使用できます。 .NET CoreのCLIツールはdotnetであり、MSTest(vstest)を使用すると、次のようにテストが実行されます。

dotnet test

テストが特定のプロジェクトにある場合は、次のようにプロジェクトを指定できます

dotnet test TestProject

ここで、TestProjectはプロジェクトの名前です。必要に応じてプロジェクト名をスキップできますが、名前を指定すると、dotnetはそのプロジェクトのみで表示されます。プロジェクト内のすべてのテストを一覧表示するには、-tフラグを使用できます。

dotnet test TestProject -t

特定のテストのみを実行するには、--filterフラグを使用できます。

dotnet test TestProject --filter ShouldBeSuccess_1

ここで、ShouldBeSuccess_1はテストの名前です。 --filterの後の引数は式であり、テストの名前である必要はありませんShouldBeSuccess_12というテストがある場合は、それも実行されます。 --filterここ のルールを確認できます。

特定のカテゴリでのみテストを実行するには、TestCategoryを使用できます。

dotnet test TestProject --filter TestCategory=ci

ここで、ciはカテゴリ名です。カテゴリにテストを追加するには、 tags を使用します。

結果ファイルを作成するには、--loggerフラグを使用する必要があります。

dotnet test TestProject --logger trx

ここでは、trx結果ファイルを作成するために使用されます。

3
Mika Sundland

MSTest v2では、mstestを使用できません。代わりにvstest.console.exeを使用できます。

例:

vstest.console.exe「Automation.SpecFlow\bin\Release\Automation.SpecFlow.dll」

https://docs.Microsoft.com/en-us/visualstudio/test/vstest-console-options?view=vs-2019

すべてのシナリオを単一の機能ファイルで実行する場合は、/traitフラグを追加します。

vstest.console.exe "Automation.SpecFlow\bin\Release\Automation.SpecFlow.dll"/trait: "My Feature"

そして、これは次で始まる機能ファイルのすべてのシナリオを実行します。

Feature: My Feature
    In order to ...
    As a ...
    I want to ...

Scenario: 1
    ...

Scenario: 2
    ...
1
alansiqueira27

タグ手法を試しましたが、機能しませんでした。古いバージョンのSpecFlowを使用しています。そこで、機能ファイルに関連する。feature.csファイルに移動し、TestMethodAttribute()を検索しました。

[Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]

次のように、これにTestCategory属性を追加しました。

[Microsoft.VisualStudio.TestTools.UnitTesting.TestCategory("MyCat")]

ビルドしてコンパイルすると、コマンドは魅力のように機能しました

/Category:MyCat 

誰かが答えを見つけてくれることを願っています。

0
Naeem A. Malik