Jmeter 保存接口数据到csv文件中

Jmeter 如何将接口数据保存到CSV文件中

今天我们来介绍如何将通过Jmetet将我们请求的接口数据,将其导出到CSV文件中!相信这一篇文章可以给很多同学得到更多的知识!

Jmetet 设置请求接口

首先设置请求线程组,这里我们设置请求的线程组,Ramp-Up秒,循环次数 均设为1.

然后添加一个HTTP请求

此时这时候我们已经配置好了请求的相关信息。

Jmeter 设置提取接口返回

首先我们观察接口的返回值,然后通过json数据提取器,将我们需要提取的数据进行提取,首先观察返回体结构,然后提取数据。

1
{"bizCode":10000,"data":{"icon":[{"icon":"https://test.matchplay.com/static//page/detail/soccer/football_match_started.png","id":"football_match_started"},{"icon":"https://test.matchplay.com/static//page/detail/soccer/football_match_ended.png","id":"football_match_ended"},{"icon":"https://test.matchplay.com/static//page/detail/soccer/football_video_assistant_referee_over.png","id":"football_video_assistant_referee_over"},]},"innerMsg":"success","message":"success"}

假如我们想要提取其中的icon字段,那么你就可以通过Json提取,添加一个Json提取器

那么我们的提取公式就是$.data.icon[*].icon 其中[*] 表示提取多个匹配,然后在Match No. 输入-1 表示匹配所有。

这里我们可以添加多个Json 提取器,然后写入具体的规则即可!

Benshell 处理写入csv脚本

首先添加一个后置处理器Benshell

然后添加一个调试后置处理器,这样我们就可以看到抓取的数据信息

编写Benshell 脚本

在Benshell 中写入脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import java.io.BufferedWriter;  
import java.io.FileWriter;
import java.io.IOException;

// 文件路径
String filePath = "C:\\Users\\15424\\Desktop\\比赛\\biz.csv";


// 打开文件以追加模式写入(如果文件不存在,它将被创建)
FileWriter fstream = new FileWriter(filePath);
BufferedWriter out = new BufferedWriter(fstream);

int invoiceCodeMatchNr = Integer.parseInt(vars.get("bizcode_matchNr"));
int invoiceNumberMatchNr = Integer.parseInt(vars.get("id_matchNr"));
// int billingDateMatchNr = Integer.parseInt(vars.get("bb_matchNr"));
//int eInvoiceNumberMatchNr = Integer.parseInt(vars.get("eInvoiceNumber_matchNr"));

try {
// 使用 for 循环写入数据
for (int i = 1; i <= invoiceCodeMatchNr; i++) {
// 构造要写入的数据,这里只是简单的示例,你可以根据需要修改
String line = vars.get("bizcode_"+i);
String line2 = vars.get("id_"+i);
log.info(line);

// 写入数据到文件
out.write(line+","+line2);
out.newLine();
}

out.write(",");
} catch (IOException e) {
// 处理可能的 IOException
log.error("Error writing to file: " + e.getMessage());
} finally {
// 确保文件被关闭
try {
if (out != null) {
out.close();
}
if (fstream != null) {
fstream.close();
}
} catch (IOException ex) {
// 处理关闭文件时的异常
log.error("Error closing file: " + ex.getMessage());
}
}

脚本解析

首先我们看到查看结果树里面已经有了匹配的个数

也就是 bizcode_matchNr,id_matchNr 通过这个我们就可以知道具体匹配了多少个,那么就可以通过for循环来实现循环去获取我们对应的值,然后在观察对应的key的规则:

可以观察到是你的变量名+_+顺序数字组成,那么我们知道了具体规则就可以写for 循环了!

首先定义我们的变量也就是匹配的总个数:bizcode_matchNr

int invoiceCodeMatchNr = Integer.parseInt(vars.get("bizcode_matchNr"));

然后我们遍历根据规则获取对应的值:

for (int i = 1; i <= invoiceCodeMatchNr; i++) {  
    // 构造要写入的数据,这里只是简单的示例,你可以根据需要修改 
    String line = vars.get("bizcode_"+i);
    String line2 = vars.get("id_"+i);
    log.info(line);
    
    
}

然后将我们对应的信息写入csv

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.io.BufferedWriter;  
import java.io.FileWriter;
import java.io.IOException;

// 文件路径
String filePath = "C:\\Users\\15424\\Desktop\\比赛\\biz.csv";


// 打开文件以追加模式写入(如果文件不存在,它将被创建)
FileWriter fstream = new FileWriter(filePath);
BufferedWriter out = new BufferedWriter(fstream);

// 写入数据到文件
out.write(line+","+line2);

完成的for 循环:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int invoiceCodeMatchNr = Integer.parseInt(vars.get("bizcode_matchNr"));
int invoiceNumberMatchNr = Integer.parseInt(vars.get("id_matchNr"));

for (int i = 1; i <= invoiceCodeMatchNr; i++) {
// 构造要写入的数据,这里只是简单的示例,你可以根据需要修改
String line = vars.get("bizcode_"+i);
String line2 = vars.get("id_"+i);
log.info(line);

// 写入数据到文件
out.write(line+","+line2);
out.newLine();


}

那么以上就是我们的shell脚本的完整信息。

查看结果

这样就可以看到我们的数据都已经写入近csv文件啦!

总结

这里我们就完成了所有的csv写入操作了,如果各位同学有不明白的地方欢迎随时留言!


Jmeter 保存接口数据到csv文件中
https://dreamshao.github.io/2024/10/28/jmeter保存数据到csv/
作者
Yun Shao
发布于
2024年10月28日
许可协议