Запись переменных с использованием Beanshell Sampler в JMeter в файл txt / csv - PullRequest
0 голосов
/ 18 октября 2019

Мое требование состоит в том, чтобы записать два значения с использованием 2 пробоотборников Beanshell, используемых на разных этапах, в одной строке и разделенных запятой. Но вторая переменная записана в новой строке

У меня есть два разных пробоотборника Beanshellна разных шагах. Первая записывает переменную 1 и записывает ее в файл. Вторая записывает переменную 2 и записывает ее в файл

Первый код:

String path= FileServer.getFileServer().getBaseDir() + "//P_IssuePolicy.txt";
SubmissionNum= vars.get("CP_SubmissionNumber");
EMailID= vars.get("P_emailID");
f = new FileOutputStream(path, true);
p = new PrintStream(f);
this.interpreter.setOut(p); 
p.println(EMailID+","+SubmissionNum);
f.close();

Второй код:

String path= FileServer.getFileServer().getBaseDir() + "//P_IssuePolicy.txt";
Policynumber= vars.get("CP_Policynumber");
f = new FileOutputStream(path, true); 
p = new PrintStream(f);
this.interpreter.setOut(p);
p.println(","+Policynumber);
f.close();

Ожидаемый результат:

 abc@email.com,12345601,12345602

Фактический результат:

 abc@email.com,12345601

 ,12345602

Ответы [ 3 ]

1 голос
/ 18 октября 2019

Вместо println, который добавляет новую строку, используйте print

 p.print(EMailID+","+SubmissionNum);
0 голосов
/ 21 октября 2019

Прежде всего, вам известны свойства Sample Variables и Flexible File Writer ? Если вы запускаете свой сценарий с несколькими виртуальными пользователями, скорее всего, вы будете страдать от формы условия гонки , когда несколько потоков будут одновременно записывать в один и тот же файл, что приведет к получению мусорных данных


Начиная с JMeter 3.1 рекомендуется использовать JSR223 Test Elements и язык Groovy для любых задач сценариев. Причины этого заключаются в следующем:

  1. Groovy совместим с современными версиями Java, а с Beanshell выВы застряли на уровне языка Java 5
  2. Groovy имеет гораздо лучшую производительность, чем Beanshell
  3. Groovy имеет множество улучшений , делающих вашу жизнь проще

Например, ваш код может быть сокращен до:

  • Первый:

    def file = new File(org.apache.jmeter.services.FileServer.getFileServer().getBaseDir() + "//P_IssuePolicy.txt")
    file << vars.get("P_emailID") << "," << vars.get("CP_SubmissionNumber") << ","
    
  • Второй:

    def file = new File(org.apache.jmeter.services.FileServer.getFileServer().getBaseDir() + "//P_IssuePolicy.txt")
    file << vars.get("CP_Policynumber") << System.getProperty("line.separator")
    
0 голосов
/ 18 октября 2019
String path= FileServer.getFileServer().getBaseDir() + "//P_IssuePolicy.txt";
SubmissionNum= vars.get("CP_SubmissionNumber");
EMailID= vars.get("P_emailID");
Policynumber= vars.get("CP_Policynumber");
f = new FileOutputStream(path, true);
p = new PrintStream(f);
this.interpreter.setOut(p);
p.println(EMailID+","+SubmissionNum+","+Policynumber);
f.close();

Дайте ему попытку выше.

...