多个线程(并行测试用例)如何使用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

多线程并行与分布式执行

我们可以在Jmeter的单个测试计划中并行运行两个线程组吗?

Jmeter--多个线程组顺序执行和并行执行

如何在负载测试中将一个数据源用于多个测试用例

如何确定将大量文件复制到外部共享文件夹的理想并行Java线程数?