如何在JMeter中实现一对多关系的两张数据库表数据填充?
JMeter实现主从表一对多批量插入
核心配置思路
先插入主表记录,获取生成的主键(这里用Counter组件生成,直接存入变量),再循环指定次数插入从表,每次将主表主键作为外键传入。
具体步骤
1. 全局前置组件配置
- 添加Test Plan,创建线程组(设置线程数1,循环次数5,对应外层循环逻辑)
- 添加Counter组件:
- 名称设为「主表主键生成器」
- 起始值1,递增步长1,最大值5,引用名称设为
Table1_id(对应主表的entity_id字段)
- 添加CSV Data Set Config:
- 配置主表其他字段的CSV数据源,定义引用变量(比如
col1、col2、col3)
- 配置主表其他字段的CSV数据源,定义引用变量(比如
2. 主表插入请求
添加JDBC Request组件,配置数据库连接后,写入SQL语句:
INSERT INTO table_1 (entity_id, col1, col2, col3) VALUES (${Table1_id}, ${col1}, ${col2}, ${col3})
(替换为你的实际表字段名和CSV变量名)
3. 生成从表随机插入次数
添加JSR223 Sampler,用Groovy脚本生成0-4之间的随机数(对应原逻辑的rand.nextInt(5)):
def insertNum = new Random().nextInt(5) vars.put("insert_count", insertNum.toString())
将生成的次数存入insert_count变量,供后续循环使用。
4. 从表循环插入
添加Loop Controller,设置循环次数为${insert_count}(引用上面生成的随机数变量)
在Loop Controller下添加JDBC Request组件,写入从表插入SQL:
INSERT INTO table_2 (id, parent_id, col_a, col_b) VALUES (UUID(), ${Table1_id}, 34, 5)
- 从表的id字段如果是自增类型可直接省略,或用
UUID()生成唯一值,根据你的数据库规则调整 ${Table1_id}即为主表生成的主键,作为外键parent_id传入
5. 验证与调试
- 添加View Results Tree组件,查看每个请求的执行结果与SQL语句
- 可在JSR223 Sampler中添加日志输出,方便调试:
log.info("当前主表主键:${Table1_id},从表需插入次数:${insertNum}")
注意事项
- 单线程场景下Counter组件无需额外配置,多线程场景需勾选「Track counter independently for each user」保证主键唯一
- 确保JDBC连接配置正确,数据库账号拥有两张表的插入权限
- Loop Controller的循环次数必须引用变量,不要写死数值
内容的提问来源于stack exchange,提问作者Ajantha Hebbar
相关产品推荐
相关产品推荐

