一个方案概述中许多步骤的最佳实践

时间:2019-08-30 10:09:37

标签: bdd

所以我在页面上有很多按钮/滑块/输入等。 我需要所有这些按钮/滑块...来在页面末尾创建某种形式。 当我需要完成一些步骤时,如何在BDD中处理这种情况。 ?还是在最后,我为每个步骤都做断言是否正确?我还想更改示例:表中的值,只是为了检查不同的条件/状态。

这只是我代码的一小部分

    And as a deeplink url input "<deeplink_url_on_news_feed_banner>"
    And enter "<display_priority_on_news_feed>" as a display priority number
    And click cta on news feed banner
    And input cta text into cta news banner "<cta_text_news_banner>"
    And from the news_feed banner choose art file button
    And select available banner second
    And click create button
    Then announcement form has been created with valid announcement_name
    Then compare platform selection to announcement not the archive table    
    Then compare segment string "<segment_string>" to text in announcement 
    Then compare display priority number "<display_priority_number>" to text 
    Then compare deep link url "<deeplink_url>" to deep link url in 
    Then compare amount of cool down "<minutes>" to minutes in announcement ta

以上看起来很难看,也许我可以做得更好? 我无法将这些步骤与小故事分开,因为我需要选择几乎所有按钮或否才能创建表单

2 个答案:

答案 0 :(得分:1)

这是使用Gherkin表的好处。查看您的方案,其中一些输入已参数化。其他的基本上是“硬编码”或场景之间的常量。有两种基本策略可以使您在步骤的简洁性和可组合性之间取得平衡。

当我看到类似And select available banner second的步骤时,我立即想到“此情况需要横幅-任何横幅-而且我不在乎只要 a 横幅被选中。”

使用表格对您的步骤进行定语,可让您指定方案中的值,同时为其他您不关心的必要值提供默认值:

When I create the following foo
    | Field                   | Value                              |
    | Deep link URL           | <deeplink_url_on_news_feed_banner> |
    | Display priority number | <display_priority_on_news_feed>    |
    | CTA news banner         | <cta_text_news_banner>             |

步骤定义将有一个Table对象作为其最后一个参数,您可以一个一个地访问这些值。对于您的方案不关心的必填字段,您将有一个空字符串或null字符串。如果遇到空值(例如“可用横幅”),那么您的步骤定义可以选择一个智能默认值(例如第二个可用横幅)。

优点是您可以为当前方案不关心的字段选择智能默认值,并缩短方案。缺点是您在幕后发生了一些“魔术”,其中必填字段被赋予了虚拟数据。

另一种策略是结合上面的新步骤为其他必填字段提供通用步骤。然后就没有“魔术”了:

When I create the following foo
    | Field                   | Value                              |
    | Deep link URL           | <deeplink_url_on_news_feed_banner> |
    | Display priority number | <display_priority_on_news_feed>    |
    | CTA news banner         | <cta_text_news_banner>             |
And I choose a news feed banner

I choose a news banner步骤将替换选择横幅的4个程序步骤:

And click cta on news feed banner
And input cta text into cta news banner "<cta_text_news_banner>"
And from the news_feed banner choose art file button
And select available banner second

When I choose a news feed banner步骤将实现导航用户界面的严格细节,以便选择新闻提要横幅。

您的断言也可以被清除:

Then the following announcement should exist:
    | Field                | Value                     |
    | Segment              | <segment_string>          |
    | Display priority     | <display_priority_number> |
    | Deep link URL        | <deeplink_url>            |
    | Cool down in minutes | <minutes>                 |

类似于上面的When步骤,您可以使用Gherkin表对象进行比较。

其他Then步骤尽可能地简洁。您只能走得很远才能清理您的步骤。有时情况只是漫长的。您可以将其分解为单个方案,并且只有一个断言。这样可以缩短每个方案的时间,但最终您会得到更多的方案。这是一种平衡的行为。

答案 1 :(得分:0)

无论如何对步骤进行分组,您仍然可以选择每个按钮。

例如,您可以简化此部分

And as a deeplink url input "<deeplink_url_on_news_feed_banner>"
And enter "<display_priority_on_news_feed>" as a display priority number
And click cta on news feed banner
And input cta text into cta news banner "<cta_text_news_banner>"
And from the news_feed banner choose art file button
And select available banner second
And click create button

类似

And fill the necessary form data
And click create button

然后粘合的代码将执行相同的步骤,您只需将所有内容放在一个方法中即可,而不是5或6个方法。