如何使用 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 以一石二鸟。
- 添加 JSR223 PostProcessor 作为产生 JSON 输出的请求的子项
将以下代码放入 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' 添加到该测试计划
的每个 运行 中的同一个文件中
我收到 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 以一石二鸟。
- 添加 JSR223 PostProcessor 作为产生 JSON 输出的请求的子项
将以下代码放入 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' 添加到该测试计划
的每个 运行 中的同一个文件中