如何为具有大量变量的情况构建 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);
}
如果您想在报告中查看这些详细信息,请想办法在步骤运行后将它们打印在那里。
我们的团队是 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);
}
如果您想在报告中查看这些详细信息,请想办法在步骤运行后将它们打印在那里。