繁体   English   中英

如何在Java(Selenium)设置中使用Apache POI多个线程(并行测试用例)同时访问相同的excel文件?

[英]How can multiple threads (parallel testcases) access same excel file at same time using Apache POI in Java (Selenium) setup?

我有几个与数据相关的测试方案,其中有一个Excel文件作为数据源,并且需要同时从该文件执行多个测试用例。

我已经准备了一个解决方案,可以一次运行1个测试。 但是当我尝试运行多个测试时,Apache抛出错误。 我认为这是因为多个线程试图同时访问同一资源。 如何克服这种情况? 我的解决方案使用Java中的Apache-POI库进行Selenium测试。

编辑:

错误消息: org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException:无法保存:保存程序包时发生错误:/xl/media/image13.png部分无法通过编组org.apache保存在流中。 poi.openxml4j.opc.internal.marshallers.DefaultMarshaller@329cf141

作业系统: Windows 10,x64

代码: 步骤1:创建工作簿对象,如下所示

Workbook wb = null;
        try {
            wb = WorkbookFactory.create(input_file);
        } catch (java.io.FileNotFoundException e) {
            Results.fail("Excel file not found at this location: " + Excel_File_Name_And_Path);
        }

步骤2:遍历所有行并将相关信息保存到各种Java变量中

步骤3:关闭Workbook对象并进行测试(现在具有所有相关数据)

ExcelConfiguration.closeworkbook(wb);

    public static void closeworkbook(Workbook wb) {

            try {
                wb.close();

                System.out.println("workbook closed");

            } catch (FileNotFoundException e) {

                e.printStackTrace();

            } catch (IOException ioexcep) {

                ioexcep.printStackTrace();

            }
        }

当您关闭文件时,POI似乎正在写回该文件。 您可以尝试通过其他create调用以只读模式打开它:

wb = WorkbookFactory.create(input_file, null, true);

这将以只读模式打开文件,并且应跳过“关闭时写入”行为。

如果您不想深入研究POI内部,只需在static初始化块的singleton类中将其加载一次即可。

如果您的代码是真正的只读代码,那么应该没有不利的一面,因为在类初始化期间, static块只会执行一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM