9

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

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

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

测试可能包括..

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

这将暗示一个场景,如..

假设我在
搜索产品时已登录
并选择要购买的产品
并创建订单
并选择交货选项
并提交订单
并取消订单
然后??!!

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

因此,这可以作为一系列场景来解决:

场景 1:
假设我已登录,
当我搜索产品时
,我会看到产品列表

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

场景 3:
当我创建订单
并选择交货选项时
,我可以提交订单

等等等等

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

我的问题是:

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

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

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

非常感谢!

4

1 回答 1

12

我会说您在错误的抽象级别上编写场景。但这取决于您想将它们用于什么;

如果您想编写测试脚本,那么您就在正确的轨道上……但是维护它将是一场噩梦,在第一种情况下(长脚本)将非常脆弱,而在第二种情况下(几种情况)需要保证一定的执行顺序。他们都被劝阻并被认为是反模式。

我建议您合并您正在编写的 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

你写了类似的东西

When I submit an order for product 'Canned beans'

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

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

我希望这有帮助

于 2011-12-14T13:08:42.060 回答