EDIT1:我有一个ExcelUtility.java类来从中获取单元格数据并将其传递给我的测试类中的测试方法。
我正在阅读1个excel文件。 excel文件有3个工作表。 每个工作表里面都有一个独特的工作台。 我有1个测试类。 测试类有3种测试方法。 测试类包含3个dataProviders。 所有dataProviders在工作表名称和工作表名称上都有所不同。
测试类中的测试以下列方式编写:
@Test(priority = 0, dataProvider = "dp1")
public void test01(String...strings){
}
@Test(priority = 1, dataProvider = "dp2")
public void test02(String...strings){
}
@Test(priority = 2, dataProvider = "dp3")
public void test03(String...strings){
}
我有以下java类使用apache poi jars从XLSX文件中读取:
public class ExcelUtility {
private static XSSFWorkbook ExcelWBook;
private static XSSFSheet ExcelWSheet;
/*
* Set the File path, open Excel file
* @params - Excel Path and Sheet Name
*/
public static void setExcelFile(String path, String sheetName) throws Exception {
try {
// Open the Excel file
FileInputStream ExcelFile = new FileInputStream(path);
// Access the excel data sheet
ExcelWBook = new XSSFWorkbook(ExcelFile);
ExcelWSheet = ExcelWBook.getSheet(sheetName);
} catch (Exception e) {
throw (e);
}
}
public static String[][] getTestData(String tableName) {
String[][] testData = null;
try {
// Handle numbers and strings
DataFormatter formatter = new DataFormatter();
XSSFCell[] boundaryCells = findCells(tableName);
XSSFCell startCell = boundaryCells[0];
XSSFCell endCell = boundaryCells[1];
int startRow = startCell.getRowIndex() + 1;
int endRow = endCell.getRowIndex() - 1;
int startCol = startCell.getColumnIndex() + 1;
int endCol = endCell.getColumnIndex() - 1;
testData = new String[endRow - startRow + 1][endCol - startCol + 1];
for (int i=startRow; i<endRow+1; i++) {
for (int j=startCol; j<endCol+1; j++) {
// testData[i-startRow][j-startCol] = ExcelWSheet.getRow(i).getCell(j).getStringCellValue();
Cell cell = ExcelWSheet.getRow(i).getCell(j);
testData[i - startRow][j - startCol] = formatter.formatCellValue(cell);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return testData;
}
public static XSSFCell[] findCells(String tableName) {
DataFormatter formatter = new DataFormatter();
String pos = "begin";
XSSFCell[] cells = new XSSFCell[2];
for (Row row : ExcelWSheet) {
for (Cell cell : row) {
// if (tableName.equals(cell.getStringCellValue())) {
if (tableName.equals(formatter.formatCellValue(cell))) {
if (pos.equalsIgnoreCase("begin")) {
cells[0] = (XSSFCell) cell;
pos = "end";
} else {
cells[1] = (XSSFCell) cell;
}
}
}
}
return cells;
}
}
为了从excel文件中读取,我按以下方式组织了测试方法:
@DataProvider(name = "dp1")
public Object[][] dp1() throws IOException {
Object[][] testData = new Object[0][];
try {
ExcelUtility.setExcelFile(Constants.File_Path+Constants.File_Name, "Page1");
testData = ExcelUtility.getTestData("P1");
} catch (Exception e) {
e.printStackTrace();
}
return testData;
}
@DataProvider(name = "dp2")
public Object[][] dp2() throws IOException {
Object[][] testData = new Object[0][];
try {
ExcelUtility.setExcelFile(Constants.File_Path+Constants.File_Name, "Page2");
testData = ExcelUtility.getTestData("P2");
} catch (Exception e) {
e.printStackTrace();
}
return testData;
}
@DataProvider(name = "dp3")
public Object[][] dp3() throws IOException {
Object[][] testData = new Object[0][];
try {
ExcelUtility.setExcelFile(Constants.File_Path+Constants.File_Name, "Page3");
testData = ExcelUtility.getTestData("P3");
} catch (Exception e) {
e.printStackTrace();
}
return testData;
}
@Test(priority = 0, dataProvider = "dp1")
public void test01(String...strings){
//read data from excel and pass the value to the strings added as arguments in the method above
}
@Test(priority = 1, dataProvider = "dp2")
public void test02(String...strings){
}
@Test(priority = 2, dataProvider = "dp3")
public void test03(String...strings){
}
我想做的是以下内容:
从sheet1读取第一行数据,将其传递给test1,继续test2
从sheet2读取第一行数据,将其传递给test2,继续测试3
从sheet3读取第一行数据,将其传递给test3,继续test1
从表1中读取第二行数据,将其传递给test1,继续测试2
依此类推,取决于Excel工作表中的行数。
会发生什么:
执行第一个测试,读取工作表1,第1行 执行第一个测试,读取工作表1,第2行 执行第二次测试,读取工作表2,第1行 执行第二个测试,读取工作表2,第2行。
所有测试都失败了,因为它们彼此可靠,这就是我设置执行优先级的原因。
我应该更改Test类中的某些内容,还是应该更改ExcelUtility.java类中的某些内容?
提前谢谢!