设计可重复使用的步骤规格 - 这种方法是否正确

时间:2015-08-13 04:53:12

标签: selenium-webdriver bdd specflow

我们是Specflow&为了在我们公司实施它,我们开发了一些功能,作为烟雾/回归测试的一部分。目前正在执行。我们正在按照描述的方法进行 - Specflow,Selenium-Share data between different Step definitions or classes 我们观察到的是重复步骤 - 必须将步骤分解为其大部分组件/单元功能,如下所示 -

Scenario: Search Cash book by Id
    Given Site browser launched
    Given Login is successful with "******" and "********"
    Given Set the service to "*******"
    Given Search a specific account "ABCDEFG" to match "Account"
    When A specific account is selected "ABCDEFG"
    When I search cash book with these data "CSX"
    Then the result should display records with transaction Amount "$1234"

我们观察到,如果您的步骤没有如上所述,其可重用性在其他功能方面非常有限。这种方法是正确的还是需要关于功能的步骤而不是可重用性?

1 个答案:

答案 0 :(得分:3)

示例规范与关键字驱动测试不同,就像您尝试在上面实现的那样。真正的BDD方法是这样的:

Feature: Viewing transaction amounts in certain cashbooks
As a customer
In order to know if I am paid
I want to see the amount next to a transaction

Background:
Given the following transaction:
    | Name      | Account   | CashBook | Transaction | Amount |
    | CustomerA | ABCDEFG   | CSX      | GlipGlob    | 1234   |

Scenario: A Cash book can be searched by ID
    Given I am logged in as CustomerA
    And I have selected the account "ABCDEFG"
    And I have selected the cash book "CSX"
    Then there should be a transaction with amount "1234"

后台检查存在和/或设置数据。如何完成这一功能对于功能(实现细节)并不重要。这可以通过直接数据库查询,Web服务或通过GUI(不推荐)来完成。

该场景也在没有实现上下文的情况下运行:如果您通过浏览器或Windows Phone应用程序将其作为Web服务器运行,则无关紧要。因此,信息为"检查复选框"或者"填充编辑框"和#34;点击链接"不应出现在功能中。 如果您正在测试特定的页面布局,则例外。

在测试设计开始时,这使得您的步骤不能在较低级别上重复使用,因此您必须在胶水代码中进行可重复使用的步骤。对于Selenium en webtesting,您可以使用page object pattern来实现此目的。

最后,您将拥有更灵活的框架。当复选框更改为单选按钮或只是对象上的链接时,您只需更改页面对象中的一个方法,而不是更改100个功能文件。
如果管理层决定他们想要一个iPhone应用程序,您可以重复使用所有测试,只需为胶水代码创建不同的界面 当开发人员将REST API交给应用程序时,因为需要与其他源互连,所以只需更改粘合代码就可以重用相同的功能文件。

所以,是的,如果在步骤中没有定义对象,那么在低级别上步骤不是非常可重用的,但从长远来看,它将为您提供巨大的优势。当你想在可读步骤定义中使用低级步骤时,SpecFlow可能是你错误的框架。