77 lines
1.9 KiB
Markdown
77 lines
1.9 KiB
Markdown
|
|
# 性能回归测试
|
||
|
|
|
||
|
|
本目录包含 Supply API 的性能回归测试,确保关键路径的性能不会随着代码变更而退化。
|
||
|
|
|
||
|
|
## 测试文件
|
||
|
|
|
||
|
|
| 文件 | 说明 |
|
||
|
|
|------|------|
|
||
|
|
| `domain_bench_test.go` | 领域模型性能测试(账号、套餐、结算服务) |
|
||
|
|
| `middleware_bench_test.go` | 中间件性能测试(认证、限流、追踪、幂等) |
|
||
|
|
|
||
|
|
## 运行方式
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 运行所有性能测试(跳过快速测试)
|
||
|
|
go test -tags=slow ./internal/benchmark/...
|
||
|
|
|
||
|
|
# 运行特定基准测试
|
||
|
|
go test -tags=slow -run=XXX ./internal/benchmark/... -bench=BenchmarkAccountService_Create
|
||
|
|
|
||
|
|
# 查看内存分配
|
||
|
|
go test -tags=slow ./internal/benchmark/... -bench=BenchmarkAccountService_Create -benchmem
|
||
|
|
|
||
|
|
# 输出详细信息
|
||
|
|
go test -tags=slow ./internal/benchmark/... -bench=BenchmarkAccountService_Create -v
|
||
|
|
```
|
||
|
|
|
||
|
|
## 性能目标
|
||
|
|
|
||
|
|
| 模块 | 操作 | 目标 | 阈值 |
|
||
|
|
|------|------|------|------|
|
||
|
|
| AccountService | Create | < 1ms | 5ms |
|
||
|
|
| AccountService | Verify | < 5ms | 10ms |
|
||
|
|
| PackageService | CreateDraft | < 2ms | 10ms |
|
||
|
|
| PackageService | BatchUpdatePrice(50) | < 20ms | 50ms |
|
||
|
|
| SettlementService | Withdraw | < 5ms | 20ms |
|
||
|
|
| Middleware | Auth | < 0.5ms | 1ms |
|
||
|
|
| Middleware | RateLimit | < 0.2ms | 0.5ms |
|
||
|
|
| Middleware | Tracing | < 0.1ms | 0.5ms |
|
||
|
|
|
||
|
|
## CI/CD 集成
|
||
|
|
|
||
|
|
性能测试在 CI/CD 中作为门禁检查:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
# .github/workflows/performance.yml
|
||
|
|
- name: Run Performance Tests
|
||
|
|
run: |
|
||
|
|
go test -tags=slow -bench=. -benchmem ./internal/benchmark/... \
|
||
|
|
| tee performance_report.txt
|
||
|
|
```
|
||
|
|
|
||
|
|
## 添加新的性能测试
|
||
|
|
|
||
|
|
```go
|
||
|
|
//go:build slow
|
||
|
|
// +build slow
|
||
|
|
|
||
|
|
package benchmark
|
||
|
|
|
||
|
|
func BenchmarkYourOperation(b *testing.B) {
|
||
|
|
if testing.Short() {
|
||
|
|
b.Skip("Skipping benchmark in short mode")
|
||
|
|
}
|
||
|
|
|
||
|
|
// 准备测试数据
|
||
|
|
setup()
|
||
|
|
|
||
|
|
b.ResetTimer()
|
||
|
|
b.ReportAllocs()
|
||
|
|
|
||
|
|
for i := 0; i < b.N; i++ {
|
||
|
|
// 执行被测操作
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|