繁体   English   中英

尝试在我使用一个或多个数据的 Cucumber 中编写测试用例

[英]Trying to write test case in Cucumber where I use one or more pieces of data

我正在尝试编写一个测试用例,其中输入可以是一个或多个项目。

例子:

Scenario: Changes to a user's address in the system are saved to the database
   
Feature: Make a change to one or more of a user's address fields.
Given I'm logged into the system.
When I make a change to <field>.
And Click Save.
Then Changes are saved into database.

|Field|
|Street Address|
|City|
|State|
|ZIP Code|

如果我正在更改的只有一个字段,则此方案有效,例如。 ZIP 代码。

但是对于我想更改多个项目的场景,我该如何编写呢? 例如,更改城市和 State 或城市、State 和 ZIP 代码。

您需要场景大纲,而不是单独的场景。 这是创建场景大纲的方式:

Feature: Make a change to one or more of a user's address fields.

  Scenario Outline: Changes to a user's address in the system are saved to the database
    Given I'm logged into the system.
    When I make a change to <Field>.
    And Click Save.
    Then Changes are saved into database.

    Examples: 
      |Field|
      |Street Address|
      |City|
      |State|
      |ZIP Code|

场景大纲很容易通过关键词Scenario Outline来识别。 场景大纲的目的是循环遍历具有不同输入参数的测试用例。 这些输入参数包含在标有“示例”的部分下方的 data.table 中。 最后,表 header 中的 label 必须匹配一个或多个测试步骤中使用的参数,括在 angular 括号<>中。

有两种方法可以做到这一点

1.简单的场景大纲 (字段是水平的)

   Scenario Outline:  login registration   
      When I submit login details <Username> <Password> <UsernameDesc>        
       Examples:
        |Username|Password|UsernameDesc|
        |"uname1" |"password"|"testuserName1"|
        |"uname2" |"password"|"testuserName2"|

上述方法的步骤 def 是

     @When("I submit login details {string} {string} {string}")
    public void register(String usrname, String pwd, String desc){
       // use usrname, pwd, desc as desired

        }

2. 使用 data.table (@DatatableType) (字段是垂直的)

  Scenario:  login registration using cucumber data table
      When I submit login details
        |Username     |"username"|"username1"|"username2"|
        |Password     |"password"|"password1"|"password2"|
        |UsernameDesc |"testDesc"|"testDesc1"| "password2"|

上述方法的步骤定义

 @DataTableType
        public loginDetails logindetails(Map<String, String> entry) {
        return new loginDetails(entry.get("Username"),entry.get("Password"),entry.get("UsernameDesc"));
        } 
     
        @When ("^I submit login details$")
     public void submitLoginDetails(DataTable dataTable ){
        List<loginDetails> list = dataTable.transpose().asList(loginDetails.class);
        list.stream().forEach(System.out::println);
        for (loginDetails l : list) {
            System.out.println("username::"+l.getUserName());
            System.out.println("pwd::"+l.getPassword());
            System.out.println("usernamedesc::"+l.getUsernameDesc());
        }
    }

上面方法中使用的pojo class是这样的

public class loginDetails {
    
    private String Username;
    private String Password;
    private String UsernameDesc;
    
    public  loginDetails(String uname, String pwd, String udesc){
        this.Username=uname;
        this.Password = pwd;
        this.UsernameDesc = udesc;
    }
    public String getUserName() {
        return Username;
    }
    public String getPassword() {
        return Password;
    }
    public String getUsernameDesc() {
        return UsernameDesc;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM