如何为具有大量变量的情况构建 BDD 场景

How to structure BDD scenarios for situations with a lot of variables

我们的团队是 BDD 的新手 development/specification,从测试自动化的角度来看,我们希望获得一些关于在存在大量变量的情况下设置 BDD 场景(和步骤)的建议,就像表格一样。

情况是这样的:一个创建员工的表单,由个人信息、职位详情、工资等多个主题组成

团队提出的可能场景概述:

鉴于我想添加一个新员工
并且职位是“jobtitle
何时 我提交表格
然后通知发送给“经理

示例:
|职位|经理|
|开发者|李四|

以上步骤仅描述了场景结果的决定因素。因此,一个人的姓名或 he/she 的薪水不会影响场景。然而,在另一种情况下,不同的领域可能是决定因素,比如某个部门。在这种情况下,如何将场景或底层步骤捆绑在一起,以便我们可以尽可能多地重复使用?因为即使在这个例子中职位是决定因素,我们仍然需要填写所有其他必填字段才能提交表格。欢迎任何建议!

参数使用DataTable

例如:

    Scenario Outline:
    Given I am on the new user registration page
    When I enter invalid data on the page
    |personal information| job details| salary|  //parameters
    Then close the browser.

    Examples:
    |jobtitle|manager|
    |Developer|John Doe|


        @When("^I enter invalid data on the page$") 
           public void enterData(DataTable table){ 
              //Initialize data table 
              List<list> data = table.raw();
              System.out.println(data.get(0).get(0));//personal information
    System.out.println(data.get(0).get(1));//job details
    System.out.println(data.get(0).get(2));//salary

我会定义一些类型的员工并在代码中获取正确的详细信息。

例如:初级管理员、高级管理员、经理助理 每个描述都讲述了一些关于工作细节、薪水和角色的信息。

根据这些,您可以在方法中生成薪水和职位描述。

在您的 bdd 场景中:
假设我有一个 初级管理员 员工
其中 junior admin 是一个参数,您可以使用它来获取所需的数据类型并创建用户。

    /**
     * @When /^I have an (junior admin|senior hr) employee$/
     */
    public function iHaveAnEmployee($employeeType)
    {
        // generate data for employee
        $employee = someMethodThatGeneratesEmployeeDetails($employeeType);

       // create the employee
       someMethodThatCreatesTheEmployee($employee);
    }

如果您想在报告中查看这些详细信息,请想办法在步骤运行后将它们打印在那里。