Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过cmd运行多个specflow项目?_C#_.net_Command Line Interface_Specflow_Specrun - Fatal编程技术网

C# 如何通过cmd运行多个specflow项目?

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的建议,我

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

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

我计划通过创建一个批处理文件来自动化,通过cmd运行所有项目,而无需在VS2019中运行TestExplorer并手动运行它们

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

编辑1:

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

  • 我转到了vstest.console.exe所在的路径(C:\Program Files(x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Extensions\TestPlatform)
  • 从该路径打开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

    使用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:我用有关按功能和场景运行的信息更新了我的问题。