mcpField
Q
qe-performance-testing

qe-performance-testing

github.com/proffesor-for-testing测试与质量51991 次安装今天更新
代码仓库

关于 qe-performance-testing

qe-performance-testing 是帮助团队规划和执行性能测试的技能,涵盖 SLO 定义、真实负载场景、测试监控与瓶颈分析,支持多种性能测试类型。

主要功能

  1. 01定义性能 SLO
  2. 02规划真实用户负载场景
  3. 03选择负载及压力测试类型
  4. 04测试期间监控系统资源
  5. 05分析瓶颈与测试结果

适用场景

  1. 01发布前验证预期流量
  2. 02通过压力测试查找容量上限
  3. 03活动前测试突发流量
  4. 04通过耐久测试调查内存泄漏

安装

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

$npx skills add https://github.com/proffesor-for-testing/agentic-qe --skill qe-performance-testing

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

详细介绍

性能测试

<default_to_action> 进行性能测试或规划负载测试时:

  1. 定义 SLO:p95 响应时间、吞吐量和错误率目标
  2. 识别关键路径:营收流程、高流量页面、关键 API
  3. 创建真实场景:用户旅程、思考时间、丰富多样的数据
  4. 执行并监控:CPU、内存、数据库查询、网络
  5. 分析瓶颈,并在上线前修复

快速选择测试类型:

  • 验证预期负载 → 负载测试
  • 找出性能极限 → 压力测试
  • 应对流量骤增 → 峰值测试
  • 内存泄漏、资源耗尽 → 耐久/浸泡测试
  • 水平/垂直扩展 → 可扩展性测试

成功的关键因素:

  • 性能是产品功能,而非事后补充
  • 尽早且频繁地测试,而不只是发布前测试
  • 聚焦影响用户的瓶颈 </default_to_action>

快速参考卡

适用时机
  • 重大版本发布前
  • 基础设施变更后
  • 扩容活动前(黑色星期五)
  • 制定 SLA/SLO 时
测试类型
类型目的时机
负载预期流量每次发布
压力超出容量每季度
峰值流量骤增活动前
耐久内存泄漏代码变更后
可扩展性验证扩展能力基础设施变更时
关键指标
指标目标原因
p95 响应时间< 200ms用户体验
吞吐量10k req/min容量
错误率< 0.1%可靠性
CPU< 70%余量
内存< 80%稳定性
工具
  • k6:现代化、基于 JS、适合 CI/CD
  • JMeter:企业级、功能丰富
  • Artillery:简洁的 YAML 配置
  • Gatling:基于 Scala,报告出色
Agent 协作
  • qe-performance-tester:负载测试编排
  • qe-quality-analyzer:结果分析
  • qe-production-intelligence:生产环境对比

定义 SLO

不佳:“系统应该很快” 良好:“在 1,000 个并发用户下,p95 响应时间 < 200ms”

export const options = {
  thresholds: {
    http_req_duration: ['p(95)<200'],  // 95% < 200ms
    http_req_failed: ['rate<0.01'],     // < 1% failures
  },
};

真实场景

**不佳:**所有用户都反复访问首页 **良好:**模拟真实用户行为

// Realistic distribution
// 40% browse, 30% search, 20% details, 10% checkout
export default function () {
  const action = Math.random();
  if (action < 0.4) browse();
  else if (action < 0.7) search();
  else if (action < 0.9) viewProduct();
  else checkout();

  sleep(randomInt(1, 5)); // Think time
}

常见瓶颈

数据库

**症状:**负载下查询缓慢、连接池耗尽 **解决方案:**添加索引、优化 N+1 查询、增大连接池、添加只读副本

N+1 查询
// BAD: 100 orders = 101 queries
const orders = await Order.findAll();
for (const order of orders) {
  const customer = await Customer.findById(order.customerId);
}

// GOOD: 1 query
const orders = await Order.findAll({ include: [Customer] });
同步处理

**问题:**请求路径中的阻塞操作(结账时发送电子邮件) **解决方案:**使用消息队列、异步处理、立即返回

内存泄漏

**检测:**耐久测试、内存分析 **常见原因:**未清理事件监听器、没有驱逐机制的缓存

外部依赖

**解决方案:**设置激进的超时、使用熔断器、缓存、优雅降级


k6 CI/CD 示例

// performance-test.js
import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  stages: [
    { duration: '1m', target: 50 },   // Ramp up
    { duration: '3m', target: 50 },   // Steady
    { duration: '1m', target: 0 },    // Ramp down
  ],
  thresholds: {
    http_req_duration: ['p(95)<200'],
    http_req_failed: ['rate<0.01'],
  },
};

export default function () {
  const res = http.get('https://api.example.com/products');
  check(res, {
    'status is 200': (r) => r.status === 200,
    'response time < 200ms': (r) => r.timings.duration < 200,
  });
  sleep(1);
}
# GitHub Actions
- name: Run k6 test
  uses: grafana/[email protected]
  with:
    filename: performance-test.js

分析结果

良好结果
Load: 1,000 users | p95: 180ms | Throughput: 5,000 req/s
Error rate: 0.05% | CPU: 65% | Memory: 70%
问题
Load: 1,000 users | p95: 3,500ms ❌ | Throughput: 500 req/s ❌
Error rate: 5% ❌ | CPU: 95% ❌ | Memory: 90% ❌
根因分析
  1. 关联指标:响应时间飙升时,哪些指标发生了变化?
  2. 检查日志:错误、警告、慢查询
  3. 分析代码性能:时间都花在哪里?
  4. 监控资源:CPU、内存、磁盘
  5. 跟踪请求:端到端流程

反模式

❌ 反模式✅ 更好的做法
测试太晚尽早且频繁地测试
场景不真实模拟真实用户行为
瞬间从 0 增至 1,000 个用户逐步增加负载
测试期间不监控监控所有指标
没有基线建立基线并跟踪趋势
只测试一次持续进行性能测试

Agent 辅助的性能测试

// Comprehensive load test
await Task("Load Test", {
  target: 'https://api.example.com',
  scenarios: {
    checkout: { vus: 100, duration: '5m' },
    search: { vus: 200, duration: '5m' },
    browse: { vus: 500, duration: '5m' }
  },
  thresholds: {
    'http_req_duration': ['p(95)<200'],
    'http_req_failed': ['rate<0.01']
  }
}, "qe-performance-tester");

// Bottleneck analysis
await Task("Analyze Bottlenecks", {
  testResults: perfTest,
  metrics: ['cpu', 'memory', 'db_queries', 'network']
}, "qe-performance-tester");

// CI integration
await Task("CI Performance Gate", {
  mode: 'smoke',
  duration: '1m',
  vus: 10,
  failOn: { 'p95_response_time': 300, 'error_rate': 0.01 }
}, "qe-performance-tester");

Agent 协作提示

内存命名空间
aqe/performance/
├── results/*       - Test execution results
├── baselines/*     - Performance baselines
├── bottlenecks/*   - Identified bottlenecks
└── trends/*        - Historical trends
Fleet 协作
const perfFleet = await FleetManager.coordinate({
  strategy: 'performance-testing',
  agents: [
    'qe-performance-tester',
    'qe-quality-analyzer',
    'qe-production-intelligence',
    'qe-deployment-readiness'
  ],
  topology: 'sequential'
});

预生产检查清单

  • 负载测试通过(预期流量)
  • 压力测试通过(预期流量的 2-3 倍)
  • 峰值测试通过(流量突然激增)
  • 耐久性测试通过(24 小时以上)
  • 已设置数据库索引
  • 已配置缓存
  • 已设置监控和告警
  • 已建立性能基线

相关技能


请记住

性能是一项功能: 像测试功能一样测试性能 持续测试: 不要只在发布前测试 监控生产环境: 合成监控 + 真实用户监控 修复关键问题: 聚焦影响用户的瓶颈 跟踪趋势: 尽早发现性能退化

使用 Agent: Agent 可自动执行负载测试、分析瓶颈并与生产环境进行比较。使用 Agent 在大规模场景下维持性能。

评论

支持 Markdown