python - 如何处理BDD中的环境先决条件?

标签 python pytest bdd

我正在开发一个自动化测试项目(使用 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

人们通常如何以将来可读和可维护的方式写下这些操作和实体?

最佳答案

一种方法 - 使用@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: 
    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 |

最后一种方法 - 使用@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();
    }

关于python - 如何处理BDD中的环境先决条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56543960/

相关文章:

python - ValueError : Can not squeeze dim[1], 期望维度为 1,'sparse_softmax_cross_entropy_loss 得到 3

python - 如何跳过特定的参数化测试?

python - VSCode pytest 测试发现失败

java - 如何将字符串变量插入到 Cucumber-JVM 中的步骤定义中?

python - python中的延迟加载模块

python - Django-DB-迁移 : cannot ALTER TABLE because it has pending trigger events

python - 无法使用 DRF APIClient() 更改 header

ruby-on-rails - cucumber `press button` 失败(Capybara::ElementNotFound)

javascript - 让 requirejs 与 Jasmine 一起工作

python - .desktop 文件中的名称在 tkinter 中不起作用 - python