Добрый день, коллеги!
Столкнулся с проблемой, и не могу никак решить. Форум прочесал, похожих вопросов много, но не нашёл решения.Суть проблемы:
Необходимо в BeanShell Post Processor добавить относительный путь к файлу, куда будет положена data.=============================================================================================
Вот код в самом пост-процессоре:
Entrylogin = vars.get("Entrylogin");Entrypass = vars.get("Entrypass");f = new FileOutputStream("${project_folder}/app_EntryData.csv", false); // Вот на этой строчке вылезает ошибка.p = new PrintStream(f);this.interpreter.setOut(p);print(Entrylogin + "," + Entrypass);f.close();Ошибка :ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method: eval Sourced file: inline evaluation of: ``Entrylogin = vars.get("Entrylogin"); Entrypass = vars.get("Entrypass"); f = new . . . '' Token Parsing Error: Lexical error at line 5, column 13. Encountered: "J" (74), after : "\"C:\\"WARN o.a.j.e.BeanShellPostProcessor: Problem in BeanShell script: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: ``Entrylogin = vars.get("Entrylogin"); Entrypass = vars.get("Entrypass"); f = new . . . '' Token Parsing Error: Lexical error at line 5, column 13. Encountered: "J" (74), after : "\"C:\\"=============================================================================================Я создал переменную в User Defined Variables:Вот что в ней лежитесли наступитьв Debug Sampler:Я пробовал делать .replace (Например .replace('\\', '/'), вообще тучу вариантов перебрал, и с ковычками и со всем чем можно) , чет не помогает, будто дело до .replace и не доходит, ловит ошибку от сслыки на переменную и всё тут.=============================================================================================
Если у Вас есть идеи, подскажите пожалуйста, заранее благодарен!
P.S.: Если это легче реализовать через JSR223 PostProcessor + groovy, буду также благодарен, если подскажите как это сделать.
==================================
В общем решил я свою проблему, да сразу тремя способами)
Напишу что сделал на случай, если кто-то столкнётся с подобной.
От ссылки на переменную в виде ${variable_name} необходимо отказаться, если вы используете BeanShell и JSR223 сэмплеры/постпроцессоры/препроцессоры.
Необходимо объявить новую переменную и присвоить ей значение той, которая Вам нужна, в виде:
Для BeanShell элементов:
variable_new = vars.get ("variable_name"); - Без ссылки в формате ${...}, и в обычных ковычках работает замечательно.
Для JSR223 + groovy:
def variable_new = vars.get ("variable_name"); - различия минимальны)
Вот два варианта реализации в BeanShell:
Вариант 1: Необходимо обратиться к папке где лежит файл внутри кода.
path = FileServer.getFileServer().getBaseDir(); // Это позволит положить в переменную путь и в дальнейшем использовать его.
Вариант 2: Объявить переменную и взять значение из другой (в моем случае объявленной в User Def. Variables).
path = vars.get ("project_folder"); // Далее можно использовать переменную path - в ней будет лежать путь, до вашего проекта. (При условии, что он лежит в переменной project_folder)
Вариант реализации для JSR223 + groovy:
Всё очень просто, перед переменной, которой мы хотим присвоить путь до репозитория, мы пишем def
def path = FileServer.getFileServer().getBaseDir();
def path = vars.get ("project_folder");
Также рекомендую для большей автоматизации добавить системный разделитель (forward slash) / или (back slash) \ в переменную, и использовать её, а не символы / и \. Это необходимо для кроссплатформенности. Чтобы ваш сценарий можно было запустить и на macOS и на Linux и на Windows, т.к. системные разделители (File.separator) у них разные.
s = File.separator; //Для BeanShell и def s= File.separator; // Для JSR223+groovy.
==============================================================================
Далее напишу код, для записи в файл через JSR223+groovy, он немного отличается от моей реализации в BeanShell, если вдруг кому-то будет нужна запись в файл именно через JSR223+groovy.