Visual Studio 2010があり、2つのVSソリューションを使用しています。 1つ目はWebアプリケーションで、2つ目は厳密にSpecFlowテスト用です。 SpecFlow機能を実行するためだけにVisualStudioの2つのインスタンスを同時に実行すると、使用可能なすべてのRAMが消費され、処理速度が低下します。
GoogleとここStackOverflowで検索を行い、さらにMSTestコマンドラインツールでMSのドキュメントを熟読しましたが、答えが見つかりませんでした。完全なSpecFlowテストスイートは完了するのに最大45分かかり、実際に実行する必要があるのはいくつかのシナリオだけです。
MSTestを使用してコマンドラインから個々のSpecFlow機能、さらには個々のシナリオを実行する方法があるかどうか疑問に思っていましたか?
舞台裏のスペックフローテストは、通常の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に精通している場合は、非常に簡単です。
「Specrun.Specflow」という名前のnugetパッケージがダウンロードされます。また、app.configが変更され、unitTestProvider name = "SpecRun"が設定されるため、unitTestProvider name = "MSTest"または "NUnit"を削除できます。App.configの変更を保存すると、VisualStudioから機能ファイルを再生成するように求められます。 [はい]をクリックしてソリューションを作成します。表示されるのは、テストファイルが再生成されたことです。コマンドプロンプトでC:\ Users \\ Documents\Visual Studio 2015\Projects \に移動し、runtests.cmdと入力すると、すべての機能ファイルが直接トリガーされます。
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結果ファイルを作成するために使用されます。
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
...
タグ手法を試しましたが、機能しませんでした。古いバージョンのSpecFlowを使用しています。そこで、機能ファイルに関連する。feature.csファイルに移動し、TestMethodAttribute()を検索しました。
[Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
次のように、これにTestCategory属性を追加しました。
[Microsoft.VisualStudio.TestTools.UnitTesting.TestCategory("MyCat")]
ビルドしてコンパイルすると、コマンドは魅力のように機能しました
/Category:MyCat
誰かが答えを見つけてくれることを願っています。