黄瓜中BDD方案的有效执行

问题描述 投票:0回答:1

我已经开始使用Selenium + BDD Cucumber,我发现这两种技术可以很好地协同工作。如果Cucumber提供BeforeAll和AfterAll批注以更细粒度地对特定区域进行更快的验证,那么我对方法的改进感到有些担忧。举例来说,我想编写这种情况(我只是为了表达自己的观点而通用)

Scenario Outline: The customer can update their details
Given I am logged in the platform
And I navigate to my details page
When I update "field" in my details
And Save
I should see the "field" updated
Example:
 |field   |
 |name    |
 |surname |
 |address |

作为场景大纲,这意味着它将作为3个单独的场景执行3次。我在这里看到的问题是,每当场景从头开始时,都会给您每次登录带来延迟(或者通常是执行所有操作来使您达到想要的目的)。

一个人可以使用@Before,但不会有太大变化,因为这些动作每次都会被执行(而且我也不完全确定这是在BDD中做事的正确方法)。

有人建议在一系列“何时/然后”中替换每个字段的检查,这似乎违反了BDD的基本原则。同样在此特定情况下,这意味着将三个场景压缩为一个场景,如果客户未能更新名称字段,则不会执行其他场景,因为我的通过率为0%,而我的通过率为66%(假设为简单起见,我们只有一种情况,其他两个字段已成功更新)。而且,如果更新名称和更新地址都存在错误,则只有在“更新名称”步骤成功后,我才会在第一个问题中意识到问题,而对另一个问题有所了解。

BeforeAll可能会解决该问题,但是在Cucumber中不可用。

我想要实现的是执行一系列步骤以转到特定页面,然后对每个字段(或不同级别的粒度)执行测试,并在“当我执行此操作时,然后我应该看到这种方式……”,这样,如果发生任何故障,我将知道发生了什么故障以及发生了什么,但至少我确信,由于先前的步骤已失败,因此所有内容均已覆盖并且没有被跳过。

很长的歉意,但我希望能尽可能地解释我的观点。不确定是否清楚或完全有意义。

感谢您的回复

automated-tests cucumber bdd cucumber-jvm cucumber-java
1个回答
0
投票

对于BDD,将其限制为每个字段一个场景太严格了。我喜欢将场景视为与行为相联系的独特行为,以确保行为能够正常运行。测试所有字段是否正在更新将是适当的,除非可以将一组字段隔离为单独的行为,例如更改电子邮件应发送验证。这与电子邮件字段已更新的事实应该是一个单独的场景。

这是数据表易于使用的地方。为要更新的字段指定数据表,以便可以在单个方案中指定多个字段。您可以在断言中使用数据表,以便一次比较多个字段。

Scenario: The customer can update their details
    Given I am logged in the platform       
    And I navigate to my details page
    When I update my details with:
        | Field   | Value        |
        | Name    | Bob          |
        | Surname | Jr           |
        | Address | 123 Smith St |
     And Save
     Then my details should be:
        | Field   | Value        |
        | Name    | Bob          |
        | Surname | Jr           |
        | Address | 123 Smith St |
© www.soinside.com 2019 - 2024. All rights reserved.