关于 qe-performance-testing
qe-performance-testing 是帮助团队规划和执行性能测试的技能,涵盖 SLO 定义、真实负载场景、测试监控与瓶颈分析,支持多种性能测试类型。
主要功能
- 01定义性能 SLO
- 02规划真实用户负载场景
- 03选择负载及压力测试类型
- 04测试期间监控系统资源
- 05分析瓶颈与测试结果
适用场景
- 01发布前验证预期流量
- 02通过压力测试查找容量上限
- 03活动前测试突发流量
- 04通过耐久测试调查内存泄漏
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ proffesor-for-testing/ agentic-qe --skill qe-performance-testing安装后在 Claude Code 中输入/qe-performance-testing确认已加载。
详细介绍
性能测试
<default_to_action> 进行性能测试或规划负载测试时:
- 定义 SLO:p95 响应时间、吞吐量和错误率目标
- 识别关键路径:营收流程、高流量页面、关键 API
- 创建真实场景:用户旅程、思考时间、丰富多样的数据
- 执行并监控:CPU、内存、数据库查询、网络
- 分析瓶颈,并在上线前修复
快速选择测试类型:
- 验证预期负载 → 负载测试
- 找出性能极限 → 压力测试
- 应对流量骤增 → 峰值测试
- 内存泄漏、资源耗尽 → 耐久/浸泡测试
- 水平/垂直扩展 → 可扩展性测试
成功的关键因素:
- 性能是产品功能,而非事后补充
- 尽早且频繁地测试,而不只是发布前测试
- 聚焦影响用户的瓶颈 </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% ❌
根因分析
- 关联指标:响应时间飙升时,哪些指标发生了变化?
- 检查日志:错误、警告、慢查询
- 分析代码性能:时间都花在哪里?
- 监控资源:CPU、内存、磁盘
- 跟踪请求:端到端流程
反模式
| ❌ 反模式 | ✅ 更好的做法 |
|---|---|
| 测试太晚 | 尽早且频繁地测试 |
| 场景不真实 | 模拟真实用户行为 |
| 瞬间从 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 小时以上)
- 已设置数据库索引
- 已配置缓存
- 已设置监控和告警
- 已建立性能基线
相关技能
- agentic-quality-engineering - Agent 协调
- api-testing-patterns - API 性能
- chaos-engineering-resilience - 韧性测试
请记住
性能是一项功能: 像测试功能一样测试性能 持续测试: 不要只在发布前测试 监控生产环境: 合成监控 + 真实用户监控 修复关键问题: 聚焦影响用户的瓶颈 跟踪趋势: 尽早发现性能退化
使用 Agent: Agent 可自动执行负载测试、分析瓶颈并与生产环境进行比较。使用 Agent 在大规模场景下维持性能。
评论
支持 Markdown