BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun

  • 引言
  • SpecFlow+ Runner 说明
  • 创建一个 .NET Framework 项目
  • 添加 SpecFlow package
  • 安装 SpecRun Package
  • 创建 Feature 文件
    • SpecFlow 3 Vs SpecFlow 2
  • 自动生成 feature.cs 文件出错 TroubleShooting
    • 方法一: 手动添加 specflow.json
    • 方法二:手动添加一个 App.config 文件
  • 创建 step definition 文件
  • 实现 steps
  • 执行测试
  • 测试报告

引言

上篇有介绍 BDD - SpecFlow BDD 测试实践 SpecFlow + Xunit,今天来实践一下 SpecFlow + SpecRun

SpecFlow+ Runner 说明

SpecFlow+ Runner 已经宣布不再推新和维护了 The Retirement of SpecFlow+ Runner ,所以在使用上会有点限制,.NET 5 及之前的版本,没有变化,Nuget package 还会保留,使用 SpecFlow+ Runner 没有任何限制,但是不再会有 Bug Fix 和 New Feature 发布。.NET 6,需要替换 unit test runner (用 NunitxUnitMSTest 来替换 SpecFlow+ Runner),具体参考 Migrating away from the SpecFlow+ Runner

创建一个 .NET Framework 项目

我们接着上一篇 BDD - SpecFlow BDD 测试实践 SpecFlow + Xunit 中的实例,在已有的 Solution 中添加一个新的项目。

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第1张图片
右键 Solution -> Add -> New Project

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第2张图片

选择 Class Library (.NET Framework)
BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第3张图片

注意 Framework 的选择,我本机是 .NET Framework 4.6.2,只要是 .NET 5 及之前的版本应该都没有问题。

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第4张图片

新项目 SpecFlowSecRun 创建好了。

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第5张图片

添加 SpecFlow package

右键 References -> Manage Nuget Packages

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第6张图片

注意选择 SpecFlow 版本依赖的 .NE FrameWork 版本,最新版本依赖 .NET Framework 4.6.1,我的是 .NET Framework 4.6.2,是可以向前后容的。

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第7张图片

SpecFlow 装好以后会多出 packages.config 文件用来管理 Nuget 包。相比 SpecFlow 2.4,没有自动生成 App.config 文件。

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第8张图片

安装 SpecRun Package

一定要选择跟 SpecFlow 一致的版本,我们也选择最新版本

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第9张图片

安装结束后会多出一些文件

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第10张图片

创建 Feature 文件

该装的依赖包都装好了,我们尝试创建一个 Feature 文件试试。
右键项目-> Add -> New Item

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第11张图片

选择 SpecFlow -> Feature File for SpecFlow

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第12张图片

Feature 文件生成

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第13张图片

用下面代码替换 feature 文件中的内容

Feature: Calculator

A short summary of the feature

@tag1
Scenario: Add two numbers
	Given the first number is 50
	And the second number is 70
	When the two numbers are added
	Then the result should be 120

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第14张图片

现在编译一下这个项目,会产生一个 Calculator.feature.cs 文件,主要是将 SpecFlow Scenarios 转换成 SpecRun 可执行的 test cases。

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第15张图片

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第16张图片

SpecFlow 3 Vs SpecFlow 2

相比 SpecFlow 2.4.0 版本,这个 Calculator.feature.cs 文件是没有包含在 VS 项目文件中的,删除这个文件后,只要编译一下又会重新生成,所以不用在代码仓库中去维护这个文件,算是一个改进,而 SpecFlow 2.4.0 就必须将它和 对应的 feature 文件一起提交到代码库,其他人拉代码时就会出现编译问题。

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第17张图片

自动生成 feature.cs 文件出错 TroubleShooting

SpecFlow 因为不会自动生成 App.config 项目配置文件,有时会遇到发生生成 feature.cs 文件出错,参考 SpecFlow Configuration 本文是 .NET Framework 项目,所以没有强制要求进行配置,通常是不会出现这种错误
BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第18张图片

方法一: 手动添加 specflow.json

手动添加一个SpecFlow 配置文件 specflow.json,并且将 specflow.json 文件属性 Copy to Output Directory 设置成 Copy alwaysCopy if newer

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第19张图片
BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第20张图片

方法二:手动添加一个 App.config 文件

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第21张图片

并添加如下内容:

  <configSections>
    <section name="specFlow" type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow" />
  </configSections>
  <specFlow>
    <!-- For additional details on SpecFlow configuration options see http://go.specflow.org/doc-config -->
  <!-- For additional details on SpecFlow configuration options see http://go.specflow.org/doc-config --><!-- use unit test provider SpecRun+NUnit or SpecRun+MsTest for being able to execute the tests with SpecRun and another provider --><unitTestProvider name="SpecRun" /><plugins>
      <add name="SpecRun" />
    </plugins></specFlow>

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第22张图片

创建 step definition 文件

右键 feature 文件中的 step -> Define Steps…,创建 step definition

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第23张图片

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第24张图片

创建的 step definition 文件,模板文件中 step 都是没有实现的。

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第25张图片

实现 steps

为了简单点,每个 step 只做一个输出

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第26张图片

执行测试

编译整个 Solution, 并打开菜单 Test -> Test Explorer,发现到测试用例,点击绿色图标运行。

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第27张图片

执行结果,还可以看到每个 step 的输出

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第28张图片

测试报告

执行完,会自动生成测试报告,当前 solution 中生成 TestResults 文件夹,相比上篇 BDD - SpecFlow BDD 测试实践 SpecFlow + Xunit 要友好多了,SpecFlow + Xunit 不会自动生成测试报告。

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第29张图片

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第30张图片

生成的 html 报告

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第31张图片

生成的 txt log:

BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun_第32张图片

你可能感兴趣的