2012-04-17 1 views
1

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

я увидел, что this question очень похоже, и решение было использовать Raw Data Source препроцессор, который делает работу, но требует трудных изменений в файл в вопросе (добавление порции размеров перед каждой строкой), которая немного боль, когда файл имеет длину около 500 строк.

Есть ли способ установить набор данных CSV для перехода к следующей строке при чтении или использовать какой-либо пост или предварительный процессор, например beanshell, для этого? Я видел, что люди заявляют, что CSVRead могут это сделать, но это означает, что доступ к потоку, что было бы бесполезно для меня.

В качестве побочного примечания - в конечном итоге все, что я хочу сделать, - это получить случайную строку в файле, который передается в пробоотборник HTTP, если есть более простой или лучший способ сделать это. Я открыт для предложений.

+0

У вас есть соответствующее решение? –

ответ

2

Вы можете использовать этот код beanshell (= java) из BeanShell Sampler/BeanShell PostProcessor/BeanShell PreProcessor.

Следующий код будет читать все строки из файла, а затем выбрать одного случайные:

import java.text.*; 
import java.io.*; 
import java.util.*; 

String [] params = Parameters.split(","); 
String csvTest = params[0]; 
String csvDir = params[0]; 

ArrayList strList = new ArrayList();  

try { 
    File file = new File(System.getProperty("user.dir") + File.separator + csvDir + File.separator + csvTest); 

    if (!file.exists()) { 
     throw new Exception ("ERROR: file " + csvTest + " not found in " + csvDir + " directory."); 
    } 

    BufferedReader bufRdr = new BufferedReader(new FileReader(file)); 
    String line = null; 

    while((line = bufRdr.readLine()) != null) { 
     strList.add(line); 
    } 

    bufRdr.close();    

    Random rnd = new java.util.Random(); 
    vars.put("csvUrl",strList.get(rnd.nextInt(strList.size()))); 
} 
catch (Exception ex) { 
    IsSuccess = false; 
    log.error(ex.getMessage()); 
    System.err.println(ex.getMessage()); 
} 
catch (Throwable thex) { 
    System.err.println(thex.getMessage()); 
} 

Затем вы можете получить доступ к экстрагированной URL через переменный ($ {csvUrl} в данном примере).

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

Смежные вопросы