Группа потоков прерывания Jmeter не может получить доступ к предыдущему используемому файлу группы потоков

#multithreading #csv #jmeter

#многопоточность #csv #jmeter

Вопрос:

У меня есть план тестирования с несколькими группами потоков, которые записывают результаты сводного отчета в один и тот же csv-файл, размещенный на сервере, это отлично работает с использованием networkdrive (z:) и изменением jmeter.properties -> resultcollector.action_if_file_exists=APPEND.

Наконец, у меня есть группа потоков прерывания, которая вставляет данные csv на сервер sql (предыдущий используемый сетевой диск размещен на этом сервере в c:jmeterresults.csv ), а затем он удаляет CSV-файл. Дело в том, что когда я запускаю полный план тестирования, у меня всегда возникает эта ошибка: «Невозможно выполнить массовую загрузку, потому что файл «c:jmeterresults.csv » не удалось открыть. Код ошибки операционной системы 32″

Странно то, что если я запускаю только группу потоков удаления, она работает нормально, она выполняет массовую вставку в sql server, а затем удаляет de csv.

Я начал 2 дня назад с Jmeter, поэтому я уверен, что я что-то недопонимаю: S

Конфигурация сводного отчета

Запрос JDBC

Постпроцессор BeanShell, который удаляет csv

Структура плана тестирования

Ответ №1:

Это происходит потому, что сводный отчет (а также другие прослушиватели) сохраняют файлы открытыми до окончания теста, поэтому вам нужно каким-то образом вызвать это событие «закрыть».

Начиная с JMeter 3.1, предполагается, что вы используете тестовые элементы JSR223 и Groovy language для написания сценариев, поэтому замените этот постпроцессор Beanshell на постпроцессор JSR223 и используйте следующий код:

 import org.apache.jmeter.reporters.ResultCollector
import org.apache.jorphan.collections.SearchByClass


def engine = engine = ctx.getEngine()
def test = engine.getClass().getDeclaredField('test')

test.setAccessible(true)

def testPlanTree = test.get(engine)

SearchByClass<ResultCollector> listenerSearch = new SearchByClass<>(ResultCollector.class)
testPlanTree.traverse(listenerSearch)
Collection<ResultCollector> listeners = listenerSearch.getSearchResults()

listeners.each { listener ->
    def files = listener.files
    files.each { file ->
        file.value.pw.close()
    }
}

new File('z:/result.csv').delete()
  

Дополнительная информация о Groovy scripting в JMeter: Apache Groovy — почему и как вы должны его использовать