提问者:小点点

如何在Cucumber特征文件中传递具有不同数量参数的多个示例


我的功能文件中的一个步骤需要两个参数,如登录名和密码,用于多个系统,每个系统都可以正常工作,但是有什么方法可以为各个步骤传递多个示例吗?功能文件中的第一步是调用POSTAPI并根据参数获取响应。场景大纲:验证搜索结果给定我在Header中设置了授权令牌,其中包含以下功能文件正文有效负载

| Key       | Value           | 
|InstituteID| <InstitutionID> |         
|InstituteID|
|1234456    |
|1345679    |
|4564565    |

第二步是:

用户输入"

|Username|Password |
|test    |abc      |
|test2   |abc      | 

你能分享一下是否有什么方法可以实现这一点吗?我可以像上面提到的那样在一个场景大纲中传递多个示例吗?我需要步骤1中的一些响应来执行步骤2,这样我就不能分成两个场景。谢谢你。


共2个答案

匿名用户

是的,您可以传递多个示例。我给你举个例子:

Scenario Outline: I want to login
    Given I am on the login page
    Then I log in with "<Username>" and "<Password>"
    
    Examples:
        |  Username  |  Password  |
        |  User1     |  12345678  |
        |  User2     |  12345679  |
        |  User3     |  12345670  |

现在,对于这些示例中的每一个,上述场景将运行3次。

在步骤文件中,您可以创建如下函数:

@Given("^I am on the login page$")
public void navigate_to_login_page() {
    //some logic
}

@Then("^I login with "([^\"]*)\" and "([^\"]*)\"$")
public void login(String username, String pass) {
    //some logic
}
    

匿名用户

您不能为单个步骤编写示例,只能为整个场景大纲编写示例。

但是您可以编写尽可能多的示例并在其中混合您的参数

Examples:
|Username|Password|InstituteID| 
|test    |abc      |1234456    |
|test    |abc      |1345679    |
|test    |abc      |4564565    |
|test2   |abc      |1234456    |
|test2   |abc      |1345679    | 
|test2   |abc      |4564565    | 

编辑1:

DataTable可能会帮助您

像这样定义胶水代码,记住方法参数DataTable:

    @When("A POST API is called with parameters:")
    public void callPostApi(DataTable table) {
        List<List<String>> rows = table.cells(1); // skip the header
        for (List<String> row : rows) {
           String parameter = row.get(0);
           // Call the POST API for the parameter here, save, check the results etc.
        }
    }

并在. feature文件中使用它

  When A POST API is called with parameters:
  | Parameter | 
  | 123       |
  | 456       |
  | 789       |
  | abc       |
  | def       |