csv数据通过测试方法
Csv data pass Test method
我尝试将 CSV 数据传递给我的测试方法。
这是我的代码:CSV 文件有 3 列:
- 测试人数
- 电子邮件
- 名字
UserData.java
public class UserData {
private String TestNumber;
private String email;
private String FirstName;
//Getters and Setters
}
数据提供者class:
@DataProvider(name = "customer" )
public static Object[][] getFilterValues() throws InvalidFormatException, IOException, InterruptedException, CsvException {
CSVReader reader= new CSVReaderBuilder(new FileReader("/home/dell/scripts/TEST/Automation - CSV/src/TestData/User.csv")).
withSkipLines(1).
build();
List<UserData> csv_objectList=reader.readAll().stream().map(data-> {
UserData csvObject= new UserData();
csvObject.setTestNumber(data[0]);
csvObject.setEmail(data[1]);
csvObject.setFirstName(data[2]);
return csvObject;
}).collect(Collectors.toList());
UserData[] cellData = csv_objectList.toArray(new UserData[csv_objectList.size()]);
Object[][] data = new Object[cellData.length][3];
for(int i = 0; i <cellData.length; i++) {
data[i][0] = cellData[i].getTestNumber();
data[i][1] = cellData[i].getEmail();
data[i][2] = cellData[i].getFirstName();
}
return data;
}
测试方法:
public class UserCreate extends Base {
@Test( dataProvider = "customer", dataProviderClass = GetUserData.class)
public void UserCreate (UserData data) throws FileNotFoundException {
System.out.println(data.getTestNumber());
}
}
我试过这种方式来传递数据。但是我得到这个错误:
[public void api.wapp.registation.UserCreate.UserCreate(utilities.UserData) throws java.io.FileNotFoundException] has no parameters defined but was found to be using a data provider (either explicitly specified or inherited from class level annotation).
Data provider mismatch
Method: UserCreate([Parameter{index=0, type=utilities.UserData, declaredAnnotations=[]}])
Arguments: [(utilities.UserData) utilities.UserData@301ec38b,null,null]
您的测试方法需要 UserData
作为参数。但是您的数据提供者正在提供 String, String, String
。在数据提供者方法中,您将 UserData
的值传递到对象数组,而不是传递 UserData
对象本身。
在数据提供者方法中,您需要做的是,将每个 UserData
对象放在一个 Object[]
中,然后组合成一个 Object[][]
.
return csv_objectList.stream()
.map(user -> new Object[]{ user }) // this array represents a single test case
.toArray(Object[][]::new);
我尝试将 CSV 数据传递给我的测试方法。
这是我的代码:CSV 文件有 3 列:
- 测试人数
- 电子邮件
- 名字
UserData.java
public class UserData {
private String TestNumber;
private String email;
private String FirstName;
//Getters and Setters
}
数据提供者class:
@DataProvider(name = "customer" )
public static Object[][] getFilterValues() throws InvalidFormatException, IOException, InterruptedException, CsvException {
CSVReader reader= new CSVReaderBuilder(new FileReader("/home/dell/scripts/TEST/Automation - CSV/src/TestData/User.csv")).
withSkipLines(1).
build();
List<UserData> csv_objectList=reader.readAll().stream().map(data-> {
UserData csvObject= new UserData();
csvObject.setTestNumber(data[0]);
csvObject.setEmail(data[1]);
csvObject.setFirstName(data[2]);
return csvObject;
}).collect(Collectors.toList());
UserData[] cellData = csv_objectList.toArray(new UserData[csv_objectList.size()]);
Object[][] data = new Object[cellData.length][3];
for(int i = 0; i <cellData.length; i++) {
data[i][0] = cellData[i].getTestNumber();
data[i][1] = cellData[i].getEmail();
data[i][2] = cellData[i].getFirstName();
}
return data;
}
测试方法:
public class UserCreate extends Base {
@Test( dataProvider = "customer", dataProviderClass = GetUserData.class)
public void UserCreate (UserData data) throws FileNotFoundException {
System.out.println(data.getTestNumber());
}
}
我试过这种方式来传递数据。但是我得到这个错误:
[public void api.wapp.registation.UserCreate.UserCreate(utilities.UserData) throws java.io.FileNotFoundException] has no parameters defined but was found to be using a data provider (either explicitly specified or inherited from class level annotation).
Data provider mismatch
Method: UserCreate([Parameter{index=0, type=utilities.UserData, declaredAnnotations=[]}])
Arguments: [(utilities.UserData) utilities.UserData@301ec38b,null,null]
您的测试方法需要 UserData
作为参数。但是您的数据提供者正在提供 String, String, String
。在数据提供者方法中,您将 UserData
的值传递到对象数组,而不是传递 UserData
对象本身。
在数据提供者方法中,您需要做的是,将每个 UserData
对象放在一个 Object[]
中,然后组合成一个 Object[][]
.
return csv_objectList.stream()
.map(user -> new Object[]{ user }) // this array represents a single test case
.toArray(Object[][]::new);