小黄瓜:一个场景应该有多少先决条件?

时间:2016-01-13 15:14:54

标签: automated-tests bdd gherkin

我是Gherkin和BDD的新手。 我们正在用Squish进行BDD回归测试。 我们的应用程序非常复杂 - 类似于飞行模拟器。

现在我问自己如何在Gherkin中编写测试。 由于我们有大量的变量作为某种情况的先决条件,我通常会提出很多

None

进入我的测试。

我的自然感觉是我应该避免这种情况,因为它会使事情变得不必要地复杂化。

对于应该有多少先决条件,是否有经验法则? 我应该尝试将它减少到只有一个吗?

5 个答案:

答案 0 :(得分:1)

一般规则是尽可能少地使测试有用。具体数量取决于您的方案的受众。

如果您正在使用小黄蜂场景进行实际BDD(行为驱动开发),那么您必须以让利益相关者理解它们的方式编写场景。如果这意味着你必须编写许多给定的,然后和步骤,那就是它必须的方式。如果这意味着您可以将其中的几个步骤放入一个更常规的设置步骤,那就更好了。

如果您仅将Gherkin场景用作自动化测试的一种方式,那么请为您的开发团队做一些有益的事情。关于尽可能少的步骤的规则来自于试图确保每个人,技术人员和非技术人员理解场景的含义(即他们尽可能清晰和简洁。如果只是技术团队需要如上所述,如果您的团队需要了解它,或者您可以使用包含更多代码的更少步骤,则可以使用许多步骤。

对于你有一个非常复杂的系统进入测试的正确状态的情况,我不会担心可能会设置步骤,只要你最终的场景清晰,尽可能短。没有任何人在没有查看代码的情况下真正理解的更小的整洁场景就没有任何意义了!

答案 1 :(得分:0)

在编写方案时,可以使步骤后面的代码执行将应用程序设置为测试所需的状态所需的任何操作。 Thre是一篇非常好的文章,解释了here点。

我发现如果你的步骤更具描述性,那么当你需要回去引用它们时,你的测试会更有意义。如果您的步骤只是给定,请单击,单击,单击,然后..您可以轻松地忘记测试点。您的测试应该是系统行为,而不是逐步使用系统的说明。

就先决条件而言。您需要尽一切努力使应用程序处于您希望测试的状态。

答案 2 :(得分:0)

Gherkin是一种商业可读的领域特定语言,专为行为描述而创建。 Gherkin有两个目的:作为项目的文档和自动化测试。 Gherkin的语法在Treetop语法中定义,它是Cucumber代码库的一部分。

为了更好地了解Gherkin,请看一下下面提到的简单场景:

Feature: As a existing facebook user, I am able to post a birthday greeting on any other existing user's facebook page

Scenario: Verify that Joe Joseph can post a birthday greeting on Sam Joseph's facebook page
  Given Joe Joseph is an existing facebook user
  Given Sam Joseph is an existing facebook user
  Given Joe Joseph is on login page of facebook
  Given Joe Joseph logs into his facebook account
  When Joe Joseph opens Sam Joseph's facebook page
  And Joe Joseph writes "Happy Birthday Sam" on Sam Joseph's facebook page
  And Joe Joseph clicks on Post button
  Then Joe Joseph verifies that "Happy Birthday Sam" is successfully posted on Sam Joseph's facebook page

在上面的场景中,所有以“Given”开头的语句都是我的前提条件。 因此,就预先考虑而言,您可以使用测试所需的许多前提条件。

答案 3 :(得分:-1)

Gherkin是Cucumber理解的语言。它是一种业务可读的领域特定语言,可让您描述软件的行为,而无需详细说明该行为的实现方式More here

从上述陈述我的理解是。每次使用场景的人都知道如何编写和理解Gherkin语言时,您不需要每次都添加前置条件。

以下是示例:

When I take login as system admin
And I click on new user
And I enter new user details
Then new user is created successful

在这里,我不需要提及我的位置和URL打开的其他前提条件?

第一个前提是URL是否已打开。

Given I opened URL "http://www.stackoverflow.com"
And I enter system admin details
And I click on new user
When I enter new user details
Then new user is created successfully

第二个条件新用户详细信息表单包含所有必填字段。这可以是单独的场景。

目标是告诉业务和团队我们正在测试这种情况。这不是测试用例。您无需为测试目的创建大量文档。

答案 4 :(得分:-1)

与YAML或Python一样,Gherkin是一种面向行的语言,它使用缩进来定义结构。行结尾终止语句(称为步骤),空格或制表符可用于缩进。最后,Gherkin中的大多数行都以特殊关键字开头:

示例

Feature: Some terse yet descriptive text of what is desired
  In order to realize a named business value
  As an explicit system actor
  I want to gain some beneficial outcome which furthers the goal

  Scenario: Some determinable business situation
    Given some precondition
      And some other precondition
     When some action by the actor
      And some other action
      And yet another action
     Then some testable outcome is achieved
      And something else we can check happens too

  Scenario: A different situation
      ...

解析器将输入划分为要素,场景和步骤。让我们来看看上面的例子:

  1. Feature: Some terse yet descriptive text of what is desired启动该功能并为其标题。

  2. Scenario: Some determinable business situation启动方案,并包含该方案的说明。

  3. 接下来的7行是方案步骤,每个步骤都与其他地方定义的正则表达式相匹配。

  4. Scenario: A different situation启动下一个方案,依此类推。

  5.   

    当您执行该功能时,每个步骤的尾随部分(在Given,And,When等关键字之后)与正则表达式匹配

    另请注意,如果您有Given I opened URL "http://www.stackoverflow.com"之类的先决条件,请提及我的@Boston。建议将其用作Background

    示例

    Feature: This is test feature
    
    Background: background scenario
    Given I opened URL "http://www.stackoverflow.com"
    
    Scenario: access first senario
    Given: I should see this
    ...
    
    Scenario: access second scenario
    Given: I should see that
    ...
    

    background将在每scenario之前执行。

    参考: https://github.com/cucumber/cucumber/wiki/Gherkin