如何用 K6 对 .NET 微服务进行负载测试?

来源:这里教程网 时间:2026-02-21 17:27:29 作者:

用 K6 对 .NET 微服务做负载测试,核心是模拟真实用户行为,验证服务在高并发下的性能表现。K6 是一个现代、轻量且基于 JavaScript/TypeScript 的开源负载测试工具,非常适合测试 REST API 或 gRPC(通过扩展)等微服务接口。

1. 准备测试环境和目标

确保你的 .NET 微服务已部署并可访问,例如运行在本地 Docker 容器或 Kubernetes 集群中。明确你要测试的接口,比如:

GET /api/users – 获取用户列表 POST /api/orders – 创建订单

记录接口地址(如 http://localhost:5000),并确认是否需要认证(如 JWT token)。如果需要,提前获取测试可用的 token。

2. 安装并配置 K6

从官网 k6.io 下载并安装 K6。支持 macOS、Linux 和 Windows。

验证安装成功:

k6 version

创建一个测试脚本文件,例如 load-test.js

3. 编写 K6 测试脚本

以下是一个测试 .NET 微服务 POST 接口的示例脚本:

import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
  stages: [
    { duration: '30s', target: 20 },  // 30秒内逐步增加到20个虚拟用户
    { duration: '1m', target: 20 },   // 保持20个用户运行1分钟
    { duration: '30s', target: 0 },   // 30秒内逐步降为0
  ],
  thresholds: {
    http_req_duration: ['p(95) < 500'], // 95% 请求响应时间小于500ms
    http_req_failed: ['rate==0'],       // 错误率等于0
  },
};
const BASE_URL = 'http://localhost:5000';
const TOKEN = 'your-jwt-token'; // 替换为有效 token
export default function () {
  const url = `${BASE_URL}/api/orders`;
  const payload = JSON.stringify({
    productId: 101,
    quantity: 2
  });
  const params = {
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Bearer ${TOKEN}`,
    },
  };
  const res = http.post(url, payload, params);
  
  check(res, {
    'is status 201': (r) => r.status === 201,
    'response time < 400ms': (r) => r.timings.duration < 400,
  });
  sleep(1); // 模拟用户思考时间
}

4. 运行测试并分析结果

在终端执行测试:

k6 run load-test.js

K6 会输出实时指标,包括:

请求速率(HTTP reqs/s) 响应时间分布(avg, p95, p99) 错误率 VU 数量变化

重点关注阈值是否达标,比如 95% 的请求是否在预期时间内完成。如果失败,检查 .NET 微服务日志,查看是否有异常、数据库瓶颈或 GC 压力。

5. 提升测试真实性

让测试更贴近生产环境:

使用多个不同接口混合调用,模拟真实用户路径 从文件读取测试数据(如不同用户 ID) 集成监控系统(如 Prometheus + Grafana),可视化指标 在 CI/CD 中加入 K6 回归测试,防止性能退化

基本上就这些。只要接口暴露出来,K6 就能测。关键是设计合理的场景和评估标准,才能真正发现 .NET 微服务的性能瓶颈。

相关推荐