Files
张翔 261c45b4d9 feat: 添加性能和安全测试,完善部署文档
阶段五:性能和安全测试
- 创建负载测试脚本:模拟正常用户访问模式
- 创建压力测试脚本:测试系统极限性能
- 创建SQL注入测试脚本:验证SQL注入防护
- 创建XSS防护测试脚本:验证XSS防护
- 添加测试脚本到package.json

阶段六:文档和培训
- 更新README.md:添加监控和告警文档
- 添加性能测试文档和命令
- 添加安全测试文档和命令
- 添加Docker部署文档
- 添加生产环境配置文档
- 添加备份和恢复文档
2026-03-09 11:12:26 +08:00

56 lines
1.5 KiB
JavaScript

import http from 'k6/http';
import { check, sleep } from 'k6';
import { Rate, Trend } from 'k6/metrics';
const errorRate = new Rate('errors');
const responseTime = new Trend('response_time');
export const options = {
stages: [
{ duration: '2m', target: 100 }, // 2分钟内逐步增加到100用户
{ duration: '5m', target: 100 }, // 保持100用户5分钟
{ duration: '2m', target: 200 }, // 2分钟内增加到200用户
{ duration: '5m', target: 200 }, // 保持200用户5分钟
{ duration: '2m', target: 0 }, // 2分钟内减少到0
],
thresholds: {
http_req_duration: ['p(95)<500', 'p(99)<1000'], // 95%请求<500ms, 99%请求<1s
http_req_failed: ['rate<0.01'], // 错误率<1%
errors: ['rate<0.01'],
},
};
const BASE_URL = __ENV.BASE_URL || 'http://localhost:3000';
export default function () {
const pages = [
'/',
'/about',
'/services',
'/products',
'/news',
'/contact',
];
const page = pages[Math.floor(Math.random() * pages.length)];
const res = http.get(`${BASE_URL}${page}`, {
tags: { name: page },
});
const success = check(res, {
'status is 200': (r) => r.status === 200,
'response time < 500ms': (r) => r.timings.duration < 500,
});
errorRate.add(!success);
responseTime.add(res.timings.duration);
sleep(Math.random() * 3 + 1); // 1-4秒随机等待
}
export function handleSummary(data) {
return {
'performance/load-test-summary.json': JSON.stringify(data, null, 2),
};
}