如何使用 beanshell jmeter 将提取的结果写入 csv 文件?

How to write extracted result in csv file using beanshell jmeter?

我收到 JSON 格式的 HTTP 响应。使用 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"
        }
    ]
}

在这里,我希望将所有 ID 存储在 .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();

正在写入文件,但所有 ID 都写在一行中,如

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

但我需要他们

82003
90067
70000
70032
90042

调试后处理器响应数据

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

能否请一些人为我提供解决方案或 BeanShell 代码?

谢谢, 维杰

我相信您可以使用 JSR223 后处理器和 Groovy 语言而不是 JSON Extractor 和 Beanshell 以一石二鸟。

  1. 添加 JSR223 PostProcessor 作为产生 JSON 输出的请求的子项
  2. 将以下代码放入 PostProcessor 的 "Script" 区域:

    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) }
    

您应该得到以您想要的格式生成的文件。

参考文献:

试试这个,它对我有用

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();

如果您使用 JSON 提取器提取准确的值,您可以使用以下代码在新行中写入变量。

    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' 添加到该测试计划

的每个 运行 中的同一个文件中