2017-02-03 15 views
0

У меня есть некоторые тесты производительности в jMeter и в одном HTTP-запросе у меня есть BeanShell PostProcessor. Он должен написать адрес электронной почты пользователя в верхней части файла CSV (новейший сверху). Очень важно, чтобы этот файл был отсортирован.jMeter BeanShell postprocessor synchronization

import org.apache.commons.io.FilenameUtils; 
import org.apache.jmeter.services.FileServer; 
import java.text.*; 
import java.io.*; 
import java.util.*; 

try { 
    String email = vars.get("emailPrefix") + "+" + vars.get("environment") + "-jm-" + vars.get("randomEmailNumber")+"@someEmail.com"; 
    log.info(email); 
    String separator = System.getProperty("file.separator"); 
    File mFile = new File(FileServer.getFileServer().getBaseDir() + separator + "investors_" + vars.get("environment") + ".csv"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(mFile), "UTF8")); 
    String result = ""; 
    String line = ""; 
    while((line = br.readLine()) != null){ 
     result = result + "\n" + line; 
    } 
    result = email + "," + result; 
    FileOutputStream fos = new FileOutputStream(mFile); 
    fos.write(result.getBytes()); 
    fos.flush(); 
} catch(Exception e) { 
    System.out.println("Exception in 2 1 4 /getContactInformation::Email writer:" + e.toString()); 
    throw e; 
} 

Но когда я пытаюсь запустить т.е. 100 потоков одновременно, иногда бывает, что не все письма регистрируются, или CSV файл заканчивается пустой (содержание удаляется в середине пробега).

Моя проблема может быть решена путем чтения этого CSV-файла с конца, но jMeter не может этого сделать.

Есть ли простой способ, как синхронизировать этот постпроцессор или как его переписать?

ответ

1

Ваш тест кажется плохо спроектированным, одновременная запись в один и тот же файл не рекомендуется, вы должны иметь реализацию ReadWriteLock или использовать Critical Section Controller JMeter, чтобы гарантировать, что только один поток пишет что-то в файл за раз.

Еще одна опция: запустить логику создания файла CSV до, вы попытаетесь прочитать строки.

Третье (и IMHO) лучшее решение избавляет от файла, записывает все в переменные или свойства JMeter и считывает значения из памяти при необходимости. Я бы также рекомендовал рассмотреть возможность перехода на JSR223 PostProcessor и Groovy язык по вашему сценарию. Groovy обеспечит гораздо лучшую производительность, чем вы можете достичь с помощью Beanshell, см. Статью Groovy Is the New Black.

+0

Я не могу сохранить его в памяти, потому что я использую этот CSV-файл в других тестах для входа в приложение. Я попробую контроллер критической секции. И, возможно, я могу переписать его и в Groovy. – medy75

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

  • Нет связанных вопросов^_^