如何使用beanshell jmeter在csv文件中编写提取的结果?

时间:2017-01-03 11:13:02

标签: csv arraylist jmeter filewriter beanshell

我正在以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代码吗?

感谢, 维杰

3 个答案:

答案 0 :(得分:0)

我相信你可以使用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) }
    
  3. 您应该以您想要的格式生成文件。

    参考文献:

答案 1 :(得分:0)

试试这个,它对我有用

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

答案 2 :(得分:0)

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

s/>\s*\n\s*(\w.*\w)\s*\n\s*</>\1</

如果要在每个设置中创建新的新结果,请在FileOutputStream函数中使用'false'。将'true'添加到该测试计划的每次运行中的同一文件中