Как записать извлеченный результат в файл csv с помощью beanshell jmeter?

Я получаю ответ HTTP в формате JSON. Используя экстрактор JSON, я могу извлечь точное значение, но не могу сохранить его в файле CSV.

Ответ JSON

{
    "success": true,
    "vulns":     [
                {
            "TYPE": "vuln",
            "ID": "82003",
            "FQDN": "",
            "PORT": "",
            "Table": "67696056"
        },
                {
            "TYPE": "vuln",
            "ID": "90067",
            "FQDN": "",
            "PORT": "",
            "Table": "67696057"
        },
                {
            "TYPE": "vuln",
            "ID": "70000",
            "FQDN": "",
            "PORT": "",
            "Table": "67696058"
        },
                {
            "TYPE": "vuln",
            "ID": "70032",
            "FQDN": "",
            "PORT": "",
            "Table": "67696059"
        },
                {
            "TYPE": "vuln",
            "ID": "90042",
            "FQDN": "",
            "PORT": "",
            "Table": "67696060"
        }
    ]
}

Здесь я хочу, чтобы все идентификаторы были сохранены в файле .csv, чтобы использовать их в будущем. Я использовал следующий код в beanshell postprocessor

import java.io.FileWriter;

String str=vars.get("ID");

FileWriter writer = new FileWriter("C:\\Softwares\\Installed\\jmeter-3.0\\bin\\ID.csv"); 

writer.write(str);

writer.close();

Он записывает файл, но все идентификаторы записываются в одну строку, например

["82003","90067","70000","70032","90042"]

но они мне нужны как

82003
90067
70000
70032
90042

Отладка данных ответа постпроцессора

ID=["82003","90067","70000","70032","90042"]

могут ли некоторые предоставить мне решение или код BeanShell для того же?

спасибо виджай


person Vijay Rathod    schedule 03.01.2017    source источник
comment
добавьте шаблон / регулярное выражение, которое вы использовали для получения IDs.   -  person Naveen Kumar R B    schedule 03.01.2017


Ответы (3)


Я считаю, что вы можете убить двух зайцев одним выстрелом, используя JSR223 PostProcessor и язык Groovy вместо JSON Extractor и Beanshell.

  1. Добавьте JSR223 PostProcessor в качестве дочернего элемента запроса, который производит этот вывод JSON.
  2. Поместите следующий код в область «Скрипт» постпроцессора:

    import groovy.json.JsonSlurper
    import org.apache.commons.io.FileUtils
    
    def response = prev.getResponseDataAsString()
    
    JsonSlurper slurper = new JsonSlurper()
    def json = slurper.parseText(response)
    
    def ID = json.vulns.ID
    
    ID.each { FileUtils.writeStringToFile(new File("C:\\Softwares\\Installed\\jmeter-3.0\\bin\\ID.csv"), it + System.getProperty("line.separator"), true) }
    

Вы должны получить созданный файл в желаемом формате.

Использованная литература:

person Dmitri T    schedule 03.01.2017

попробуйте это, это сработало для меня

ID=vars.get("ID");

FileWriter writer = new FileWriter("C:\\Softwares\\Installed\\jmeter-3.0\\bin\\ID.csv",true); // true to append 

BufferedWriter out = new BufferedWriter(writer);
 out.write(ID);
 out.write(System.getProperty("line.separator"));
 out.close();

writer.close();
person Trupti Nasit    schedule 27.06.2017

Если вы извлекаете точное значение с помощью JSON Extractor, вы можете использовать следующий код для записи переменных в новой строке.

    try {
      extractedId=vars.get("extracted_Id");
      f= new FileOutputStream("D:/YourCSVFile.csv", **true**);
      p = new PrintStream(f); 
      this.interpreter.setOut(p);
      print(extractedId);
      f.close();
   }

  catch (Throwable ex) {
     log.error("Error in Beanshell", ex);
     throw ex;
  }

В функции FileOutputStream используйте 'false', если вы хотите создавать новые свежие результаты при каждой настройке. Если указать 'true', каждый запуск этого плана тестирования будет добавляться в один и тот же файл.

person Iftekhar Alam    schedule 29.09.2017