多个线程(并行测试用例)如何使用Java(Selenium)设置中的Apache POI同时访问同一个excel文件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多个线程(并行测试用例)如何使用Java(Selenium)设置中的Apache POI同时访问同一个excel文件?相关的知识,希望对你有一定的参考价值。
我有几个数据相关的测试场景,我有一个Excel文件作为数据源,需要同时从该文件执行多个测试用例。
我已经准备好了一个解决方案,我可以一次运行1个测试。但是当我尝试运行多个测试时,Apache就会抛出错误。我认为那是因为多个线程试图同时访问相同的资源。如何克服这种情况?我的解决方案使用Java中的Apache-POI库进行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对象,如下所示
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正在写回文件。您可以尝试使用different create
call以只读模式打开它:
wb = WorkbookFactory.create(input_file, null, true);
这将以只读模式打开文件,并应跳过write-on-close行为。
如果您不想深入POI内部,只需在static
初始化块中的单个类中加载一次。
如果您的代码是真正的只读,那么应该没有任何缺点,因为static
块在类初始化期间只会被执行一次。
以上是关于多个线程(并行测试用例)如何使用Java(Selenium)设置中的Apache POI同时访问同一个excel文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在机器人框架中并行运行多个测试套件上的多个测试用例 | Python