You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将JMeter测试结果存储到SQL Server数据库?

在JMeter中直接将测试结果存储到SQL Server的方法

可以直接将JMeter测试结果写入SQL Server,无需先导出为CSV再导入。以下是两种可靠的实现方式:

方法一:JSR223 Listener + JDBC 实时写入单条结果

这种方式会在每个采样器执行完成后,立刻将该采样的详细结果插入SQL Server数据库,适合保存全量测试明细。

步骤1:准备SQL Server JDBC驱动

下载对应SQL Server版本的JDBC驱动包(如mssql-jdbc-12.4.1.jre8.jar),放到JMeter安装目录下的lib文件夹,重启JMeter。

步骤2:配置JDBC连接

在测试计划中添加「JDBC Connection Configuration」元件,配置核心参数:

  • Variable Name: 自定义连接名(如sqlServerConn,后续代码会引用)
  • Database URL: jdbc:sqlserver://<服务器IP>:<端口>;databaseName=<目标库名>;encrypt=true;trustServerCertificate=true(加密参数根据实际环境调整)
  • JDBC Driver Class: com.microsoft.sqlserver.jdbc.SQLServerDriver
  • Username/Password: SQL Server的登录账号和密码

步骤3:创建结果存储表

提前在SQL Server中建表,示例SQL:

CREATE TABLE jmeter_test_results (
    id INT IDENTITY(1,1) PRIMARY KEY,
    sampler_name NVARCHAR(255) NOT NULL,
    response_code NVARCHAR(10),
    response_message NVARCHAR(255),
    thread_name NVARCHAR(255),
    time_stamp BIGINT,
    response_time_ms INT,
    latency_ms INT,
    is_success BIT,
    response_bytes INT,
    request_url NVARCHAR(500)
);

步骤4:编写JSR223 Listener写入逻辑

添加「JSR223 Listener」元件,配置:

  • Language: 选择groovy(性能最优)
  • Script: 写入以下代码(用PreparedStatement避免SQL注入):
// 获取预配置的JDBC连接
def conn = vars.getObject("sqlServerConn")
// 预编译插入语句
def insertSql = """
INSERT INTO jmeter_test_results (sampler_name, response_code, response_message, thread_name, time_stamp, response_time_ms, latency_ms, is_success, response_bytes, request_url)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
"""
def pstmt = conn.prepareStatement(insertSql)

// 从SampleResult提取测试数据
pstmt.setString(1, SampleResult.getSampleLabel())
pstmt.setString(2, SampleResult.getResponseCode())
pstmt.setString(3, SampleResult.getResponseMessage())
pstmt.setString(4, SampleResult.getThreadName())
pstmt.setLong(5, SampleResult.getTimeStamp())
pstmt.setInt(6, SampleResult.getTime())
pstmt.setInt(7, SampleResult.getLatency())
pstmt.setBoolean(8, SampleResult.isSuccessful())
pstmt.setInt(9, SampleResult.getBytes())
pstmt.setString(10, SampleResult.getUrl().toString())

// 执行插入操作
pstmt.executeUpdate()
// 关闭资源
pstmt.close()

方法二:Backend Listener(聚合结果存储)

如果只需存储TPS、平均响应时间等聚合指标,可以使用JMeter的Backend Listener配合JDBC扩展,但这种方式不保存单条采样明细。若要存储全量结果,方法一更合适。

关于你之前的JSR223+CSV问题

你之前尝试的JSR223配合CSV无法工作,常见原因包括:

  • CSV文件路径错误(需用绝对路径,或确保文件在JMeter工作目录下)
  • 编码不匹配导致读取乱码
  • SQL语句拼接时未处理单引号等特殊字符,引发语法错误
  • 未正确遍历CSV行数据并执行插入

但既然可以直接写入数据库,完全不需要经过CSV中转,推荐使用方法一实现。

内容的提问来源于stack exchange,提问作者Ingemar Johansson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 17:45:55