使用SpecFlow进行端到端回归测试

Mar*_*low 8 bdd automated-tests acceptance-testing specflow gherkin

我们正在使用BDD并使用SpecFlow来推动我们的开发(ATDD).

我们的QA团队希望定义他们自己的'端到端回归测试(在Gherkin/SpecFlow中)并重新使用我们已经定义的步骤.

(请注意 - 我知道这不是一个很好的例子,但它应该提供足够的细节)

测试可能包括..

  1. 登录
  2. 搜索产品
  3. 选择要购买的产品
  4. 创建订单
  5. 选择送货方式.
  6. 提交订单.
  7. 取消订单.

这会暗示像......这样的场景.

鉴于我登录
当我搜索产品
而我选择要购买的产品
我创建订单
我选择交货选项
我提交订单
我取消订单
然后?? !!

这显然是错误的,因为我们没有在每一步检查输出.

所以这可以解决为一系列场景:

场景1:
鉴于我登录时
当我搜索产品
然后我看到了产品列表

场景2:
当我选择要购买的产品
然后我可以创建订单

场景3:
当我创建订单
而我选择交货选项
然后我可以提交订单

等等

这个问题的主要问题是似乎无法指定场景运行的顺序/顺序(nUnit的特征?).因为场景之间存在依赖关系(它们未设置为已知起点),所以它们必须按顺序运行.

我的问题是:

a)我们是否试图在圆孔中安装方形钉?!

b)有没有人知道是否有办法以这种方式使用SpecFlow/Gherkin?

c)或者有人知道有什么替代品吗?

非常感谢!

Mar*_*erg 11

我会说你在错误的抽象层面上编写你的场景.但这取决于你想用它们做什么;

如果你想编写测试脚本,那么你就是在正确的轨道上...但是它将是一个噩梦,因为它,在第一种情况下(长脚本)将非常脆弱,第二种情况(几种情况)需要确保一定的执行顺序.他们沮丧并被认为是反模式.

我建议您合并您正在编写的ATDD测试并与测试部门交谈,以了解他们对此问题的看法,并包括他们确保系统经过全面测试所需的测试用例.谁知道?你甚至可能从彼此那里学到一些东西:P

当你编写那些"规范"(我宁愿称之为)时,你会把它们写在更高的层次上.所以不要写:

Given I am logged in
When I Search for a product
  And I Select a product to buy
  And I Create an order
  And I Select delivery option
  And I Submit the order
Run Code Online (Sandbox Code Playgroud)

你写的东西就像

When I submit an order for product 'Canned beans'
Run Code Online (Sandbox Code Playgroud)

在该步骤后面的步骤定义中,您执行所有自动化(登录,浏览到产品页面,选择交付选项,提交订单).

所有这些都可以在这些关于如何编写可维护的UI自动化测试的优秀文章中阅读:

我希望这有帮助