![](/img/trans.png)
[英]Can I use Cucumber to test an application that uses more than one language?
[英]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.