【问题标题】:How to write extracted result in csv file using beanshell jmeter?如何使用 beanshell jmeter 在 csv 文件中写入提取的结果?
【发布时间】:2017-05-17 11:13:17
【问题描述】:

我收到 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 代码?

谢谢, 维杰

【问题讨论】:

  • 请添加您用于检索IDs 的模式/正则表达式。

标签: csv arraylist jmeter filewriter beanshell


【解决方案1】:

我相信使用 JSR223 PostProcessor 和 Groovy 语言而不是 JSON Extractor 和 Beanshell,您可以用一块石头杀死两只鸟。

  1. JSR223 PostProcessor 添加为生成 JSON 输出的请求的子项
  2. 将以下代码放入 PostProcessor 的“脚本”区域:

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

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

参考资料:

【讨论】:

    【解决方案2】:

    试试这个,它对我有用

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

    【讨论】:

      【解决方案3】:

      如果您使用 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' 将在您每次运行该测试计划时附加到同一个文件中

      【讨论】:

        猜你喜欢
        • 2016-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多