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

JMeter如何发送多个含唯一Cnumber属性的JSON请求完成1k并发测试

实现并发请求Cnumber唯一的方案

核心逻辑优先选择线程安全的自增序列、预生成唯一值池两种方案,完全避免重复概率,不要使用随机生成规则。

方案1:JMeter(最常用负载测试工具实现)

  • 直接使用JMeter自带的线程安全__counter()函数,请求JSON里的Cnumber字段修改为 "Cnumber": "C${__counter(FALSE,)}" 即可,FALSE表示全局计数,会自动生成C1到C1000的唯一值,1000并发下不会重复
  • 也可以提前把1000个唯一Cnumber写入CSV文件,用CSV Data Set Config组件读取,设置共享模式为所有线程,每个请求取一行新值即可保证唯一

方案2:k6(轻量JS负载测试工具实现)

  • 用SharedArray预生成唯一值池,保证所有虚拟用户取值不重复,示例代码如下:
import { SharedArray } from 'k6/data';
import http from 'k6/http';

// 预生成1000个唯一Cnumber
const cNumberPool = new SharedArray('cNumber池', function() {
  return Array.from({length: 1000}, (_, i) => `C${i+1}`);
});

export const options = {
  vus: 1000,
  iterations: 1000
};

export default function () {
  // 按虚拟用户编号取对应唯一值
  const currentCnumber = cNumberPool[__VU - 1];
  const payload = JSON.stringify({
    "Code": "WEB",
    "Pfix": null,
    "Name": "Ronaldo",
    "Cnumber": currentCnumber
  });
  http.post('你的API地址', payload, { headers: { 'Content-Type': 'application/json' } });
}

方案3:Python自定义并发脚本实现

  • 用线程池提前分配唯一值,100%不会重复,示例代码如下:
import requests
from concurrent.futures import ThreadPoolExecutor

# 预生成1000个唯一Cnumber
c_number_list = [f"C{i}" for i in range(1, 1001)]
api_url = "替换为你的实际接口地址"

def send_request(c_number):
    body = {
        "Code": "WEB",
        "Pfix": None,
        "Name": "Ronaldo",
        "Cnumber": c_number
    }
    response = requests.post(api_url, json=body)
    # 可自行添加响应校验、结果统计逻辑

if __name__ == "__main__":
    # 1000线程并发执行
    with ThreadPoolExecutor(max_workers=1000) as executor:
        executor.map(send_request, c_number_list)

注意事项

  • 如果需要更大数量的唯一值,也可以用UUID生成,只要接口Cnumber字段长度支持即可,比如JMeter写法为"Cnumber": "${__UUID}"
  • 多线程场景下不要使用普通的全局自增变量,必须用对应工具/语言提供的线程安全计数能力

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:45:05