mcpField
K
k6-load-testing

k6-load-testing

github.com/sickn33测试与质量48.7k94 次安装今天更新
代码仓库

关于 k6-load-testing

介绍使用 k6 对 API 和浏览器场景进行负载测试的技能指南,适用于开发者和性能工程师,可评估负载下的表现并比较代码变更,同时强调明确的安全限制。

主要功能

  1. 01对 HTTP API 进行负载测试
  2. 02测试 WebSocket 端点
  3. 03运行浏览器场景
  4. 04在 CI/CD 中设置性能回归测试
  5. 05分析负载下的系统表现
  6. 06比较代码变更前后的性能

适用场景

  1. 01评估预期流量下的 API 性能
  2. 02对 WebSocket 服务进行负载测试
  3. 03在 CI/CD 中添加性能回归检查
  4. 04验证 SLA 要求和性能预算

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill k6-load-testing

安装后在 Claude Code 中输入/k6-load-testing确认已加载。

附带文件references/detailed-guide.md

详细介绍

k6 负载测试

执行范围

开始负载测试前,确认确切的目标、环境、VU/请求速率/持续时间上限、测试时段、停止条件、下游影响和测试数据清理方式。从 1 个 VU 开始;示例并不意味着可以对公共端点施加压力。使用云端输出需要获得上传结果和承担费用的授权。仅使用检查不会导致 k6 测试失败:添加检查阈值,以断言功能正确性。夹具必须非空,用户分配必须与并发量匹配;通过取模重复使用用户可能会扭曲身份验证结果。

详细指南

执行此技能前,请阅读详细指南。其中保留了完整流程和参考资料。必须遵守其中的安全要求、前提条件和验证要求。针对特定任务时,请加载相关章节;进行端到端工作时,请完整阅读指南。

何时使用此技能

  • 需要对 HTTP API、WebSocket 端点或浏览器场景进行负载测试时
  • 在 CI/CD 中设置性能回归测试时
  • 分析系统在各种负载条件下的行为时
  • 比较代码变更前后的性能时
  • 验证 SLA 要求和性能预算时

示例

示例 1:基本 API 负载测试
import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  vus: 50,
  duration: '2m',
  thresholds: {
    http_req_duration: ['p(95)<500'],
    http_req_failed: ['rate<0.01'],
  },
};

export default function () {
  const res = http.get('https://api.example.com/users');
  
  check(res, {
    'status is 200': (r) => r.status === 200,
    'response time < 500ms': (r) => r.timings.duration < 500,
  });
  
  sleep(1);
}
示例 2:使用身份验证和数据参数化进行测试
import http from 'k6/http';
import { check } from 'k6';
import { SharedArray } from 'k6/data';

const users = new SharedArray('users', function () {
  return JSON.parse(open('./users.json'));
});

export default function () {
  const user = users[__VU % users.length];
  
  const loginRes = http.post('https://api.example.com/login',
    JSON.stringify({ email: user.email, password: user.password }),
    {headers: {'Content-Type': 'application/json'}, timeout: '10s', redirects: 0}
  );
  
  if (!check(loginRes, {'login succeeded': r => r.status === 200})) return;
  let token;
  try { token = loginRes.json('access_token'); } catch (_) { return; }
  if (typeof token !== 'string' || !token) return;
  
  const headers = { 'Authorization': `Bearer ${token}` };
  const res = http.get('https://api.example.com/profile', { headers });
  
  check(res, { 'profile loaded': (r) => r.status === 200 });
}

限制

  • 仅当任务明确符合上述范围时,才使用此技能。
  • 不要将输出视为针对特定环境的验证、测试或专家审查的替代品。
  • 如果缺少必要的输入、权限、安全边界或成功标准,请停止并请求澄清。

评论

支持 Markdown