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

如何在k6中按指定请求占比并发运行函数,测试服务器最大负载?

k6实现90/10比例POST请求的基准测试方案

核心实现思路

  • 用k6的**场景(scenarios)**配置两个独立POST请求流,通过场景权重控制请求比例(9:1对应90%/10%)
  • 采用ramping-arrival-rate负载模式逐步加压,直到服务器达到性能瓶颈,以此测出最大每秒操作数(ops/sec)

完整测试脚本

import http from 'k6/http';
import { check } from 'k6';

// 替换为真实接口的请求体
const busyEndpointPayload = JSON.stringify({
  request_type: 'busy',
  payload: 'large-sample-data'
});
const quietEndpointPayload = JSON.stringify({
  request_type: 'quiet',
  payload: 'small-sample-data'
});

// 通用请求头配置
const headers = { 'Content-Type': 'application/json' };

export let options = {
  scenarios: {
    busy_endpoint: {
      executor: 'ramping-arrival-rate',
      startRate: 50, // 初始每秒请求数
      timeUnit: '1s',
      preAllocatedVUs: 50, // 预分配虚拟用户数
      maxVUs: 500, // 最大虚拟用户数,按需调整
      stages: [
        { duration: '10m', target: 1000 }, // 10分钟内逐步把请求率拉到1000/秒
        { duration: '5m', target: 1000 }, // 维持该请求率5分钟,验证稳定性
      ],
      tags: { endpoint: 'busy' },
      exec: 'sendBusyRequest',
      weight: 9, // 权重占9份
    },
    quiet_endpoint: {
      executor: 'ramping-arrival-rate',
      startRate: 5, // 初始请求率按90/10比例设置
      timeUnit: '1s',
      preAllocatedVUs: 5,
      maxVUs: 50,
      stages: [
        { duration: '10m', target: 100 }, // 对应繁忙端点的10%请求率
        { duration: '5m', target: 100 },
      ],
      tags: { endpoint: 'quiet' },
      exec: 'sendQuietRequest',
      weight: 1, // 权重占1份
    },
  },
  thresholds: {
    // 错误率超过5%时终止测试,按需调整
    'http_req_failed{endpoint:busy}': ['rate<0.05'],
    'http_req_failed{endpoint:quiet}': ['rate<0.05'],
  },
};

// 繁忙端点请求函数
export function sendBusyRequest() {
  let res = http.post('https://your-server.com/busy-endpoint', busyEndpointPayload, { headers });
  check(res, {
    'busy endpoint status 200': (r) => r.status === 200,
  });
}

// 非繁忙端点请求函数
export function sendQuietRequest() {
  let res = http.post('https://your-server.com/quiet-endpoint', quietEndpointPayload, { headers });
  check(res, {
    'quiet endpoint status 200': (r) => r.status === 200,
  });
}

关键细节说明

  1. 请求比例控制:通过scenarios的weight参数设置9:1,k6会自动按比例分配两个场景的请求量,确保总请求中90%流向繁忙端点,10%流向非繁忙端点。
  2. 负载加压策略:ramping-arrival-rate执行器会按阶段逐步提升请求率,直到服务器无法稳定处理(触发错误率阈值)。可根据服务器预估性能调整startRate、target和maxVUs参数。
  3. 最大ops/sec测量:测试过程中观察k6实时输出的http_reqs指标,或查看测试结束后的summary报告,取服务器在稳定无错误状态下的最高请求率作为最大ops/sec。
  4. 阈值设置:thresholds配置错误率阈值,当请求失败率超过设定值时k6终止测试,此时的请求率即为服务器的瓶颈负载。

调整建议

  • 若需快速定位瓶颈,可缩短阶段时长(比如把10m改为2m),但建议保留足够维持时间验证稳定性。
  • 预分配VUs(preAllocatedVUs)应略高于初始请求率,避免因VUs不足限制请求生成。
  • 实际测试时替换脚本中的请求URL、请求体和请求头为真实接口信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:45:01