当前位置: 首页 > news >正文

JMeter通过BeanShell创建CSV文件

在JMeter中通过BeanShell创建CSV文件,可以使用以下脚本实现:

import java.io.FileWriter;
import java.io.IOException;// 定义CSV文件路径(建议使用绝对路径)
String csvFilePath = "C:/jmeter_test/data/output.csv"; // Windows路径示例
// String csvFilePath = "/tmp/jmeter_data/output.csv"; // Linux/Mac路径示例// CSV内容(示例数据)
String header = "Name,Age,Email";
String row1 = "John Doe,30,john@example.com";
String row2 = "Jane Smith,25,jane@example.com";try {// 创建FileWriter对象FileWriter fw = new FileWriter(csvFilePath);// 写入CSV内容fw.write(header + "\n");fw.write(row1 + "\n");fw.write(row2 + "\n");// 关闭资源fw.close();log.info("CSV文件创建成功:" + csvFilePath);
} catch (IOException e) {log.error("文件写入失败:", e);e.printStackTrace();
}

使用说明:

  1. 添加BeanShell Sampler

    • 在测试计划中右键点击线程组
    • 选择 Add > Sampler > BeanShell Sampler
  2. 配置脚本参数

    • 修改 csvFilePath 变量为实际路径
    • 推荐使用绝对路径(相对路径可能受JMeter启动位置影响)
  3. 扩展功能示例(动态生成数据):

import java.io.BufferedWriter;
import java.io.FileWriter;String csvPath = "${__groovy(new File("csv").getAbsolutePath())}/dynamic_data.csv"; // 使用JMeter变量
int rows = 5;try (BufferedWriter bw = new BufferedWriter(new FileWriter(csvPath))) {bw.write("ID,Value,Timestamp\n");for (int i=1; i<=rows; i++) {String line = i + "," + Math.random() + "," + System.currentTimeMillis();bw.write(line + "\n");}log.info("生成测试数据完成,共" + rows + "行");
} catch (Exception e) {log.error("生成文件失败:", e);
}

注意事项:

  1. 路径权限

    • 确保JMeter有目标目录的写权限

    • 建议先在文件资源管理器手动创建目录

  2. 最佳实践

    • 推荐使用 BufferedWriter 替代 FileWriter 提升性能

    • Java 7+ 建议使用 try-with-resources 自动关闭流

    • 生产环境建议使用 vars.put() 存储文件路径供后续元件调用

  3. 新版JMeter建议

    • 对于JMeter 5.0+,建议改用 JSR223 Sampler + Groovy(性能更好)
    new File("test_data.csv").withWriter { writer ->   writer.writeLine('Header1,Header2')   (1..100).each { i ->   writer.writeLine("Data${i},${System.currentTimeMillis()}")   }
    }
    

常见问题排查:

  1. 文件未生成 → 检查路径是否正确/是否有写权限

  2. 中文乱码 → 指定编码格式:new OutputStreamWriter(new FileOutputStream(csvPath), "UTF-8")

  3. 性能问题 → 避免在BeanShell中频繁写文件,建议使用配置元件中的CSV Data Set Config

可以根据实际需求调整数据生成逻辑(如使用随机数据、参数化变量等)。

可执行代码:

//创建csv文件import java.io.FileWriter; 
import java.io.IOException;// 定义CSV文件路径(建议使用绝对路径)
//String csvFilePath = "../testFiles/token.csv"; // Windows路径示例
String csvFilePath = vars.get("csvFilePath");
String csvFilePathResult = vars.get("csvFilePathResult");
// String csvFilePath = "/tmp/jmeter_data/output.csv"; // Linux/Mac路径示例// CSV内容(示例数据)
//String header = "姓名,年龄,邮箱";
//String row1 = "John Doe,30,john@example.com";
//String row2 = "Jane Smith,25,jane@example.com";try {// 创建FileWriter对象FileWriter fw = new FileWriter(csvFilePath);FileWriter fwResult = new FileWriter(csvFilePathResult);// 写入CSV内容//fw.write(header + "\n");//fw.write(row1 + "\n");//fw.write(row2 + "\n");// 关闭资源fw.close();fwResult.close();log.info("CSV初始文件创建成功:" + csvFilePath + "\n结果文件创建成功:" + csvFilePathResult);
} catch (IOException e) {log.error("文件写入失败:", e);e.printStackTrace();
}

http://www.mrgr.cn/news/90301.html

相关文章:

  • RPA与深度学习结合
  • c# http
  • 寒假2.8
  • java二维数组
  • qml PageIndicator详解
  • 服务的端口号大全(Complete List of Service Port Numbers)
  • 【CXX-Qt】1.1 Rust中的QObjects
  • 驱动开发系列36 - Linux Graphics 2D 绘制流程
  • 序列化/反序列化与TCP通信协议
  • LLMs之DeepSeek-R1:TinyZero(复现 DeepSeek R1 Zero 的核心功能)的简介、安装和使用方法、案例应用之详细攻略
  • GeekPad智慧屏编程控制
  • 【CXX-Qt】1 CXX-Qt入门
  • Tcp_socket
  • DeepSeek 助力 Vue 开发:打造丝滑的步骤条
  • redo和binlog区别
  • DeepSeek:全栈开发者视角下的AI革命者
  • Docker 部署 MongoDB | 国内阿里镜像
  • 【论文翻译】DeepSeek-V3论文翻译——DeepSeek-V3 Technical Report——第一部分:引言与模型架构
  • Vue07
  • bitcoinjs学习笔记0(预备知识)
  • learn torch 01
  • three.js快速入门学习笔记
  • 渗透利器工具:Burp Suite 联动 XRAY 图形化工具.(主动扫描+被动扫描)
  • 客户端渲染和服务端渲染
  • Android车机DIY开发之软件篇(十二) AOSP12下载编译
  • 防御综合实验