使用 Hash Map 和 Selenium 编写测试用例的状态

问题描述

我正在使用 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表如下图

SampleDataSet.xlsx

解决方法

创建全局列表。在每个测试用例之后在列表中添加状态结果。

完成所有测试用例后,遍历列表并更新您的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>