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

如何对JMeter的JDBC插入请求参数化,实现ID自增其余字段赋随机值

JMeter JDBC插入语句参数化实现方案

1 ID字段逐次自增实现

两种常用可落地方案,按需选择:

  • 方案1:JMeter侧生成ID
    直接调用JMeter内置函数${__counter(TRUE,)}即可实现自增:参数填TRUE代表每个虚拟用户单独计数,填FALSE代表全局统一计数。如果需要指定起始ID,可提前添加「用户定义的变量」配置组件,初始化id为指定起始值,再新增JSR223后置处理器,执行代码vars.put("id", String.valueOf(Integer.parseInt(vars.get("id")) + 1)),每次请求后自动累加ID值。
  • 方案2:数据库侧生成ID
    如果允许调整表结构,直接把id字段设置为AUTO_INCREMENT自增属性,SQL语句中直接省略id字段的插入赋值,数据库会自动生成不重复的自增ID,多线程并发场景下不会出现ID冲突,性能更好。

2 其余字段随机值生成

根据字段类型直接调用JMeter内置函数即可:

  • 字符串类字段(business_center、item_group、attribute_group、modified_by)
    需要固定前缀加随机后缀的场景,用${__RandomString(长度, 随机字符集,)},比如生成bc开头的4位随机后缀,写为bc${__RandomString(4,abcdefghijklmnopqrstuvwxyz0123456789,)}。
    需要从预设可选值中随机选择的场景,用${__RandomFromMultipleVars(可选值1|可选值2|可选值3,)},多个可选值用竖线分隔即可。
  • 时间类字段(created_on)
    直接生成当前时间用${__time(yyyy-MM-dd HH:mm:ss,)};需要生成指定范围的随机时间,可拼接随机日期和随机时分秒:${__RandomDate(yyyy-MM-dd,起始日期,结束日期,,)} ${__Random(0,23,)}:${__Random(0,59,)}:${__Random(0,59,)}。

3 调整后示例SQL

insert into product.test (id,business_center,item_group,attribute_group,created_on,modified_by)
values (
 '${__counter(FALSE,)}',
 'bc${__RandomString(4,abcdef0123456789,)}',
 'ig${__RandomString(4,abcdef0123456789,)}',
 'ag${__RandomString(4,abcdef0123456789,)}',
 '${__RandomDate(yyyy-MM-dd,2021-01-01,2021-12-31,,)} ${__Random(0,23,)}:${__Random(0,59,)}:${__Random(0,59,)}',
 'Test${__Random(1,100,)}'
);

4 并发场景注意事项

  • 多线程压测如果选择JMeter侧生成ID,要使用全局计数的counter,或者用Counter配置组件,不要勾选「对于每个用户独立跟踪计数」,避免出现ID重复。
  • 100线程以上的大并发场景,优先选择数据库自增ID方案,不需要额外处理ID冲突问题,执行效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:48:00