Как обрабатывать предпосылки среды в BDD? - PullRequest
1 голос
/ 11 июня 2019

Я работаю над проектом автоматизации тестирования (с использованием Pytest BDD) и постоянно сталкиваюсь с проблемой того, как обрабатывать предварительные условия среды, используя BDD и Gherkin?Например: почти все сценарии требуют, чтобы новые сущности создавались (пользователи / администраторы / сайты / организации / и т. Д.) Только для того, чтобы с чем-то работать.

Думаю, мне не следует писать все необходимые действияв разделе «Данные» (кажется, анти-BDD), но я не хочу заблудиться о том, какой сценарий устанавливает, что и как?

Например, я бы никогда не хотел создавать это:

Scenario: A user can buy a ticket from a webshop.
Given an item available in the webshop
And a user is created
And the user has at least one payment option set up
And the user is logged in
When the user buys the item in the webshop
Then the user owns the item

Как люди обычно записывают эти действия и сущности так, чтобы их можно было читать и поддерживать в будущем?

Ответы [ 2 ]

2 голосов
/ 11 июня 2019

One Way - Использование @BeforeClass (однократная настройка)

@RunWith(Cucumber.class)
@CucumberOptions(features = "classpath:features/checkoutmodule/registereduser/",
                     glue = {"com.ann.automation.test.steps" },
                     tags = { "@SignIn" },
                   plugin = { "pretty","json:target/cucumber.json",
                              "junit:target/cucumber-reports/Cucumber.xml", "html:target/cucumber-reports",
                              "com.cucumber.listener.ExtentCucumberFormatter"},
                   strict = false,
                   dryRun = false,
               monochrome = true)

public class RunCuke {

    // ----------------------------- Extent Report Configuration -----------------------------
    @BeforeClass
    public static void setup() {
        // below is dummy code just to showcase
        File newFile = new File(Constants.EXTENT_REPORT_PATH);
        ExtentCucumberFormatter.initiateExtentCucumberFormatter(newFile,true);
        ExtentCucumberFormatter.loadConfig(new File(Constants.EXTENT_CONFIG_FILE_PATH));
        ExtentCucumberFormatter.addSystemInfo("Browser Name", Constants.BROWSER);
        ExtentCucumberFormatter.addSystemInfo("Browser version", Constants.BROWSER_VERSION);
        ExtentCucumberFormatter.addSystemInfo("Selenium version", Constants.SELENIUM_VERSION);
    }
}

Другой способ - использование фона (настройка перед каждым сценарием)

Cucumber предоставляет механизм для этого, предоставляя ключевое слово Background где можно указать

  • шаг или серия шагов, которые являются общими для всех тестов в файле функций.
  • шаг или серия шагов должны выполняться перед каждым сценарием в особенность. Как правило, это будут данные шаги, но вы можете использовать любые шаги что вам нужно.

Пример: Здесь, перед каждым выполнением сценария / схемы, мы хотим, чтобы пользователь переходил на домашнюю страницу сайта и выполнял поиск продукта. Итак, давайте посмотрим реализацию.

  Background: 
    Given User is on Brand Home Page "https://www.anntaylor.com/"
    Given User searches for a styleId for <Site> and makes product selection on the basis of given color and size
      | Style_ID  | Product_Size | Product_Color |
      | TestData1 | TestData1    | TestData1     |
      | TestData2 | TestData2    | TestData2     |

  @guest_search
  Scenario Outline: Validation of UseCase Guest User Order Placement flow from Search
    Then Clicking on Cart icon shall take user to Shopping Bag
    When Proceeding to checkout as "GuestUser" with emailId <EmailID> shall take user to Shipping Page
    And Entering FN as <FName> LN as <LName> Add as <AddL1> ZCode as <ZipCode> PNo as <PhoneNo> shall take user to payment page
    And Submitting CCardNo as <CCNo>" Month as <CCMonth> Year as <CCYear> and CVV as <CVV> shall take user to Order Review Page
    Then Verify Order gets placed successfully

    Examples: Checkout User Information
      | EmailID   | FName     | LName     | AddL1     | ZipCode   | PhoneNo   | CCNo      | CCMonth   | CCYear    | CVV       |
      | TestData2 | TestData2 | TestData2 | TestData2 | TestData2 | TestData2 | TestData2 | TestData2 | TestData2 | TestData2 |

Last Way - Использование @Before (настройка перед каждым сценарием)

@Before
    public void setUpScenario(Scenario scenario){
        log.info("***** FEATURE FILE :-- " + Utility.featureFileName(scenario.getId().split(";")[0].replace("-"," ")) + " --: *****");
        log.info("---------- Scenario Name :-- " + scenario.getName() + "----------");
        log.info("---------- Scenario Execution Started at " + Utility.getCurrentTime() + "----------");
        BasePage.message=scenario;
        ExtentTestManager.startTest("Scenario No . " + (x = x + 1) + " : " + scenario.getName());
        ExtentTestManager.getTest().log(Status.INFO, "Scenario No . "+ x + " Started : - " + scenario.getName());
    //  Utility.setupAUTTestRecorder();
        // --------- Opening Browser() before every test case execution for the URL given in Feature File. ---------
        BaseSteps.getInstance().getBrowserInstantiation();
    }
1 голос
/ 11 июня 2019

Используйте «Фон» Cucumber ключевое слово :

Фон в Cucumber используется для определения шага или серии шагов, которые являются общими для всех тестов в файле объектов.Это позволяет вам добавить некоторый контекст в сценарии для функции, в которой он определен.

См. Также официальные документы .

...