BDD - Cucumber:在一个feature文件中,是否有可能仅针对某一个场景禁用Background逻辑?

9
在一个功能文件中有一个背景和几个场景,但现在需要与同一功能相关的一个场景,该场景不必运行背景逻辑,是否可能仅针对一个场景禁用背景逻辑?
更新-添加示例:
Feature: Sign Up

  In order to access to protected parts of site
  A user
  Should sign up

  Background:
     Given I am on sign up page
     And I am not logged in

  Scenario: User sign up succesfully
    When I sign up with valid fields
    Then I should view dashboard page 

  Scenario: User altredy sign up
    When I sign up with altredy registred user e-mail
    Then I should view altredy sign up message and link to forgot password page

  Scenario: User try to sign up with missing/wrong data
    When I will try to sign up with missing/wrong data
    Then I should error message

  Scenario: User altredy sign in
    #here disable background
    Given I am logged in
    When I am on sign up page
    Then i should be redirect to dashboard page

@iafonov 为什么?我已经添加了一小段代码片段,认为它很有用... - byterussian
5个回答

2

解决方案1。

您可以将只包含该场景的内容放在其他功能文件中,其中没有背景或者它有自己的背景

解决方案2。

从功能文件中删除背景,然后将其逻辑放在步骤定义中,类似于:

Given 'I am on sign up page' do
    some code here
end

Given 'I am not logged in' do
    some code here
end

然后在每个第一步上。
Given 'I sign up with valid fields' do
    step 'I am on sign up page'
    step 'I am not logged in'
    the rest of your code for this step
end

Given 'I sign up with altredy registred user e-mail' do
    step 'I am on sign up page'
    step 'I am not logged in'
    the rest of your code for this step
end

Given 'I will try to sign up with missing/wrong data' do
    step 'I am on sign up page'
    step 'I am not logged in'
    the rest of your code for this step
end

虽然不太美观,但您至少需要重复这些步骤三次。

解决方案3。

您可以摆脱该场景,并将其步骤粘贴到第一个场景中,例如:

Scenario: User sign up succesfully
    When I sign up with valid fields
    Then I should view dashboard page    #this is your Given I am logged in step
    When I am on sign up page
    Then i should be redirect to dashboard page

1

我会完全摒弃背景条款 - 这是不必要的细节。你的场景在没有它的情况下也很合理。

您可以访问注册页面,并验证用户尚未登录,作为“当我使用有效字段注册”步骤定义的一部分。


这是正确的答案。背景适用于所有场景。如果背景中的步骤不适用于特性中的所有场景,则这些步骤不属于背景。从问题中给出的示例来看,背景非常简单。我只需将步骤复制并粘贴到每个场景中即可。 - Greg Burghardt

0
也许您可以使用数字来命名功能文件,其中0_exaple1.feature文件中您可以运行那些使用背景的测试用例,而1_exaple.feature文件中您可以运行那些不需要背景的用例,并在两个功能文件中提供相同的标签,并在运行器文件中给出该标签。
您的运行器文件应如下所示:
@CucumberOptions(
        features = {"src/test/resources/features"},
        plugin = {"com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter:"},
        glue = {"com.company.comapnies.stepdefinitions"},
        tags = "@test"
)

在“功能”文件夹下,您的文件应该保存成这个样子

feature
    |_
      0_example.feature
      1_example.feature

还有你的0_example.feature文件应该像这样:


Feature: Sign Up

  In order to access to protected parts of site
  A user
  Should sign up

  Background:
     Given I am on sign up page
     And I am not logged in

  @test
  Scenario: User sign up succesfully
    When I sign up with valid fields
    Then I should view dashboard page

还有一个名为1_example.feature的文件,内容如下:


Feature: Sign Up

  In order to access protected parts of the site
  A user
  Should sign up

@test
  Scenario: Run this scenario without background
    Given: Launch the browser 
    And: Do something

因此,当您运行测试运行器文件时,它将自动选择@test标签,首先在0_example.feature中搜索,然后开始执行1_example.feature文件。

目前,这是您可以在框架中运行的唯一内容,以防止后台运行。

干杯!!!


0
如果您有这个需求,那么您已经确定了一个新功能。因此,与其试图在cucumber中变得聪明,不如采取更简单的方法,即通过为功能命名来变得聪明。
以您的示例为例,场景“用户已登录”显然与注册无关,它属于不同的功能,例如。
features
  - signup.feature
  - signed_up.feature

signed_up 的其他名称可能是 default_navigation、first_sign_in 等等。

想要为功能的不同部分使用不同的背景色,通常表明您正在探索两个不同的行为位。


0
为什么不创建一个步骤定义来关闭该会话呢? 像这样:
 Then(/^I close the browser$/) do
   page.driver.quit
 end

然后在接下来的步骤中,您可以执行任何您需要的操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接