黄瓜方案-正确方案

时间:2019-07-11 11:50:07

标签: testing cucumber bdd

我正在尝试改善我的黄瓜情况(BDD)

假设我们有一个网站,该网站可以处于3个状态,并且基于此状态,它在页面中具有不同的网络元素。

您将如何编写黄瓜方案以使其与BDD方法学非常接近,并且易于理解?

目前,我有:

  Scenario Outline: View page in <PAGE STATE> state
    Given I opened page in <PAGE STATE> state
    Then I should see "<AVAILABLE ELEMENTS>
    Examples:
      | PAGE STATE | AVAILABLE ELEMENTS                                         |
      | State1     | Value input, Default slider, Active slider,                |
      | State2     | Value input, Default slider, Active slider, Type dropdown  |
      | State3     | Value input, Default slider, Active slider, Image uploader |

1 个答案:

答案 0 :(得分:2)

我不建议所有页面状态使用方案概述。您希望每种情况都严格关注您主张的事物。例如,图片上传器应为自己的场景:

Scenario: Users can upload an image when things are foobarred
    # One or more `Given` steps to put the system into the correct state
    Given a foo exists
    And bar has happened
    And a baz has been foobarred
    When I am viewing the page
    Then I should be able to upload an image

还有一个断言的示例步骤:

[Then(@"I (should|should not) be able to upload an image")]
public void ThenIShouldBeAbleToUploadAnImage(string assertion)
{
    bool isFound = false;

    try
    {
        var element = driver.FindElement(By.Css("input[type='file']"));

        isFound = true;
    }
    catch (NoSuchElementException)
    {
        // do nothing
    }
    catch (WebDriverTimeoutException)
    {
        // do nothing
    }

    if (assertion == "should")
    {
        // Assert isFound is true
    }
    else
    {
        // Assert isFound is false
    }
}

方案名称清楚地表明了一个狭窄的测试用例。在此场景的Given步骤中清楚地定义了页面的每个状态。它也只有一个断言,因此只有一种原因会导致这种情况失败(不存在图像上传字段)。

您希望您的方案只关注一种行为。您的步骤不应描述页面或屏幕的技术细节,而应描述用户的操作。您不应断言上传字段可见。您应该断言自己可以上传图片,并且步骤定义应注意查找图片上传字段。

有关如何编写描述行为的良好步骤而不是逐步完成任务的逐步建议,请参见BDD 101: Writing Good Gherkin