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

多线程(并行测试用例)如何在Java(Selenium)设置中使用ApachePOI同时访问同一excel文件?,java,excel,multithreading,selenium,apache-poi,Java,Excel,Multithreading,Selenium,Apache Poi,我有一些依赖于数据的测试场景,其中我有一个Excel文件作为数据源,并且需要从该文件同时执行多个测试用例 我已经准备好了一个解决方案,我可以一次运行一个测试。但当我尝试运行多个测试时,Apache抛出了错误。我认为这是因为多个线程试图同时访问同一资源。如何克服这种情况?我的解决方案使用Java中的ApachePOI库进行Selenium测试 编辑: 错误消息:org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException:保存包时出错:

我有一些依赖于数据的测试场景,其中我有一个Excel文件作为数据源,并且需要从该文件同时执行多个测试用例

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

编辑:

错误消息:org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException:保存包时出错:无法将部件/xl/media/image13.png保存到marshaller 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:关闭工作簿对象并继续测试(现在有所有相关数据)


关闭文件时,POI似乎正在将其写回文件。您可以尝试以只读模式打开它,方法是:


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

如果不想深入研究POI内部,只需在
静态
初始化块的单例类中加载一次即可


如果您的代码是真正的只读代码,那么应该不会有任何负面影响,因为在类初始化期间,
静态
块只会执行一次。

我对POI的了解不够,不知道为什么它不能同时读取同一个文件。但是你可以共享“阅读器”,或者只是临时复制文件来读取。有什么错误吗?你的代码是什么样子的?你在用什么操作系统?您的问题中没有足够的信息来提供合理的答案。@Brian根据要求添加了评论。请再看一看
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();

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