在 JMeter 中递归地列出文件夹和子文件夹中的文件

List files from folder and subfolders recursively in JMeter

我在 JMeter 中使用 BeanShell Sampler 来列出文件夹中的所有文件。它仅列出目录中的文件,无法在子目录中执行相同的操作

File folder = new File("C:\_private\Files\input");

File[] files = folder.listFiles(new FileFilter() {
    public boolean accept(File file) {
        return file.isFile();
    }
});

for (int i=0; i < files.length; i++) {
    vars.put("file_" + i, files[i].getAbsolutePath());
}

你需要递归地做。您可以像列出文件一样列出所有目录,然后调用您创建的函数 recursively。然后当您使用初始文件调用该函数时,它将遍历树结构并为您提供列表中的所有文件。要添加到列表,请使用 addAll.

def listFiles(File folder) {
    ... // Recursive function
}

移动到使用 JSR223 Sampler with the following code using FileUtils:

import org.apache.commons.io.FileUtils;
List<File> files = FileUtils.listFiles(new File("C:\_private\Files\input"), null, true);

files.length 替换为 files.size() 的通知:

for (int i=0; i < files.size(); i++) {
    vars.put("file_" + i, files[i].getAbsolutePath());
}

Since JMeter 3.1 it's recommended to use JSR223 Test Elements and Groovy language for any form of scripting mainly because Groovy performance is much better 与其他脚本选项相比

Groovy 反过来提供 File.eachFileRecurse() 函数,这正是您要找的。

示例代码:

def index = 1

new File('c:/apps/jmeter/bin').eachFileRecurse(groovy.io.FileType.FILES) {
    vars.put('file_' + index, it.getAbsolutePath())
    index++
}