У меня есть некоторые тесты производительности в 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 не может этого сделать.
Есть ли простой способ, как синхронизировать этот постпроцессор или как его переписать?
Я не могу сохранить его в памяти, потому что я использую этот CSV-файл в других тестах для входа в приложение. Я попробую контроллер критической секции. И, возможно, я могу переписать его и в Groovy. – medy75