问题描述
我正在使用 Hash Map 读取 get excel 数据并在方法中使用它们来执行 If...else 验证。
我正在使用类文件来初始化哈希映射以读取数据。如下图
public class SampleDataset {
public static HashMap<String,ArrayList<String>> main() throws IOException {
final String DatasetSheet = "src/test/resources/SampleDataSet.xlsx";
final String DatasetTab = "TestCase";
Object[][] ab = DataLoader.ReadMyExcelData(DatasetSheet,DatasetTab);
int rowcount = DataLoader.myrowCount(DatasetSheet,DatasetTab);
int colcount = DataLoader.mycolCount(DatasetSheet,DatasetTab);
HashMap<String,ArrayList<String>> map = new HashMap<String,ArrayList<String>>();
// i = 2 to avoid column names
for (int i = 2; i < rowcount;) {
ArrayList<String> mycolvalueslist = new ArrayList<String>();
for (int j = 0; j < colcount;) {
mycolvalueslist.add(ab[i][j].toString());
j++;
}
map.put(ab[i][0].toString(),mycolvalueslist);
i++;
}
return map;
}
我在我的测试用例文件中使用了这张地图,如下所示
@Test //Testcase
public void testThis() throws Exception {
try {
launchMainApplication();
TestMain MainPage = new TestMain(tool,test,user,application);
HashMap<String,ArrayList<String>> win = SampleDataset.main();
SortedSet<String> keys = new TreeSet<>(win.keySet());
for (String i : keys) {
System.out.println("########### Test = " + win.get(i).get(0) + " ###########");
MainPage.step01(win.get(i).get(1));
MainPage.step02(win.get(i).get(2));
}
test.setResult("pass");
} catch (AlreadyRunException e) {
} catch (Exception e) {
verificationErrors.append(e.getMessage());
throw e;
}
}
@Override
@After
public void tearDown() throws Exception {
super.tearDown();
}
我想通过为每行测试用例创建新列作为状态,将通过上述 FOR-LOOP 启动的所有测试用例的状态写为 PASS 或 FAIL
我的excel表如下图
解决方法
创建全局列表。在每个测试用例之后在列表中添加状态结果。
完成所有测试用例后,遍历列表并更新您的excell文件。就这样。
public static void main(String[] args) throws EncryptedDocumentException,IOException {
// Step 1: load your excel file as a Workbook
String excelFilePath = "D:\\Desktop\\testExcel.xlsx";
Workbook workbook = WorkbookFactory.create(new FileInputStream(excelFilePath));
// Step 2: modify your Workbook as you prefer
Iterator<Sheet> sheetIterator = workbook.sheetIterator(); // Getting an iterator for all the sheets
while (sheetIterator.hasNext()) {
Iterator<Row> rowIterator = sheetIterator.next().rowIterator(); // Getting an iterator for all the rows (of current sheet)
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
// Put here your internal logic to understand if the row needs some changes!
int cellsn = row.getLastCellNum();
row.getCell(cellsn).setCellValue("String that you gat from List = list.get(rownumber)")
}
}
您可能需要 Apache POI。
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.00</version>
</dependency>