我最初的要求是,我有两张excel表
第1张包含FirstName,姓氏 第二张包含公司,电子邮件
我必须将两张纸张数据合并并传递给测试,并且在测试中应该采用
First Set .... FirstName,LastName,Company,Email。 第二集.. FirstName,LastName,Company,Email ..
直到excel表中存在数据.. 这里的问题是在传递参数时我必须传递四个参数,但在excel表2中参数......
需要帮助......
=============================================== ================================================== ==
public Object [] [] dataDetails()抛出BiffException,IOException {
String pathofExcel="D:\\Test-Excel3.xls";
String sheetName="test";
Generics gen=new Generics();
String employeeDetails[][]=gen.excelRead(pathofExcel, sheetName);
return employeeDetails;
}
public Object[][] dataDetails2() throws BiffException, IOException{
String pathofExcel="D:\\Test-Excel4.xls";
String sheetName="test";
Generics gen=new Generics();
String employeeDetailss[][]=gen.excelRead(pathofExcel, sheetName);
return employeeDetailss;
}
@DataProvider(name="enterformDetails")
public Object[][] dp() throws BiffException, IOException {
List<Object[]> result = Lists.newArrayList();
result.addAll(Arrays.asList(dataDetails()));
result.addAll(Arrays.asList(dataDetails2()));
return result.toArray(new Object[result.size()][]);
}
@Test(dataProvider="enterformDetails")
public void employDetails(String FName,String LastName,String Comp,String Email){
EmpDetails emp=new EmpDetails();
emp.enterDetails(FName, LastName, Comp,Email);
}
先谢谢..
答案 0 :(得分:0)
我认为你需要的是一个Dataprovider,它会读取这两个文件,并返回一个迭代器,结合两个文件的值。
@DataProvider
public CSVIterator1 genericDataProvider(){
File input1 = new File("c:\\file1.csv");
File input2 = new File("c:\\file2.csv");
return new CSVIterator1(input1,input2);
}
@Test(dataProvider ="genericDataProvider")
public void test1(String s1 , String s2, String i1, String i2){
}
您可以根据我们的需要实现Iterator接口。这是一个CSV迭代器。你可以实现一个excel迭代器。你只是明白了。
public class CSVIterator1 implements Iterator{
String line1;
String line2;
BufferedReader rdr1;
BufferedReader rdr2;
CSVIterator1(File input1 ,File input2){
try {
rdr1 = new BufferedReader(new FileReader(input1));
rdr2 =new BufferedReader(new FileReader(input2));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public boolean hasNext() {
try {
if((line1 = rdr1.readLine()) != null && (line2 = rdr2.readLine()) != null){
return true;
}
// TODO Auto-generated method stub
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
@Override
public void remove() {
// TODO Auto-generated method stub
}
@Override
public Object next() {
if(line1 !=null && line2 !=null){
return genParams(line1,line2);
}
// TODO Auto-generated method stub
return null;
}
public Object[] genParams(String line1 , String line2){
String combined = line1+","+line2;
StringTokenizer st = new StringTokenizer(combined, ",");
Object[] result = new Object[st.countTokens()];
int i=0;
while(st.hasMoreTokens()){
result[i] = st.nextElement();
i++;
}
return result;
}
}
答案 1 :(得分:0)
我建议,从xls文件创建一个Map,并根据输入使用此map来使用map键获取数据。它将帮助您,因为只有在您创建地图并在脚本中的任何位置使用此地图之前。如果你这样做,那么你就不必在脚本的任何地方使用@DataProvider。
步骤:从xls创建地图 使用键读取地图值 作为testdata传递给testcase。