Список файлов из папки и подпапок рекурсивно в JMeter - PullRequest
0 голосов
/ 07 ноября 2018

Я использую BeanShell Sampler в JMeter, чтобы вывести список всех файлов из папки. Он перечисляет файлы только из каталога и не может сделать то же самое в подкаталогах

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());
}

Ответы [ 3 ]

0 голосов
/ 07 ноября 2018

Перейдите к использованию JSR223 Sampler со следующим кодом, используя 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());
}
0 голосов
/ 07 ноября 2018

Начиная с JMeter 3.1 рекомендуется использовать JSR223 Test Elements и язык Groovy для любых форм сценариев, в основном потому, что производительность Groovy намного лучше по сравнению с другими вариантами сценариев

Groovy, в свою очередь, предоставляет File.eachFileRecurse () функцию, которая именно то, что вы ищете.

Пример кода:

def index = 1

new File('c:/apps/jmeter/bin').eachFileRecurse(groovy.io.FileType.FILES) {
    vars.put('file_' + index, it.getAbsolutePath())
    index++
}
0 голосов
/ 07 ноября 2018

Вам нужно будет сделать это рекурсивно. Вы можете перечислить все каталоги так же, как вы сделали для файлов, а затем вызвать рекурсивную функцию . Когда вы затем вызываете функцию с вашим исходным файлом, она пересекает древовидную структуру и выдаст вам все файлы в списке. Для добавления в список используйте addAll.

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