C# 如何通过cmd运行多个specflow项目?
我有许多.Net Framework类库项目,都安装了specflow和specrun.specflow nuget软件包 我能够在VisualStudio2019的测试资源管理器中运行所有这些项目,但我想知道是否可以使用cmd提示符运行这些项目 我计划通过创建一个批处理文件来自动化,通过cmd运行所有项目,而无需在VS2019中运行TestExplorer并手动运行它们 有人知道这是否可以实现吗?如果可能的话,您可以分享运行它们所需的命令吗 编辑1: 根据Greg Burghardt的建议,我做了以下工作C# 如何通过cmd运行多个specflow项目?,c#,.net,command-line-interface,specflow,specrun,C#,.net,Command Line Interface,Specflow,Specrun,我有许多.Net Framework类库项目,都安装了specflow和specrun.specflow nuget软件包 我能够在VisualStudio2019的测试资源管理器中运行所有这些项目,但我想知道是否可以使用cmd提示符运行这些项目 我计划通过创建一个批处理文件来自动化,通过cmd运行所有项目,而无需在VS2019中运行TestExplorer并手动运行它们 有人知道这是否可以实现吗?如果可能的话,您可以分享运行它们所需的命令吗 编辑1: 根据Greg Burghardt的建议,我
vstest.console.exe mytests.dll
起初,我得到一个错误,说上面的dll没有找到,所以我把dll粘贴到同一个位置,再次执行同一个命令时,我得到下面的消息vstest.console.exe D:\Specflow\Dummy\bin\Debug\mytests.dll
使用Visual Studio附带的vstest.console.exe
命令行实用程序。此可执行文件被深埋在VisualStudio安装目录中。通过在Windows文件资源管理器中搜索Visual Studio安装文件夹中的“vstest.console.exe”,可以找到计算机上的确切路径
基本命令行参数包括:
path\to\vstest.console.exe path\to\tests.dll
它运行通过生成测试项目生成的DLL文件中的所有测试。有无数的过滤选项
按标记运行SpecFlow测试
通过SpecFlow标签从命令行运行测试很容易。每个标记都成为一个[TestCategory]
属性,因此只需使用TestCategory过滤器:
path\to\vstest.console.exe path\to\tests.dll /TestCaseFilter:"TestCategory=SpecFlowTagName"
例如,假设您有以下场景:
Feature: Application Security
In order to ...
As a ...
I want to ...
@SmokeTest
Scenario: Logging in
Given "tester" is a registered user
When the user logs in as "tester"
Then the user should see their dashboard
Feature: Application Security
In order to ...
As a ...
I want to ...
Scenario: Logging in
...
上面的场景有一个与之关联的标签:SmokeTest。您可以使用以下命令运行此场景以及标记为“SmokeTest”的任何其他场景:
path\to\vstest.console.exe path\to\tests.dll /TestCaseFilter:"TestCategory=SmokeTest"
按功能运行SpecFlow测试
每个特性都被交给一个测试类。要素标题(而不是文件名。要素文件中“要素:…”后面的文本)将转换为C#类名称。非字母数字字符将转换为“u”字符。然后,将“特征”一词添加到其后面
使用此示例功能:
Feature: Application Security
In order to ...
As a ...
I want to ...
功能标题为应用程序安全性,因此测试类命名为应用程序安全功能。现在,您可以按全名运行整个功能文件:
vstest.console.exe tests.dll /TestCaseFilter:"FullyQualifiedName~ApplicationSecurityFeature"
按场景运行SpecFlow测试
这只是按功能运行它们的一个变体。功能文件中的每个场景都成为测试方法。场景的标题转换为C#类名,将所有非字母数字字符替换为“#”
鉴于此功能和场景:
Feature: Application Security
In order to ...
As a ...
I want to ...
@SmokeTest
Scenario: Logging in
Given "tester" is a registered user
When the user logs in as "tester"
Then the user should see their dashboard
Feature: Application Security
In order to ...
As a ...
I want to ...
Scenario: Logging in
...
类名为“ApplicationSecurityFeature”,测试方法名为Logginging。同样,按完全限定名称运行:
vstest.console.exe tests.dll /TestCaseFilter:"FullyQualifiedName~ApplicationSecurityFeature.LoggingIn"
有关vstest命令行选项的更多信息,请访问Microsoft.com:谢谢@Greg Burghardt,因此我遵照您的建议,并在问题的编辑部分简要介绍了我执行的操作。如果我遗漏了什么,请检查并告诉我。感谢您的帮助在您提到的示例中,标记被用作过滤器,可以通过以下cmd path\to\vstest.console.exe path\to\tests.dll/TestCaseFilter执行:“TestCategory=SmokeTest”知道如何根据功能或场景进行过滤吗?path\to\vstest.console.exe path\to\tests.dll/TestCaseFilter:“TestCategory=SpecFlowFeatureName”似乎不正确work@mithun:查看从.feature文件解析的.feature.cs文件。这是一个测试类。您可以通过查看源代码来确定如何过滤测试founhttps://stackoverflow.com/questions/64282635/how-to-run-multiple-specflow-projects-through-cmd/64284114#comment113699310_64284114d 这些(FullyQualifiedName、Name、ClassName、Priority、TestCategory)。尝试将它们全部用作筛选器,但似乎都不适用于功能或功能scenario@mithun:我用有关按功能和场景运行的信息更新了我的问题。