如何在JMeter中测试文件导入计时场景并监测数据库性能
JMeter配置步骤
一、文件读取与导入请求基础配置
- 先把所有待导入的多行文本文件统一放到本地同一个目录下,给线程组添加
Directory Listing Config配置元件,填入该目录的绝对路径,定义存储文件路径的变量名为current_import_file,勾选递归读取子目录、按文件名顺序遍历选项,实现测试过程中逐个读取待导入文件的路径。 - 在导入请求的上级节点添加
CSV Data Set Config,文件路径字段填入${current_import_file},定义存储单行内容的变量名为single_line_data,把分隔符配置项留空,注意不要保留默认的逗号分隔符,否则会拆分行内容中带逗号的文本,导致导入数据异常,设置遇到文件结束符时继续循环下一个文件,不要终止整个测试,实现单个文件的逐行读取。 - 配置对应Web应用的导入HTTP请求:如果接口是按行提交数据,就把
${single_line_data}填入请求体/请求参数的对应字段;如果是整文件上传提交,就切换到请求的「文件上传」标签,文件路径填${current_import_file},配好接口要求的参数名、MIME类型即可。
二、逐行、单文件导入耗时统计配置
- 单行耗时统计:给每一次行数据提交的HTTP请求套一层
Transaction Controller,勾选「将定时器、前后置处理器的耗时计入样本时长」选项,事务控制器命名可以拼接行标识,比如行导入_${__counter(FALSE,)}_${single_line_data},后续统计时这个事务生成的样本响应时间,就是对应单行数据的完整导入耗时。 - 单文件耗时统计:在整个单文件遍历、逐行提交的逻辑块外层,再套一层
Transaction Controller,同样勾选计时包含前后置、定时器耗时的选项,命名为文件导入_${current_import_file},这个事务输出的响应时间就是单个文件从开始读取到全部内容导入完成的总耗时。 - 结果落盘配置:添加
Simple Data Writer监听器,指定本地结果文件的保存路径,勾选保存样本名称、响应时间、响应状态、时间戳、线程名这些核心字段,测试运行时所有行、文件的耗时数据会自动写入该文件,方便后续统计90分位、平均、最大耗时等指标。
三、入库过程数据库性能采集配置
- 先把目标数据库对应的JDBC驱动jar包放到JMeter安装目录的
lib文件夹下,注意JDBC驱动版本要和目标数据库版本匹配,否则会出现连接失败的问题,重启JMeter后添加JDBC Connection Configuration配置元件,填入数据库连接地址、账号、密码、驱动类名,定义连接池变量名为db_perf_conn,配置好合理的连接池大小,保证JDBC请求能正常连上数据库。 - 全局数据库性能采集:单独加一个和导入逻辑并行的线程组,设置线程组生命周期和导入场景完全一致,加一个固定定时器配置1秒间隔,循环执行JDBC请求,拉取数据库核心性能指标:比如MySQL就执行
show global status提取插入行数、活跃线程数、慢查询数、事务提交/回滚数;Oracle/PostgreSQL就查对应系统视图的QPS、锁等待、缓存命中率等指标,这些JDBC请求的采样结果会和导入请求的结果按时间轴对齐,就能看到整个导入过程中数据库的性能波动。 - 单操作关联数据库指标:如果要定位某一行/某一个文件导入时的数据库表现,可以在对应行、文件的事务控制器内部,导入请求执行完成后加JDBC请求,用导入生成的业务主键关联查询本次操作对应的入库SQL执行时长、锁等待时间等明细数据,和导入耗时直接绑定分析。
- 服务器层指标补充:可以加
PerfMon Metrics Collector监听器,提前在数据库所在服务器启动ServerAgent,采集导入过程中数据库服务器的CPU、内存、磁盘IO、网络占用数据,和数据库内部指标、导入耗时做关联分析。
四、BlazeMeter运行适配配置
- 所有用到的第三方JMeter插件(比如Directory Listing Config、PerfMon插件)提前整理好,在BlazeMeter创建测试场景时,把插件包上传到场景的自定义插件目录,避免云端运行时因为缺插件报错。
- 所有待导入的测试文本文件打包上传到BlazeMeter的测试资源目录,把之前JMeter配置里的本地文件路径改成BlazeMeter运行环境对应的相对路径,保证云端执行时能正常读取到所有测试文件。
- 在BlazeMeter的结果采集配置里,把自定义的行导入、文件导入事务,以及数据库性能采集的JDBC请求都纳入采集范围,测试运行完成后可以直接在面板按事务名筛选,分别查看两类耗时指标和数据库性能的统计结果、时序曲线。
内容的提问来源于stack exchange,提问作者ADS KUL
相关产品推荐
相关产品推荐

