如何使用MSTest从命令行运行SpecFlow方案?

Gre*_*rdt 11 c# bdd mstest specflow

我有Visual Studio 2010,我们有两个VS解决方案.第一个是Web应用程序,第二个是SpecFlow测试.让两个Visual Studio实例同时运行只是为了运行SpecFlow功能正在吃掉所有可用的RAM,导致速度变慢.

我已经在Google上和StackOverflow上进行了一些搜索,并在MSTest命令行工具上仔细阅读了MS文档,但我还没有找到答案.完整的SpecFlow测试套件需要大约45分钟才能完成,我真的只需要运行几个场景.

我想知道是否有办法使用MSTest从命令行运行单独的SpecFlow功能,甚至是个别方案?

foo*_*ode 14

在场景后面,specflow测试只是常规的mstest单元测试.因此,您应该能够以相同的方式运行它们,例如:

要运行特定方案:

mstest /testcontainer:tests.dll /test:GivenMyScenarioWhenIDoSomeStuff
Run Code Online (Sandbox Code Playgroud)

要运行多个特定方案,您可以多次使用/ test标志:

mstest /testcontainer:tests.dll /test:GivenMyScenarioWhenIDoSomeStuff /test:GivenMyScenarioWhenIDoSomemthingElse
Run Code Online (Sandbox Code Playgroud)

运行功能

mstest /testcontainer:tests.dll /test:MyFeatureName
Run Code Online (Sandbox Code Playgroud)

例如,如果使用@MyTag在场景中添加标签,则还可以使用该选项

/category:MyTag to filter down the scenarios to run.
Run Code Online (Sandbox Code Playgroud)

请查看功能文件背后生成的代码,以了解事情的实际工作方式,如果您熟悉mstest,它应该非常简单.

  • 使用Vstest.console.exe而不是mstest.Vstest.console.exe将自动加载您的所有nuget包以及其他库.例如Vstest.console.exe mytests.dll (4认同)

Mik*_*kaS 8

现在 SpecFlow 3.0 已经发布,我们可以将 SpecFlow 与 .NET Core 一起使用。.NET Core 的 CLI 工具是dotnet,如果您使用 MSTest (vstest),测试的运行方式如下:

dotnet test
Run Code Online (Sandbox Code Playgroud)

如果测试在特定项目中,您可以像这样指定项目

dotnet test TestProject
Run Code Online (Sandbox Code Playgroud)

其中TestProject是项目的名称。如果需要,您可以跳过项目名称,但指定它将使 dotnet 仅在该项目中查找。要列出项目中的所有测试,您可以使用该-t标志:

dotnet test TestProject -t
Run Code Online (Sandbox Code Playgroud)

要仅运行特定测试,您可以使用该--filter标志:

dotnet test TestProject --filter ShouldBeSuccess_1
Run Code Online (Sandbox Code Playgroud)

其中ShouldBeSuccess_1 是测试的名称。后面的参数--filter是一个表达式,不一定是测试的名称。如果您有一个名为ShouldBeSuccess_12的测试,它也会运行。--filter 您可以在这里查看规则。

要仅运行特定类别中的测试,您可以使用TestCategory

dotnet test TestProject --filter TestCategory=ci
Run Code Online (Sandbox Code Playgroud)

其中ci是类别名称。要将测试添加到类别,请使用标签

要创建结果文件,您必须使用该--logger标志:

dotnet test TestProject --logger trx
Run Code Online (Sandbox Code Playgroud)

这里它用于创建 trx 结果文件。