0

我有许多 .Net Framework 类库项目,都安装了 specflow 和 specrun.specflow nuget 包。

我可以在 Visual Studio 2019 的测试资源管理器中运行所有这些项目,但我想知道这是否可以使用 cmd 提示符运行。

我计划通过创建一个批处理文件来实现自动化,以通过 cmd 运行所有项目,而无需在 VS 2019 中使用测试资源管理器并手动运行它们

有人知道这是否可以实现吗?如果可能,您能否分享运行它们所需的命令?

编辑1:

根据 Greg Burghardt 的建议,我做了以下

  1. 我去了 vstest.console.exe 所在的路径(C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Extensions\TestPlatform)
  2. 从该路径打开 cmd 并运行 cmd vstest.console.exe mytests.dll 起初我收到一个错误,说找不到上面的 dll,所以我将 dll 粘贴到相同的位置,然后再次执行相同的命令,我收到以下消息

C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Extensions\TestPlatform\mytests.dll 中没有可用的测试。确保测试发现者和执行者已注册并且平台和框架版本设置正确,然后重试。

此外,可以使用 /TestAdapterPath 命令指定测试适配器的路径。示例 /TestAdapterPath:。

编辑2:

我没有复制 dll 并将其粘贴到 vstest.console.exe 路径位置,而是直接提供了 dll 所在的路径并运行了 dll 中存在的所有测试,因此 cmd 看起来像

vstest.console.exe D:\Specflow\Dummy\bin\Debug\mytests.dll

4

1 回答 1

1

使用vstest.console.exeVisual Studio 附带的命令行实用程序。此可执行文件深埋在 Visual Studio 安装目录中。您可以通过在 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

上面的场景有一个与之关联的标签:SmokeTest。您可以使用以下命令运行此场景以及任何其他标有“SmokeTest”的场景:

path\to\vstest.console.exe path\to\tests.dll /TestCaseFilter:"TestCategory=SmokeTest"

按功能运行 SpecFlow 测试

每个特性都被提交到一个测试类。功能标题(不是文件名。功能文件中“功能:...”之后的文本。)转换为 C# 类名。非字母数字字符转换为“_”字符。然后将“功能”一词附加到它。

使用此示例功能:

Feature: Application Security
    In order to ...
    As a ...
    I want to ...

功能标题是Application Security,所以测试类被命名为ApplicationSecurityFeature。现在您可以按全名运行整个功能文件:

vstest.console.exe tests.dll /TestCaseFilter:"FullyQualifiedName~ApplicationSecurityFeature"

按场景运行 SpecFlow 测试

这只是按功能运行它们的一种变体。功能文件中的每个场景都成为一种测试方法。场景的标题将转换为 C# 类名,将所有非字母数字字符替换为“_”。

鉴于此功能和场景:

Feature: Application Security
    In order to ...
    As a ...
    I want to ...

Scenario: Logging in
    ...

类名为“ApplicationSecurityFeature”,测试方法名为LoggingIn。同样,以完全限定名称运行:

vstest.console.exe tests.dll /TestCaseFilter:"FullyQualifiedName~ApplicationSecurityFeature.LoggingIn"

有关 vstest 命令行选项的更多信息,请访问 Microsoft.com:VSTest.Console.exe命令行选项

于 2020-10-09T16:42:23.750 回答