thunderbench 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +818 -0
  3. package/bin/darwin-arm64/wrk +0 -0
  4. package/dist/cli.d.ts +3 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/core/config-validation.d.ts +7 -0
  7. package/dist/core/config-validation.d.ts.map +1 -0
  8. package/dist/core/json-report-generator.d.ts +174 -0
  9. package/dist/core/json-report-generator.d.ts.map +1 -0
  10. package/dist/core/markdown-report-generator.d.ts +16 -0
  11. package/dist/core/markdown-report-generator.d.ts.map +1 -0
  12. package/dist/core/report-storage.d.ts +10 -0
  13. package/dist/core/report-storage.d.ts.map +1 -0
  14. package/dist/core/stats-calculation.d.ts +16 -0
  15. package/dist/core/stats-calculation.d.ts.map +1 -0
  16. package/dist/core/weight-distribution.d.ts +9 -0
  17. package/dist/core/weight-distribution.d.ts.map +1 -0
  18. package/dist/core/wrk-test-engine.d.ts +181 -0
  19. package/dist/core/wrk-test-engine.d.ts.map +1 -0
  20. package/dist/index.d.ts +39 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +10494 -0
  23. package/dist/types/index.d.ts +88 -0
  24. package/dist/types/index.d.ts.map +1 -0
  25. package/dist/utils/wrk-binary.d.ts +41 -0
  26. package/dist/utils/wrk-binary.d.ts.map +1 -0
  27. package/docs/cli-usage.md +245 -0
  28. package/docs/requirements.md +222 -0
  29. package/examples/complex-config.ts +244 -0
  30. package/examples/complex-wrk-demo.ts +121 -0
  31. package/examples/programmatic-usage-cjs.js +156 -0
  32. package/examples/programmatic-usage.js +205 -0
  33. package/examples/simple-wrk-config.js +33 -0
  34. package/package.json +68 -0
  35. package/scripts/setup-wrk.js +98 -0
package/README.md ADDED
@@ -0,0 +1,818 @@
1
+ # ThunderBench
2
+
3
+ <div align="center">
4
+
5
+ ![ThunderBench Logo](https://img.shields.io/badge/ThunderBench-blue?style=for-the-badge&logo=lightning)
6
+ ![Version](https://img.shields.io/npm/v/thunderbench?style=flat-square)
7
+ ![License](https://img.shields.io/npm/l/thunderbench?style=flat-square)
8
+ ![Node.js](https://img.shields.io/node/v/thunderbench?style=flat-square)
9
+
10
+ **高性能 API 性能测试工具核心引擎**
11
+
12
+ [🚀 快速开始](#-快速开始) • [📖 使用文档](#-使用文档) • [🔧 API 参考](#-api-参考) • [⚡ 竞品对比](#-竞品对比) • [🤝 贡献指南](#-贡献指南)
13
+
14
+ </div>
15
+
16
+ ---
17
+
18
+ ## ✨ 核心特性
19
+
20
+ - **🚀 高性能引擎**:基于 WRK 的高性能测试引擎,支持百万级并发
21
+ - **💻 编程 API**:完整的 Node.js/TypeScript 编程接口,易于集成
22
+ - **🔒 类型安全**:完整的 TypeScript 类型定义,开发体验优秀
23
+ - **📊 实时监控**:进度和统计流监控,支持实时数据观察
24
+ - **⚙️ 灵活配置**:支持复杂的测试场景配置和权重分配
25
+ - **🌐 跨平台**:内置跨平台 WRK 二进制文件,开箱即用
26
+ - **📈 丰富报告**:支持 JSON、Markdown 等多种报告格式,提供详细的性能分析
27
+ - **🔄 流式处理**:基于 RxJS 的响应式数据流处理
28
+
29
+ ## 🚀 快速开始
30
+
31
+ ### 安装
32
+
33
+ ```bash
34
+ # 使用 npm
35
+ npm install thunderbench
36
+
37
+ # 使用 yarn
38
+ yarn add thunderbench
39
+
40
+ # 使用 bun
41
+ bun add thunderbench
42
+
43
+ # 使用 pnpm
44
+ pnpm add thunderbench
45
+ ```
46
+
47
+ ### 基本使用
48
+
49
+ ```javascript
50
+ import { runBenchmark, validateConfig } from 'thunderbench';
51
+
52
+ // 定义测试配置
53
+ const config = {
54
+ name: "API 性能测试",
55
+ description: "测试 API 端点的性能表现",
56
+ groups: [{
57
+ name: "用户 API 测试组",
58
+ http: {
59
+ baseUrl: "https://api.example.com",
60
+ headers: { "Authorization": "Bearer token" }
61
+ },
62
+ threads: 4, // 4个线程
63
+ connections: 100, // 100个并发连接
64
+ duration: 30, // 测试持续30秒
65
+ timeout: 10, // 10秒超时
66
+ latency: true, // 记录延迟统计
67
+ executionMode: "parallel", // 并行执行
68
+ tests: [{
69
+ name: "获取用户列表",
70
+ request: {
71
+ method: "GET",
72
+ url: "/users"
73
+ },
74
+ weight: 70 // 70% 的请求权重
75
+ }, {
76
+ name: "创建用户",
77
+ request: {
78
+ method: "POST",
79
+ url: "/users",
80
+ headers: { "Content-Type": "application/json" },
81
+ body: JSON.stringify({ name: "测试用户", email: "test@example.com" })
82
+ },
83
+ weight: 30 // 30% 的请求权重
84
+ }]
85
+ }]
86
+ };
87
+
88
+ // 验证配置
89
+ validateConfig(config);
90
+
91
+ // 运行测试
92
+ const result = await runBenchmark(config, {
93
+ verbose: true,
94
+ outputDir: "./reports"
95
+ });
96
+
97
+ console.log("测试完成:", result);
98
+ ```
99
+
100
+ ## 📖 使用文档
101
+
102
+ ### 1. 配置结构
103
+
104
+ ThunderBench 使用分层配置结构,支持复杂的测试场景:
105
+
106
+ ```javascript
107
+ {
108
+ name: "测试名称", // 测试项目名称
109
+ description: "测试描述", // 测试项目描述
110
+ groups: [ // 测试组数组
111
+ {
112
+ name: "测试组名称", // 测试组名称
113
+ http: { // HTTP 配置
114
+ baseUrl: "http://localhost:3000", // 基础 URL
115
+ headers: { // 全局请求头
116
+ "User-Agent": "thunderbench/1.0.0",
117
+ "Authorization": "Bearer token"
118
+ }
119
+ },
120
+ threads: 4, // 线程数
121
+ connections: 100, // 并发连接数
122
+ duration: 30, // 测试时长(秒)
123
+ timeout: 10, // 超时时间(秒)
124
+ latency: true, // 是否记录延迟统计
125
+ executionMode: "parallel", // 执行模式:parallel/serial
126
+ tests: [ // 测试用例数组
127
+ {
128
+ name: "测试用例名称", // 测试用例名称
129
+ request: { // 请求配置
130
+ method: "GET", // HTTP 方法
131
+ url: "/api/endpoint", // 请求路径
132
+ headers: {}, // 请求头(覆盖全局)
133
+ body: "" // 请求体
134
+ },
135
+ weight: 100 // 权重(百分比)
136
+ }
137
+ ]
138
+ }
139
+ ]
140
+ }
141
+ ```
142
+
143
+ ### 2. 高级配置示例
144
+
145
+ #### 复杂测试场景
146
+
147
+ ```javascript
148
+ const complexConfig = {
149
+ name: "电商系统性能测试",
150
+ description: "模拟真实用户行为的多场景测试",
151
+ groups: [
152
+ {
153
+ name: "首页访问组",
154
+ http: { baseUrl: "https://shop.example.com" },
155
+ threads: 8,
156
+ connections: 200,
157
+ duration: 60,
158
+ tests: [
159
+ { name: "首页", request: { method: "GET", url: "/" }, weight: 40 },
160
+ { name: "商品列表", request: { method: "GET", url: "/products" }, weight: 30 },
161
+ { name: "搜索", request: { method: "GET", url: "/search?q=phone" }, weight: 30 }
162
+ ]
163
+ },
164
+ {
165
+ name: "用户操作组",
166
+ http: {
167
+ baseUrl: "https://shop.example.com",
168
+ headers: { "Authorization": "Bearer user-token" }
169
+ },
170
+ threads: 4,
171
+ connections: 50,
172
+ duration: 60,
173
+ tests: [
174
+ { name: "用户信息", request: { method: "GET", url: "/user/profile" }, weight: 50 },
175
+ { name: "订单列表", request: { method: "GET", url: "/user/orders" }, weight: 30 },
176
+ { name: "购物车", request: { method: "GET", url: "/user/cart" }, weight: 20 }
177
+ ]
178
+ }
179
+ ]
180
+ };
181
+ ```
182
+
183
+ #### 动态请求配置
184
+
185
+ ```javascript
186
+ const dynamicConfig = {
187
+ name: "动态参数测试",
188
+ groups: [{
189
+ name: "动态测试组",
190
+ http: { baseUrl: "https://api.example.com" },
191
+ threads: 2,
192
+ connections: 20,
193
+ duration: 30,
194
+ tests: [
195
+ {
196
+ name: "动态用户ID",
197
+ request: {
198
+ method: "GET",
199
+ url: "/users/{userId}",
200
+ headers: { "X-User-ID": "{userId}" }
201
+ },
202
+ weight: 100,
203
+ // 支持动态参数替换
204
+ dynamicParams: {
205
+ userId: ["1", "2", "3", "4", "5"]
206
+ }
207
+ }
208
+ ]
209
+ }]
210
+ };
211
+ ```
212
+
213
+ ### 3. 编程 API 使用
214
+
215
+ #### 基础用法
216
+
217
+ ```javascript
218
+ import { ThunderBench } from 'thunderbench';
219
+
220
+ const thunderbench = new ThunderBench(config, {
221
+ outputDir: "./reports",
222
+ verbose: true,
223
+ cleanupWrk: true
224
+ });
225
+
226
+ // 运行测试
227
+ const result = await thunderbench.runBenchmark();
228
+ console.log("测试结果:", result);
229
+ ```
230
+
231
+ #### 流式监控
232
+
233
+ ```javascript
234
+ // 监听进度
235
+ thunderbench.getProgressStream().subscribe(progress => {
236
+ console.log(`进度: ${progress.percentage}% (${progress.current}/${progress.total})`);
237
+ });
238
+
239
+ // 监听实时统计
240
+ thunderbench.getStatsStream().subscribe(stats => {
241
+ console.log(`实时统计: ${stats.requestsPerSecond} req/s, 延迟: ${stats.latency}ms`);
242
+ });
243
+
244
+ // 监听错误
245
+ thunderbench.getErrorStream().subscribe(error => {
246
+ console.error("测试错误:", error);
247
+ });
248
+ ```
249
+
250
+ #### 资源管理
251
+
252
+ ```javascript
253
+ try {
254
+ const result = await thunderbench.runBenchmark();
255
+ console.log("测试完成:", result);
256
+ } finally {
257
+ // 清理资源
258
+ thunderbench.destroy();
259
+ }
260
+ ```
261
+
262
+ ### 4. 命令行使用
263
+
264
+ ```bash
265
+ # 安装 CLI 工具
266
+ npm install -g thunderbench
267
+
268
+ # 运行测试
269
+ thunderbench --config examples/complex-config.ts
270
+
271
+ # 详细输出模式
272
+ thunderbench --config examples/complex-config.ts --verbose
273
+
274
+ # 自定义输出目录
275
+ thunderbench --config examples/complex-config.ts --output ./my-reports
276
+
277
+ # 配置验证(不执行测试)
278
+ thunderbench --config examples/complex-config.ts --dry-run
279
+ ```
280
+
281
+ ## 📊 报告格式
282
+
283
+ ThunderBench 支持多种报告格式,每种格式都提供详细的性能分析数据。
284
+
285
+ ### 1. JSON 报告格式
286
+
287
+ JSON 报告采用 K6 兼容的格式,便于集成到 CI/CD 流程和数据分析工具中。
288
+
289
+ #### 报告结构
290
+
291
+ ```json
292
+ {
293
+ "metadata": {
294
+ "timestamp": "2024-01-15T10:30:00.000Z",
295
+ "startTime": "2024-01-15T10:30:00.000Z",
296
+ "endTime": "2024-01-15T10:30:30.000Z",
297
+ "duration": 30000,
298
+ "generatedAt": "2024-01-15T10:30:30.000Z",
299
+ "version": "ThunderBench v1.0.3",
300
+ "tool": "wrk",
301
+ "config": {
302
+ "totalGroups": 2,
303
+ "totalTests": 5
304
+ },
305
+ "system": {
306
+ "platform": "darwin",
307
+ "arch": "arm64",
308
+ "nodeVersion": "v18.17.0",
309
+ "cpuCount": 8,
310
+ "memory": "16GB"
311
+ }
312
+ },
313
+ "metrics": {
314
+ "requests": {
315
+ "total": 150000,
316
+ "successful": 149850,
317
+ "failed": 150,
318
+ "rate": 5000
319
+ },
320
+ "latency": {
321
+ "avg": 45.2,
322
+ "min": 12.1,
323
+ "max": 1250.8,
324
+ "p50": 38.5,
325
+ "p90": 89.2,
326
+ "p95": 156.7,
327
+ "p99": 298.4
328
+ },
329
+ "errors": {
330
+ "count": 150,
331
+ "rate": 0.001
332
+ },
333
+ "transfer": {
334
+ "total": 52428800,
335
+ "perSecond": 1747627
336
+ }
337
+ },
338
+ "groups": [
339
+ {
340
+ "name": "用户 API 测试组",
341
+ "config": {
342
+ "http": {
343
+ "baseUrl": "https://api.example.com"
344
+ },
345
+ "executionMode": "parallel",
346
+ "threads": 4,
347
+ "connections": 100,
348
+ "duration": 30,
349
+ "tests": [
350
+ {
351
+ "name": "获取用户列表",
352
+ "weight": 70,
353
+ "method": "GET",
354
+ "path": "/users"
355
+ }
356
+ ]
357
+ },
358
+ "metrics": {
359
+ "requests": {
360
+ "total": 100000,
361
+ "successful": 99800,
362
+ "failed": 200,
363
+ "rate": 3333
364
+ },
365
+ "latency": {
366
+ "avg": 42.1,
367
+ "min": 15.2,
368
+ "max": 980.5,
369
+ "p50": 35.8,
370
+ "p90": 82.1,
371
+ "p95": 145.3,
372
+ "p99": 275.6
373
+ }
374
+ }
375
+ }
376
+ ]
377
+ }
378
+ ```
379
+
380
+ #### 关键指标说明
381
+
382
+ - **metadata**: 测试元数据,包括时间戳、配置信息、系统信息
383
+ - **metrics**: 总体性能指标,包含请求统计、延迟统计、错误统计、数据传输统计
384
+ - **groups**: 各测试组的详细配置和性能数据
385
+ - **latency**: 延迟统计,包含 P50、P90、P95、P99 等百分位数
386
+
387
+ ### 2. Markdown 报告格式
388
+
389
+ Markdown 报告提供人类可读的格式,包含性能评级和可视化元素。
390
+
391
+ #### 报告结构
392
+
393
+ ```markdown
394
+ # ⚡ ThunderBench 性能测试报告
395
+
396
+ **测试时间**: 2024-01-15 18:30:00
397
+ **总耗时**: 30.0s
398
+ **测试工具**: ThunderBench v1.0.0
399
+
400
+ ---
401
+
402
+ ## 📊 总体性能平均值
403
+
404
+ | 性能指标 | 值 | 状态 |
405
+ |----------|----|------|
406
+ | **总请求数** | 150,000 | 🥇 大量 |
407
+ | **成功请求** | 149,850 | ✅ 优秀 |
408
+ | **失败请求** | 150 | ⚠️ 注意 |
409
+ | **总体成功率** | 99.90% | ✅ 优秀 |
410
+ | **平均吞吐量** | **5,000** req/s | 🥈 良好 |
411
+ | **平均延迟** | **45.20** ms | ✅ 正常 |
412
+ | **P95延迟** | **156.70** ms | ✅ 正常 |
413
+ | **总体评级** | 🥈 良好性能 | 综合评估结果 |
414
+
415
+ ---
416
+
417
+ ## 🏆 组性能
418
+
419
+ ### 📈 测试组排名
420
+
421
+ | 排名 | 测试组 | 吞吐量 (req/s) | 延迟 (ms) | 成功率 | 数据传输 (MB) | 状态 |
422
+ |------|--------|----------------|-----------|--------|---------------|------|
423
+ | 1 | 🥇 **用户 API 测试组** | **3,333** | 42.10 | 99.80% | 50.00 | 🥇 |
424
+ | 2 | 🥈 **商品 API 测试组** | **1,667** | 48.30 | 99.95% | 25.00 | 🥇 |
425
+
426
+ ### 📋 详细组性能
427
+
428
+ #### 🔧 用户 API 测试组
429
+
430
+ **配置**: 🔄 并行 | 线程: 4 | 连接: 100 | 时长: 30s
431
+
432
+ | 指标 | 值 | 描述 |
433
+ |------|----|------|
434
+ | **总请求数** | 100,000 | 该组的总请求数 |
435
+ | **成功请求** | 99,800 | 成功处理的请求数 |
436
+ | **失败请求** | 200 | 失败的请求数 |
437
+ | **成功率** | 99.80% | 请求成功率 |
438
+ | **吞吐量** | **3,333** req/s | 每秒处理能力 |
439
+ | **错误率** | 0.20% | 请求错误率 |
440
+ | **数据传输** | 50.00 MB | 响应数据总量 |
441
+
442
+ **延迟统计**:
443
+
444
+ | 延迟指标 | 值 (ms) | 说明 |
445
+ |----------|---------|------|
446
+ | **平均延迟** | 42.10 | 所有请求的平均响应时间 |
447
+ | **最小延迟** | 15.20 | 最快的响应时间 |
448
+ | **最大延迟** | 980.50 | 最慢的响应时间 |
449
+ | **P50延迟** | 35.80 | 50%请求的响应时间 |
450
+ | **P90延迟** | 82.10 | 90%请求的响应时间 |
451
+ | **P95延迟** | 145.30 | 95%请求的响应时间 |
452
+ | **P99延迟** | 275.60 | 99%请求的响应时间 |
453
+ ```
454
+
455
+ #### 性能评级说明
456
+
457
+ - **🏆 极致性能**: 吞吐量 > 100,000 req/s
458
+ - **🥇 优秀性能**: 吞吐量 > 50,000 req/s
459
+ - **🥈 良好性能**: 吞吐量 > 20,000 req/s
460
+ - **🥉 一般性能**: 吞吐量 ≤ 20,000 req/s
461
+
462
+ ### 3. 报告配置选项
463
+
464
+ ```javascript
465
+ const reportOptions = {
466
+ outputDir: "./reports", // 报告输出目录
467
+ format: ["json", "markdown"], // 报告格式
468
+ includeSystemInfo: true, // 包含系统信息
469
+ includeConfig: true, // 包含测试配置
470
+ includeRawData: false, // 包含原始数据
471
+ customTemplates: "./templates" // 自定义模板目录
472
+ };
473
+
474
+ // 生成报告
475
+ const result = await runBenchmark(config, reportOptions);
476
+ ```
477
+
478
+ ### 4. 报告集成
479
+
480
+ #### CI/CD 集成
481
+
482
+ ```yaml
483
+ # GitHub Actions 示例
484
+ - name: 性能测试
485
+ run: thunderbench --config test-config.ts
486
+
487
+ - name: 上传报告
488
+ uses: actions/upload-artifact@v3
489
+ with:
490
+ name: performance-reports
491
+ path: reports/
492
+ ```
493
+
494
+ #### 数据分析集成
495
+
496
+ ```javascript
497
+ // 读取 JSON 报告进行分析
498
+ import fs from 'fs';
499
+
500
+ const report = JSON.parse(fs.readFileSync('./reports/report.json', 'utf8'));
501
+
502
+ // 分析性能趋势
503
+ const performanceTrend = {
504
+ throughput: report.metrics.requests.rate,
505
+ latency: report.metrics.latency.avg,
506
+ errorRate: report.metrics.errors.rate,
507
+ timestamp: report.metadata.timestamp
508
+ };
509
+
510
+ // 发送到监控系统
511
+ sendToMonitoringSystem(performanceTrend);
512
+ ```
513
+
514
+ ---
515
+
516
+ ## 🔧 API 参考
517
+
518
+ ### 核心类
519
+
520
+ #### ThunderBench
521
+
522
+ 主要的测试引擎类,提供完整的测试生命周期管理。
523
+
524
+ ```typescript
525
+ class ThunderBench {
526
+ constructor(config: BenchmarkConfig, options?: ThunderBenchOptions)
527
+
528
+ // 运行测试
529
+ runBenchmark(): Promise<BenchmarkResult>
530
+
531
+ // 获取进度流
532
+ getProgressStream(): Observable<ProgressEvent>
533
+
534
+ // 获取统计流
535
+ getStatsStream(): Observable<StatsEvent>
536
+
537
+ // 获取错误流
538
+ getErrorStream(): Observable<ErrorEvent>
539
+
540
+ // 清理资源
541
+ destroy(): void
542
+ }
543
+ ```
544
+
545
+ #### 配置类型
546
+
547
+ ```typescript
548
+ interface BenchmarkConfig {
549
+ name: string;
550
+ description?: string;
551
+ groups: TestGroupConfig[];
552
+ }
553
+
554
+ interface TestGroupConfig {
555
+ name: string;
556
+ http: HttpConfig;
557
+ threads: number;
558
+ connections: number;
559
+ duration: number;
560
+ timeout?: number;
561
+ latency?: boolean;
562
+ executionMode: 'parallel' | 'serial';
563
+ tests: ApiTestConfig[];
564
+ }
565
+
566
+ interface ApiTestConfig {
567
+ name: string;
568
+ request: RequestConfig;
569
+ weight: number;
570
+ dynamicParams?: Record<string, string[]>;
571
+ }
572
+ ```
573
+
574
+ ### 便捷函数
575
+
576
+ ```typescript
577
+ // 快速运行测试
578
+ function runBenchmark(
579
+ config: BenchmarkConfig,
580
+ options?: RunBenchmarkOptions
581
+ ): Promise<BenchmarkResult>
582
+
583
+ // 配置验证
584
+ function validateConfig(config: BenchmarkConfig): ValidationResult
585
+
586
+ // 生成报告
587
+ function generateReport(
588
+ result: BenchmarkResult,
589
+ format: 'json' | 'markdown'
590
+ ): string
591
+ ```
592
+
593
+ ## ⚡ 竞品对比
594
+
595
+ ### 📊 2025 开源负载测试工具全面横评表
596
+
597
+ | 工具 | 编程语言 | 脚本方式 | 支持协议 | 分布式支持 | 单节点最大 RPS(估算) | 集群最大 RPS(参考) | HTTP/3 & QUIC | gRPC | Web UI | 实时监控 | 报告能力 | CI/CD 友好 | 学习曲线 | 社区活跃度 | 典型应用场景 | 官网/源码 |
598
+ |------|--------|----------|-----------|-------------|------------------------|----------------------|---------------|--------|---------|------------|------------|--------------|------------|----------------|------------------|-------------|
599
+ | **ThunderBench** | TypeScript/JS | CLI + TS/JS 脚本 | HTTP/1.1, HTTP/2 | ❌(需手动部署多实例) | 🔥 **150k–200k+** | ❌(无原生支持) | ❌ | ❌ | ❌ | ✅(RxJS 流) | ✅(JSON/MD) | ✅✅✅(Node.js 生态) | 低(TS 友好) | ⭐⭐⭐⭐⭐ | Node.js 项目、高性能 API 测试 | [github.com/thunderbench/thunderbench](https://github.com/thunderbench/thunderbench) |
600
+ | **wrk** | C + Lua | CLI + Lua 脚本 | HTTP/1.1<br>(HTTP/2 via patch) | ❌(需手动部署多实例) | 🔥 **150k–200k+** | ❌(无原生支持) | ❌ | ❌ | ❌ | ⚠️(终端输出) | ⚠️(基础文本) | ✅(轻量易集成) | 中等 | ⭐⭐⭐⭐☆ | 极致吞吐压测、性能基线测试 | [github.com/wg/wrk](https://github.com/wg/wrk) |
601
+ | **k6** | JavaScript/TypeScript | JS/TS 脚本 | HTTP/1.1, HTTP/2<br>✅ HTTP/3 (QUIC)<br>gRPC (实验) | ✅(k6-operator on K8s) | 50k–80k | ✅ **500k+** | ✅ | ✅(实验) | ✅(CLI Dashboard) | ✅(终端 + Prometheus) | ✅(JSON/HTML) | ✅✅✅(DevOps 首选) | 低–中 | ⭐⭐⭐⭐⭐ | 云原生、CI/CD、高并发 API 测试 | [k6.io](https://k6.io) |
602
+ | **Gatling** | Scala(DSL) | Scala 代码 | HTTP/1.1, HTTP/2<br>WebSockets, MQTT, SSE | ✅(自建集群) | 30k–50k | ✅ 100k+ | ❌ | ❌ | ✅(Web 控制台) | ✅(实时图表) | ✅✅✅(精美 HTML 报告) | ✅(支持 CLI) | 中–高 | ⭐⭐⭐⭐☆ | 高性能 Web 测试、精准性能建模 | [gatling.io](https://gatling.io) |
603
+ | **Locust** | Python | Python 代码 | 任意(自定义) | ✅(Master-Worker) | 15k–25k | ✅ **200k+** | ⚠️(需集成 `http3` 库) | ✅(通过 gRPC 库) | ✅✅✅(实时 Web UI) | ✅✅✅(实时图表 + 指标) | ✅(Web + CSV) | ✅✅(Python 生态无缝) | 低(Python 友好) | ⭐⭐⭐⭐⭐ | 复杂用户行为、动态逻辑、Python 团队 | [locust.io](https://locust.io) |
604
+ | **Apache JMeter** | Java | GUI / XML / 模块化 | HTTP, HTTPS, JDBC, FTP, TCP, WebSocket, JMS, SMTP, gRPC (插件) | ✅(Master-Slave) | 8k–15k | ✅ 100k+ | ❌(需插件,不成熟) | ✅(插件) | ✅(Swing GUI) | ✅(监听器 + 插件) | ✅✅(丰富插件报告) | ✅(支持 CLI 模式) | 中等 | ⭐⭐⭐⭐⭐ | 企业级复杂流程、非开发人员使用 | [jmeter.apache.org](https://jmeter.apache.org) |
605
+ | **Artillery** | YAML + JS | YAML 配置 + JS 脚本 | HTTP/1.1, HTTP/2<br>WebSockets, Socket.IO<br>gRPC (实验) | ✅(Docker/K8s 部署) | 25k–40k | ✅ 150k+ | ⚠️(实验性) | ✅(实验) | ✅(CLI Dashboard) | ✅(终端 + Prometheus) | ✅(JSON/HTML) | ✅✅(Node.js 友好) | 低(YAML 简洁) | ⭐⭐⭐⭐ | 微服务、Node.js 项目、快速上手 | [artillery.io](https://artillery.io) |
606
+ | **Tsung** | Erlang | XML 配置文件 | HTTP, WebDAV, SOAP, PostgreSQL, MySQL, XMPP, LDAP | ✅(原生分布式) | 10k–20k | ✅ 100k+ | ❌ | ❌ | ✅(Web 报告) | ✅(实时图表) | ✅(图表 + 日志) | ⚠️(配置复杂) | 高(Erlang 小众) | ⭐⭐⭐ | 长连接、IM、高并发连接测试 | [tsung.fr](http://tsung.fr) |
607
+
608
+ ### 🔑 关键维度说明
609
+
610
+ | 维度 | 说明 |
611
+ |------|------|
612
+ | **单节点最大 RPS** | 在高端服务器(16核+32GB RAM)对简单 GET 请求的极限吞吐能力(理想环境) |
613
+ | **HTTP/3 & QUIC** | 是否原生支持新一代基于 UDP 的 HTTP 协议,对 CDN、边缘服务测试至关重要 |
614
+ | **gRPC 支持** | 是否支持现代微服务通信协议 gRPC(基于 HTTP/2) |
615
+ | **Web UI** | 是否提供图形化控制台用于配置或监控 |
616
+ | **实时监控** | 是否支持压测过程中实时查看 TPS、响应时间、错误率等指标 |
617
+ | **报告能力** | 是否生成结构化或可视化报告(HTML/JSON/图表) |
618
+ | **CI/CD 友好** | 是否支持无头模式、脚本化、与 Jenkins/GitLab CI 集成 |
619
+ | **学习曲线** | 入门难度:低(<1天)、中(1–3天)、高(>3天) |
620
+ | **社区活跃度** | GitHub Stars、Issue 响应、文档质量、更新频率(⭐越多越活跃) |
621
+
622
+ ### 🏆 2025 推荐场景速查表
623
+
624
+ | 你的需求 | 推荐工具 |
625
+ |--------|----------|
626
+ | 追求**极限 RPS** 和**低资源消耗** | ✅ **wrk** 或 **ThunderBench** |
627
+ | **Node.js 项目 + 高性能 + 类型安全** | ✅ **ThunderBench** |
628
+ | **云原生 + CI/CD + 高并发** | ✅ **k6** |
629
+ | **复杂用户行为 + Python 技术栈** | ✅ **Locust** |
630
+ | **精美报告 + 精准建模** | ✅ **Gatling** |
631
+ | **企业级复杂流程 + 图形化操作** | ✅ **JMeter** |
632
+ | **微服务 + YAML 配置 + 快速上手** | ✅ **Artillery** |
633
+ | **长连接 + IM + 高并发连接数** | ✅ **Tsung** |
634
+ | **HTTP/3 / QUIC 协议测试** | ✅ **k6** 或 **自定义 wrk 补丁版** |
635
+
636
+ ### 💡 总结建议(2025)
637
+
638
+ - **首选推荐(综合性能 + 现代化)**:**ThunderBench**、**k6** 和 **Locust**
639
+ - **性能基准测试**:**wrk** 和 **ThunderBench** 是"黄金标准"
640
+ - **传统企业级测试**:**JMeter** 依然不可替代
641
+ - **未来趋势**:支持 **HTTP/3、gRPC、K8s 原生部署** 的工具(如 k6)将成为主流
642
+ - **Node.js 生态**:**ThunderBench** 为 Node.js 开发者提供了最佳的性能测试解决方案
643
+
644
+ ## 🛠️ 开发指南
645
+
646
+ ### 环境要求
647
+
648
+ - Node.js >= 18.0.0
649
+ - Bun >= 1.0.0 (推荐)
650
+ - TypeScript >= 5.0.0
651
+
652
+ ### 开发设置
653
+
654
+ ```bash
655
+ # 克隆仓库
656
+ git clone https://github.com/thunderbench/thunderbench.git
657
+ cd thunderbench
658
+
659
+ # 安装依赖
660
+ bun install
661
+
662
+ # 开发模式
663
+ bun run dev
664
+
665
+ # 构建项目
666
+ bun run build
667
+
668
+ # 运行测试
669
+ bun run test
670
+
671
+ # 类型检查
672
+ bun run type-check
673
+ ```
674
+
675
+ ### 项目结构
676
+
677
+ ```
678
+ thunderbench/
679
+ ├── src/ # 源代码
680
+ │ ├── core/ # 核心引擎
681
+ │ ├── types/ # 类型定义
682
+ │ └── utils/ # 工具函数
683
+ ├── examples/ # 配置示例
684
+ ├── docs/ # 文档
685
+ ├── scripts/ # 构建脚本
686
+ └── bin/ # WRK 二进制文件
687
+ ```
688
+
689
+ ## 📊 性能基准
690
+
691
+ ### 测试环境
692
+ - **目标**: Nginx 静态文件服务
693
+
694
+ ### 测试结果
695
+
696
+ > ⚠️ **重要声明**: 以下数据为**估算数据**,并非权威的基准测试结果。实际性能表现取决于测试环境、目标系统、网络条件、配置参数等多种因素。强烈建议用户在实际使用中进行自己的基准测试以获得准确数据。
697
+
698
+ | 排名 | 工具 | 最大 RPS(估算) | 性能评级 |
699
+ |------|------|------------------|----------|
700
+ | 🥇 **1️⃣** | **wrk** | 🔥 **200,000+** | 🏆 极致性能 |
701
+ | 🥈 **2️⃣** | **k6** | **50,000 – 80,000** | 🥇 优秀性能 |
702
+ | 🥉 **3️⃣** | **Gatling** | **30,000 – 50,000** | 🥈 良好性能 |
703
+ | **4️⃣** | **Artillery / wrk2** | **25,000 – 40,000** | 🥈 良好性能 |
704
+ | **5️⃣** | **Locust** | **15,000 – 25,000** | 🥉 一般性能 |
705
+ | **6️⃣** | **JMeter** | **8,000 – 15,000** | 🥉 一般性能 |
706
+ | **🌟** | **ThunderBench** | **≈ wrk 性能** | 🏆 极致性能 |
707
+
708
+ ### 性能说明
709
+
710
+ > 📊 **性能数据来源说明**: 以下排名基于工具特性和一般性认知,仅供参考。实际性能表现取决于测试环境、目标系统、网络条件、配置参数等多种因素。
711
+
712
+ - **ThunderBench**: 基于 WRK 引擎,性能与原生 WRK 基本一致,同时提供丰富的配置验证和报告生成功能
713
+ - **wrk**: C 语言实现,性能测试工具的性能标杆,适合追求极致性能的场景
714
+ - **k6**: Go 语言实现,现代工具,性能表现优秀,支持复杂的测试逻辑
715
+ - **Gatling**: Scala 实现,企业级工具,性能表现良好,支持复杂的测试场景
716
+ - **Artillery**: Node.js 实现,简单易用,适合快速性能测试
717
+ - **Locust**: Python 实现,支持复杂的用户行为模拟,性能表现中等
718
+ - **JMeter**: Java 实现,功能全面,但性能受 JVM 配置影响较大
719
+
720
+ ### 权威基准测试资源
721
+
722
+ 为了获得准确的性能数据,建议参考以下权威资源:
723
+
724
+ - **[TechEmpower Web Framework Benchmarks](https://www.techempower.com/benchmarks/)** - 权威的 Web 框架性能基准
725
+ - **[wrk 官方文档](https://github.com/wg/wrk)** - 官方性能数据和最佳实践
726
+ - **[k6 性能指南](https://k6.io/docs/testing-guides/)** - 官方性能优化建议
727
+ - **[JMeter 性能调优](https://jmeter.apache.org/usermanual/best-practices.html)** - 官方性能调优指南
728
+ - **[Artillery 性能测试](https://www.artillery.io/docs/guides/performance-testing)** - 官方性能测试指南
729
+
730
+ ### 实际测试建议
731
+
732
+ ```bash
733
+ # 使用 ThunderBench 进行基准测试
734
+ thunderbench --config benchmark-config.ts --verbose
735
+
736
+ # 对比测试不同工具
737
+ # 1. 确保测试环境一致
738
+ # 2. 使用相同的目标系统
739
+ # 3. 控制网络条件
740
+ # 4. 多次测试取平均值
741
+ # 5. 使用官方推荐的配置参数
742
+ # 6. 参考权威基准测试结果
743
+ ```
744
+
745
+ ### 为什么需要自己的基准测试?
746
+
747
+ 1. **环境差异**: 不同硬件、操作系统、网络环境下的性能差异巨大
748
+ 2. **配置影响**: 工具配置参数对性能影响显著
749
+ 3. **版本差异**: 不同版本的工具性能可能有很大差异
750
+ 4. **使用场景**: 实际使用场景与基准测试场景可能完全不同
751
+ 5. **权威性**: 只有自己环境下的测试结果才是最权威的
752
+
753
+ ### 建立自己的性能基准
754
+
755
+ 建议建立以下性能基准体系:
756
+ - **基线测试**: 在标准环境下的基础性能
757
+ - **压力测试**: 在不同负载下的性能表现
758
+ - **长期测试**: 长时间运行下的性能稳定性
759
+ - **对比测试**: 与历史版本的性能对比
760
+
761
+ ## 🤝 贡献指南
762
+
763
+ 我们欢迎所有形式的贡献!请查看我们的贡献指南:
764
+
765
+ ### 贡献类型
766
+
767
+ - 🐛 Bug 报告
768
+ - 💡 功能建议
769
+ - 📝 文档改进
770
+ - 🔧 代码贡献
771
+ - 🧪 测试用例
772
+ - 🌍 国际化
773
+
774
+ ### 贡献流程
775
+
776
+ 1. Fork 项目仓库
777
+ 2. 创建功能分支 (`git checkout -b feature/amazing-feature`)
778
+ 3. 提交更改 (`git commit -m 'Add amazing feature'`)
779
+ 4. 推送到分支 (`git push origin feature/amazing-feature`)
780
+ 5. 创建 Pull Request
781
+
782
+ ### 开发规范
783
+
784
+ - 遵循 TypeScript 最佳实践
785
+ - 添加适当的测试用例
786
+ - 更新相关文档
787
+ - 遵循提交信息规范
788
+
789
+ ## 📄 许可证
790
+
791
+ 本项目采用 [MIT License](LICENSE) 许可证。
792
+
793
+ ## 🔗 相关链接
794
+
795
+ - **官方网站**: [https://thunderbench.dev](https://thunderbench.dev)
796
+ - **GitHub 仓库**: [https://github.com/thunderbench/thunderbench](https://github.com/thunderbench/thunderbench)
797
+ - **问题反馈**: [https://github.com/thunderbench/thunderbench/issues](https://github.com/thunderbench/thunderbench/issues)
798
+ - **讨论社区**: [https://github.com/thunderbench/thunderbench/discussions](https://github.com/thunderbench/thunderbench/discussions)
799
+ - **CLI 工具**: [https://github.com/thunderbench/thunderbench-cli](https://github.com/thunderbench/thunderbench-cli)
800
+
801
+ ## 🙏 致谢
802
+
803
+ 感谢以下开源项目为 ThunderBench 提供支持:
804
+
805
+ - [WRK](https://github.com/wg/wrk) - 高性能 HTTP 基准测试工具
806
+ - [RxJS](https://rxjs.dev/) - 响应式编程库
807
+ - [TypeScript](https://www.typescriptlang.org/) - JavaScript 的超集
808
+ - [Bun](https://bun.sh/) - 快速 JavaScript 运行时
809
+
810
+ ---
811
+
812
+ <div align="center">
813
+
814
+ **如果 ThunderBench 对你有帮助,请给我们一个 ⭐️**
815
+
816
+ Made with ❤️ by the ThunderBench Team
817
+
818
+ </div>