BDD - Specflow BDD 执行测试,生成测试报告 VSTest 篇
- 引言
- VSTest.Console.exe 命令
- 启动
- 命令选项
- VSTest.Console.exe 执行测试
- NUnit 项目
- MSTest 项目
- Xunit 项目
- SpecRun 项目
- Specflow 生成测试报告
- specflow.exe 命令
- 生成 NUnit 项目测试报告
- 生成 MSTest 项目测试报告
- 生成 Xunit 项目测试报告
- 生成 SpecRun 项目测试报告
引言
前面有介绍 Specflow 基于不同 Unit Test Provider (Xunit,MSTest,NUnit,SpecRun) 的实践系列:
BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun
BDD - SpecFlow BDD 测试实践 SpecFlow + Xunit
BDD - SpecFlow BDD 测试实践 SpecFlow 模板
BDD - SpecFlow BDD 测试实践 SpecFlow + MSTest
BDD - SpecFlow BDD 测试实践 SpecFlow + NUnit
上述实践,我们都是通过 Test Explore 界面来执行测试的,其中 BDD - SpecFlow BDD 测试实践 SpecFlow 模板 用到 SpecFlow+ LivingDoc 生成测试报告,BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun 运行后会自动生成测试报告,剩下 NUnit/MSTest/Xunit 运行测试时不会自动生成测试报告。
参考 Specflow Reporting 主要基于两种 Unit Test Provider,NUnit 和 MSTest。上文 BDD - Specflow BDD 执行测试,生成测试报告 NUnit 篇 只适用于 NUnit test,今天介绍另外一种 VSTest。
VSTest.Console.exe 命令
VSTest.Console.exe 是用于运行测试的命令行工具。
启动
-
VSTest.Console.exe 命令提示所在路径:
C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\IDE\CommonExtensions\Microsoft\TestWindow
-
可通过 VS 启动:
-
可通过 windows 开始菜单启动:
命令选项
运行 VSTest.Console/? 可以查阅所有选项以及对应的简短说明。
常规命令行选项:
选项 | 描述 |
---|---|
[测试文件] | 从指定文件运行测试。 用空格分隔多个测试文件名。示例:mytestproject.dll、mytestproject.dll myothertestproject.exe |
/Settings:[文件名] | 使用其他设置(如数据收集器)运行测试。 有关详细信息,请参阅使用 .runsettings 文件配置单元测试, 示例:/Settings:local.runsettings |
/Tests:[测试名] | 运行其名称包含提供的值的测试。 若要提供多个值,请使用逗号将这些值分隔。示例:/Tests:TestMethod1,testMethod2, /Tests 命令行选项不能与 /TestCaseFilter 命令行选项一起使用 。 |
/Parallel | 指定并行执行的测试。 默认情况下,最多可使用计算机上的所有可用内核。 可在设置文件中配置要使用的内核数。 |
/Enablecodecoverage | 在测试运行中启用数据诊断适配器 CodeCoverage。如果未使用设置文件指定设置,则将使用默认设置。 |
/InIsolation | 在隔离的进程中运行测试。这种隔离使 vstest.console.exe 进程不太可能在测试出错时停止,但测试的运行速度可能较慢。 |
/UseVsixExtensions | 此选项使 vstest.console.exe 进程使用或跳过在测试运行中安装的 VSIX 扩展(如果有)。此选项已弃用。 从 Visual Studio 的下一个主版本开始,此选项可能会删除。 转为作为 NuGet 包提供的使用扩展。示例:/UseVsixExtensions:true |
/TestAdapterPath:[路径] | 强制 vstest.console.exe 进程使用测试运行中指定路径(如果有)内的自定义测试适配器。示例:/TestAdapterPath:[pathToCustomAdapters] |
/Platform:[平台类型] | 强制使用给定的平台,而不是根据当前运行时确定的平台。 在 Windows 上,此选项强制只能使用 x86 和 x64 平台。 ARM 选项会中断,并将导致大多数系统上使用 x64。若要在有效值(例如 ARM64)的列表中未列出的运行时上运行,请勿指定此选项。有效值为 x86、x64 和 ARM。 |
/FailWhenNoTestsFound:[boolean] | 设置为 true 时,如果未发现任何测试,则返回非零值。 |
/Framework: [Framework 版本] | 要用于执行测试的目标 .NET 版本。示例值有 Framework35、Framework40、Framework45、FrameworkUap10、.NETCoreApp,Version=v1.1。TargetFrameworkAttribute 用于从程序集中自动检测此选项,并在属性不存在时默认为 Framework40。 如果从 .NET Core 程序集删除 TargetFrameworkAttribute,则必须显式指定此选项。如果将目标框架指定为 Framework35,则测试在 CLR 4.0“兼容模式”下运行。示例:/Framework:framework40 |
/TestCaseFilter:[表达式] | 运行与给定表达式匹配的测试 < Expression > 的格式为 < property > = < value >[ < Expression > ]。示例:/TestCaseFilter:“Priority=1” 示例:/TestCaseFilter:“TestCategory=Nightly or (这里用逻辑符号,单竖线 )FullyQualifiedName=Namespace.ClassName.MethodName” /TestCaseFilter 命令行选项不能与 /Tests 命令行选项一起使用 。有关创建和使用表达式的信息,请参阅 TestCase 筛选。 |
/? | 显示使用情况信息。 |
/Logger:[uri/friendlyname] | 为测试结果指定一个记录器。 多次指定参数,以启用多个记录器。示例:要将结果记录到 Visual Studio 测试结果文件 (TRX),请使用/Logger:trx[;LogFileName=<默认为唯一文件名>] |
/ListTests:[文件名] | 列出给定测试容器中的已发现的测试。 |
/ListDiscoverers | 列出已安装的测试发现器。 |
/ListExecutors | 列出已安装的测试执行器。 |
/ListLoggers | 列出已安装的测试记录器。 |
/ListSettingsProviders | 列出已安装的测试设置提供程序。 |
/Blame | 在意见模式中运行测试。 此选项有助于隔离导致测试主机出现故障的有问题的测试。 检测到故障时,它会在 TestResults//_Sequence.xml 中创建一个序列文件,用于捕获在出现故障之前运行的测试的顺序。 有关详细信息,请参阅意见数据收集器。 |
/Diag:[文件名] | 将诊断跟踪日志写入指定文件。 |
/ResultsDirectory:[path] | 如果不存在,则将在指定路径中创建测试结果目录。示例:/ResultsDirectory: |
/ParentProcessId:[parentProcessId] | 负责启动当前进程的父进程的进程 ID。 |
/Port:[port] | 套接字连接和接收事件消息的端口。 |
/Collect:[dataCollector friendlyName] | 为测试运行启用数据收集器。 详细信息。 |
VSTest.Console.exe 执行测试
NUnit 项目
BDD - SpecFlow BDD 测试实践 SpecFlow + NUnit
执行下面命令:
vstest.console.exe C:\Work\SpecFlowDemo\SpecflowNUnit\bin\Debug\SpecflowNUnit.dll /Logger:trx;LogFileName=testResult.trx /ResultsDirectory:C:\Work\SpecFlowDemo\NunitTest
Visual Studio 测试结果文件 (TRX) 生成
MSTest 项目
BDD - SpecFlow BDD 测试实践 SpecFlow + MSTest
执行下面命令:
vstest.console.exe C:\Work\SpecFlowDemo\SpecflowMSTest\bin\Debug\SpecflowMSTest.dll /Logger:trx;LogFileName=testResult.trx /ResultsDirectory:C:\Work\SpecFlowDemo\MSTest
Visual Studio 测试结果文件 (TRX) 生成
Xunit 项目
BDD - SpecFlow BDD 测试实践 SpecFlow + Xunit
执行下面命令:
vstest.console.exe C:\Work\SpecFlowDemo\SpecFlowXunitDemo\bin\Debug\SpecFlowXunitDemo.dll /Logger:trx;LogFileName=testResult.trx /ResultsDirectory:C:\Work\SpecFlowDemo\XunitTest
Visual Studio 测试结果文件 (TRX) 生成
SpecRun 项目
BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun
执行下面命令:
Visual Studio 测试结果文件 (TRX) 生成
并且 Html 测试报告也生成了。
Specflow 生成测试报告
前面 VSTest.Console.exe 命令执行测试生成的 Visual Studio 测试结果文件 (TRX) 并不是我们需要的测试报告,我们可用 Specflow 将 Visual Studio 测试结果文件 (TRX) 转换成 可读性更好的 Html 测试报告。但是只适用于 Specflow 2 版本,Specflow 3 已经移除了此功能。
具体细节请参考 Specflow Reporting
specflow.exe 命令
specflow.exe 用于生成测试报告,只有 Specflow 2 有这个命令,所以需要装 Specflow 2 版本。在 BDD - SpecFlow BDD 测试实践 SpecFlow + Xunit 项目中装了 Specflow 2.4 版本,所以我们就可以用这个版本了来生成测试报告。
specflow.exe 所在目录在 C:\Users\userName\ .nuget\packages\specflow\2.4.0\tools
可通过 specflow.exe – help 命令了解 specflow.exe 命令。
生成 NUnit 项目测试报告
执行命令:
specflow.exe mstestexecutionreport --ProjectFile C:\Work\SpecFlowDemo\SpecflowNUnit\SpecflowNUnit.csproj --testResult C:\Work\SpecFlowDemo\NunitTest\testResult.trx --OutputFile C:\Work\SpecFlowDemo\NunitTest\MyResult.html
html 测试报告生成
生成 MSTest 项目测试报告
执行命令:
specflow.exe mstestexecutionreport --ProjectFile C:\Work\SpecFlowDemo\SpecflowMSTest\SpecflowMSTest.csproj --testResult C:\Work\SpecFlowDemo\MSTest\testResult.trx --OutputFile C:\Work\SpecFlowDemo\MSTest\MyResult.html
html 测试报告生成
生成 Xunit 项目测试报告
执行命令:
specflow.exe mstestexecutionreport --ProjectFile C:\Work\SpecFlowDemo\SpecFlowXunitDemo\SpecFlowXunitDemo.csproj --testResult C:\Work\SpecFlowDemo\XunitTest\testResult.trx --OutputFile C:\Work\SpecFlowDemo\XunitTest\MyResult.html
html 测试报告生成
生成 SpecRun 项目测试报告
执行命令:
specflow.exe mstestexecutionreport --ProjectFile C:\Work\SpecFlowDemo\SpecFlowSpecRun\SpecFlowSpecRun.csproj --testResult C:\Work\SpecFlowDemo\SpecRunTest\testResult.trx --OutputFile C:\Work\SpecFlowDemo\SpecRunTest\MyResult.html
html 测试报告生成