CSV文件每行的末尾追加写数据
一.需求分析
使用jmeter工具并发测试时,我们有时候需要把json提取器中提取的数据追加写到csv文件每行的末尾,以备之后的程序使用。eg:程序执行第一个线程时把提取的新数据追加到第一行的末尾,程序执行第二个线程的时候把提取的新数据追加到第二行的末尾,依次类推…
二.数据的准备
(1)需准备三个csv文件,分别为read.csv、read-copy.csv、write.csv。记得设置成UTF-8格式。
解释一下:
read.csv提供给jmeter工具本身读用的,如下图:
read_copy.csv和write.csv是用户自己写的java程序读写用的,代码放在了BeanShell 后置处理程序中
三.先在eclipse中完成代码的编写调试
代码的实现:
(1) 程序第一次运行:read_copy.csv中的第2行数据(去掉第一行的头字段)和获取到的新数据(提取的新数据songteng2012)追加到write.csv文件第2行中(第一行的头字段在数据准备阶段已添加好)。
(2) 然后删除运行read_copy.csv中的第2行数据。
(3) 程序第二次运行:read_copy.csv中的第2行数据(去掉第一行的头字段)和获取到的新数据(提取的新数据songteng2012)追加到write.csv文件第3行中。
(4) 然后删除read_copy.csv中的第2行数据。
依此类推…
import java.io.File;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Opera_csv{
//eclipse编写中我们只需要read_copy.csv和write.csv这2个文件即可.
String readPath = "D:\\Jmeter\\apache-jmeter-5.1.1\\bin\\生成密钥实战Opera_csv\\read_copy.csv";
String writePath = "D:\\Jmeter\\apache-jmeter-5.1.1\\bin\\生成密钥实战Opera_csv\\write.csv";
//读取read_copy中行的数据和提取到的新数据,把这些数据追加写到write.csv中
public void write_csv() throws IOException {
BufferedReader r = new BufferedReader(new FileReader(new File(readPath)));
BufferedWriter w =new BufferedWriter(new FileWriter(writePath,true));
String temp = null;
r.readLine();
if((temp = r.readLine()) != null){
temp =temp + "," + "提取的新数据songteng2012";
w.write(temp);
w.write("\r\n");
}
w.close();
r.close();
del_row();
}
//删除read_copy中的第二行数据
public void del_row() throws IOException{
BufferedReader r = new BufferedReader(new FileReader(new File(readPath)));
StringBuffer str = new StringBuffer(4096);
String temp = null;
int line = 0;
int lineDel = 2;
while((temp=r.readLine()) != null) {
line++;
if(line == lineDel) continue;
str.append(temp).append("\r\n");
}
r.close();
BufferedWriter w =new BufferedWriter(new FileWriter(readPath));
w.write(str.toString());
w.close();
}
public static void main(String[] args) throws IOException
{
Opera_csv s = new Opera_csv();
s.write_csv();
}
}
四.程序执行
1.执行前数据
2.程序执行一次后的数据
五.程序放在jmeter的BeanShell 后置处理程序中
BeanShell 后置处理程序中要注意的是不需要我们去声明类。