多线程(并行测试用例)如何在Java(Selenium)设置中使用ApachePOI同时访问同一excel文件?
我有一些依赖于数据的测试场景,其中我有一个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:创建工作簿对象,如下所示多线程(并行测试用例)如何在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:保存包时出错:
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);