【问题标题】:Write Status of test case with Hash Map and Selenium使用 Hash Map 和 Selenium 编写测试用例的状态
【发布时间】:2021-02-03 06:43:35
【问题描述】:

我正在使用 Hash Map 读取获取 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 中

我的excel表格如下图

【问题讨论】:

  • 是更新excel文件有测试状态问题,还是不知道如何获取测试状态信息?
  • 我不知道如何在测试步骤中进行验证后获取状态列中的信息。
  • 在 for 循环中,我尝试使用嵌入式方法测试 Step01 和 Step02,例如此处“MainPage.step01(win.get(i).get(1));”方法是 step01(字符串参数)。我正在使用 if else 来验证,我可以在结果列下的 Excel 表中编写控制台消息,但是如何?
  • 所以你知道状态(如果你能写在consol里,你就知道了)和你的TC存储的行数,你只需要知道如何将它放在excell中,对吗?
  • 是的,如图所示,我希望我的控制台作为测试进度连续打印在该状态列上

标签: selenium junit hashmap status data-driven-tests


【解决方案1】:

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

在所有测试用例完成后,遍历列表并更新您的 Excel 文件。这样。

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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2015-03-07
    • 2012-08-21
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    相关资源
    最近更新 更多