如何在Gherkin中实现'if'

时间:2017-08-01 09:53:20

标签: cucumber gherkin

我正在尝试将Selenium测试转换为Gherkin。有没有办法在Gherkin中实现if语句?

示例:假设代码以下面的格式编写。我只是写下面的描述。双斜杠后的部分是实际的Selenium代码:

out = p.stdout.read()

为此,我试图在Gherkin中编写代码如下

// launch the application 
// login to application
// navigate to page
String str;
if(str== "XYZ")
{
    // verify title
}
//verify text field 1
//verify test field 2
//verify select box

但是这段代码不正确,因为如果str不等于“XYZ”,我们希望不应该验证该标题,但是应该验证其他验证,例如text field1,2和select box。

5 个答案:

答案 0 :(得分:5)

如果在Gherkin中你不会实施。

Gherkin是关于沟通和你想与之交流的人,非编码员,不知道if语句是什么。他们也不在乎。

解决方案?有两种情况可以涵盖这两种情况。

答案 1 :(得分:2)

理想情况下,此级别的详细信息不会出现在您的Gherkin场景中。最好的方法是描述业务用例,而不是低级别的细节。这就是Gherkin的设计目标:与非技术利益相关者进行沟通,以便您在首先构建正确的东西时可以解决问题。以下是我要写的内容:

Given the user is logged in
And the user is on the required page
When they enter data that requires the optional fields to be validated
And they enter invalid data in the optional fields
Then the form shows an error on the optional fields

低级别细节无关紧要(字符串具体为“XYZ”或者title字段并不重要),因此这些应隐藏在步骤定义和/或单元测试中

为了继续检查其他字段,您可以在此之后添加另一个步骤:

When they enter invalid data in all of the other fields
Then each other field has an error message attached to it.

同样,不需要指定实际字段,也不需要将它们分成各自的步骤。这个想法是表达场景的高级业务价值,即表单在应该的时候进行验证。

保持高水平的优势在于,当表单更改时(最终可能会更改),此方案可以保持不变。这是正确的,因为业务案例是相同的:它应该验证它应该什么时候。所有更改都将在步骤定义中。这意味着没有理由与您的利益相关者讨论您的方案是否仍在测试正确的事情。

答案 2 :(得分:2)

您可以编写方案,有点像这样:

Given the user launches the application
When user login with valid credentials
And navigates to required page
Then he should see the page datails

Then步骤中,您可以管理所有逻辑。

Then(/^he should see the page details$/) do
  if condition
    ...
  else
    ...
  end
end

答案 3 :(得分:1)

Gherkin不是使用ifelse条件的编程语言。它是实施的BDD框架的一部分,旨在使利益相关者和其他非技术资源了解测试过程的内容。因此,始终建议您保持小黄瓜尽可能简单和通用。

答案 4 :(得分:-2)

严格来说,你应该按照以下方式创建一个替代声明:

Given user launches the application When user login with valid credentials and navigate to required page When String str is NOT "XYZ"