Somtime проблемы при чтении конфигурации данных CSV из Jmeter - PullRequest
0 голосов
/ 18 января 2019

У меня есть проблема при создании сценария производительности, связанная с чтением данных из конфигурации данных csv.

Мой скрипт имеет следующую структуру:

  • setup Thread
  • Create csv Thread. After view dashboard, using Json extractor to get list of data and put it to csv file

Создать CSV-файл - После этой темы у меня будет много базы CSV-файлов по номеру центра. Например: 4 файла с разными именами

String[] attempt = (vars.get("ListAttemptId_ALL")).split(",");
int length = attempt.length;
String dir = props.get("UserFilePath").toString();
String center = vars.get("Center");

File csvFile = new File(dir, center + ".csv");

if(!csvFile.exists()){
    FileWriter fstream = new FileWriter(csvFile);
    BufferedWriter out = new BufferedWriter(fstream);

    for(int i = 1; i <= length; i++){
            out.write(attempt[i-1]);
            out.write(System.getProperty("line.separator"));
    }
    out.close();
    fstream.close();
}

Следующий поток получает имя файла и использует CSV-файл для зацикливания вся линия

String center = vars.get("Center"); 
String fileName = center + ".csv";
props.put("path_${__threadNum}", String.valueOf(fileName));

Поскольку у меня много потоков, будет запускаться один и тот же файл, поэтому я просто проверяю __threadNum of, чтобы найти имя файла, который должен использовать этот поток. Я использую цикл контроллера, чтобы перейти через файл CSV, запуск до конца файла остановит поток. Вот внутри этой петли

CSV data Set config:  
Filename: ${__property(UserFilePath)}\\${__P(path_${__threadNum})}  

где $ {__ property (UserFilePath)} = путь к папке и $ {__ P (путь _ $ {__ threadNum})} - имя извлеченного файла csv

Моя проблема в том, что этот код нестабилен, иногда потоки могут нормально читать файл, иногда показывается ошибка, что файл не существует (на самом деле он существует), поэтому трудно отследить, откуда возникла проблема. Кто-нибудь может предложить решение моей проблемы? Или предложить какую-либо идею лучше, чем мое решение, чтобы прочитать файл CSV в группе потоков?

Ответы [ 2 ]

0 голосов
/ 21 января 2019
  1. Это утверждение может быть проблематичным:

    props.put("path_${__threadNum}", String.valueOf(fileName));
    

    согласно Документация по пробоотборнику JSR223

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

    props.get("START.HMS");
    
    props.put("PROP1","1234"); 
    

    Поэтому я бы рекомендовал заменить ${__threadNum} на ctx.getThreadNum(), где ctx - сокращение для JMeterContext class

  2. Согласно Порядок исполнения Глава JMeter Документация:

    0. Configuration elements
    1. Pre-Processors
    2. Timers
    3. Sampler
    4. Post-Processors (unless SampleResult is null)
    5. Assertions (unless SampleResult is null)
    6. Listeners (unless SampleResult is null)
    

    ваш Конфигурация набора данных CSV выполняется в первую очередь, перед любыми другими элементами тестирования сценариев. Поэтому времена, когда он «работает» IMO, вызваны «ложноположительной» ситуацией, поскольку свойства JMeter являются глобальными и «активными» во время работы JMeter (и базовой JVM). Когда вы в следующий раз запустите JMeter, свойства будут иметь нулевое значение, и ваша конфигурация набора данных CSV потерпит неудачу. Поэтому я ожидаю, что вы должны рассмотреть возможность использования функции __ CSVRead () , которая вычисляется во время выполнения именно там, где она вызывается. Ознакомьтесь с Apache JMeter Functions - вступительной статьей , чтобы узнать больше о JMeter Functions .

0 голосов
/ 19 января 2019

У меня есть ответ на этот вопрос:
- Я добавляю все данные AttemptId, Center в один файл csv и читаю от начала до конца. Использование If-контроллера для проверки данных перед действием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...