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
Binary file
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import { BenchmarkConfig } from "../types";
2
+ /**
3
+ * 验证测试配置
4
+ * @param config 测试配置
5
+ */
6
+ export declare const validateConfig: (config: BenchmarkConfig) => void;
7
+ //# sourceMappingURL=config-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-validation.d.ts","sourceRoot":"","sources":["../../src/core/config-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAkC,MAAM,UAAU,CAAC;AAE3E;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,eAAe,KAAG,IAUxD,CAAC"}
@@ -0,0 +1,174 @@
1
+ import { BenchmarkResult, BenchmarkConfig } from "../types";
2
+ export declare class JsonReportGenerator {
3
+ /**
4
+ * 生成 K6 风格的 JSON 报告
5
+ */
6
+ generateK6StyleJsonReport(result: BenchmarkResult, config: BenchmarkConfig, timestamp: string): {
7
+ metadata: {
8
+ timestamp: string;
9
+ startTime: number;
10
+ endTime: number;
11
+ duration: number;
12
+ generatedAt: string;
13
+ version: string;
14
+ tool: string;
15
+ config: {
16
+ totalGroups: number;
17
+ totalTests: number;
18
+ };
19
+ system: {
20
+ platform: NodeJS.Platform;
21
+ arch: string;
22
+ release: string;
23
+ cpus: {
24
+ model: string;
25
+ cores: number;
26
+ speed: number;
27
+ architecture: string;
28
+ };
29
+ memory: {
30
+ total: number;
31
+ free: number;
32
+ used: number;
33
+ usage: number;
34
+ };
35
+ network: {
36
+ interfaces: number;
37
+ };
38
+ uptime: number;
39
+ loadAverage: number[];
40
+ nodeVersion: string;
41
+ nodePlatform: NodeJS.Platform;
42
+ nodeArch: NodeJS.Architecture;
43
+ };
44
+ };
45
+ metrics: {
46
+ requests: {
47
+ total: number;
48
+ successful: number;
49
+ failed: number;
50
+ rate: number;
51
+ };
52
+ latency: {
53
+ avg: number;
54
+ min: number;
55
+ max: number;
56
+ p50: number;
57
+ p90: number;
58
+ p95: number;
59
+ p99: number;
60
+ };
61
+ errors: {
62
+ count: number;
63
+ rate: number;
64
+ };
65
+ transfer: {
66
+ total: number;
67
+ perSecond: number;
68
+ };
69
+ };
70
+ groups: {
71
+ name: string;
72
+ config: {
73
+ http: import("../types").HttpConfig;
74
+ executionMode: "parallel" | "sequential";
75
+ threads: number;
76
+ connections: number;
77
+ duration: number;
78
+ tests: {
79
+ name: string;
80
+ weight: number;
81
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH";
82
+ path: string;
83
+ }[];
84
+ };
85
+ metrics: {
86
+ requests: {
87
+ total: number;
88
+ successful: number;
89
+ failed: number;
90
+ rate: number;
91
+ };
92
+ latency: {
93
+ avg: number;
94
+ min: number;
95
+ max: number;
96
+ p50: number;
97
+ p90: number;
98
+ p95: number;
99
+ p99: number;
100
+ };
101
+ errors: {
102
+ count: number;
103
+ rate: number;
104
+ timeoutRate: number;
105
+ };
106
+ transfer: {
107
+ total: number;
108
+ perSecond: number;
109
+ };
110
+ };
111
+ testResults: ({
112
+ name: string;
113
+ config: {
114
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH";
115
+ path: string;
116
+ weight: number;
117
+ wrk: {
118
+ threads: number;
119
+ connections: number;
120
+ duration: number;
121
+ };
122
+ };
123
+ metrics: {
124
+ requests: {
125
+ total: number;
126
+ successful: number;
127
+ failed: number;
128
+ rate: number;
129
+ };
130
+ latency: {
131
+ avg: number;
132
+ min: number;
133
+ max: number;
134
+ p50: number;
135
+ p90: number;
136
+ p95: number;
137
+ p99: number;
138
+ };
139
+ errors: {
140
+ count: number;
141
+ rate: number;
142
+ timeoutRate: number;
143
+ };
144
+ transfer: {
145
+ total: number;
146
+ perSecond: number;
147
+ };
148
+ };
149
+ request: import("../types").RequestResult;
150
+ } | null)[];
151
+ requests: import("../types").RequestResult[];
152
+ }[];
153
+ summary: {
154
+ totalRequests: number;
155
+ successfulRequests: number;
156
+ failedRequests: number;
157
+ successRate: number;
158
+ averageResponseTime: number;
159
+ p95ResponseTime: number;
160
+ requestsPerSecond: number;
161
+ totalDuration: number;
162
+ wrkExecutionTime: number;
163
+ };
164
+ };
165
+ /**
166
+ * 获取系统信息
167
+ */
168
+ private getSystemInfo;
169
+ /**
170
+ * 计算总体概览统计
171
+ */
172
+ private calculateRealOverview;
173
+ }
174
+ //# sourceMappingURL=json-report-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-report-generator.d.ts","sourceRoot":"","sources":["../../src/core/json-report-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE5D,qBAAa,mBAAmB;IAC9B;;OAEG;IACH,yBAAyB,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2M7F;;OAEG;IACH,OAAO,CAAC,aAAa;IAgCrB;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAyC9B"}
@@ -0,0 +1,16 @@
1
+ import { BenchmarkResult, BenchmarkConfig } from "../types";
2
+ export declare class MarkdownReportGenerator {
3
+ /**
4
+ * 生成 Markdown 表格报告
5
+ */
6
+ generateMarkdownTableReport(result: BenchmarkResult, config: BenchmarkConfig, timestamp: string): string;
7
+ /**
8
+ * 获取系统信息
9
+ */
10
+ private getSystemInfo;
11
+ /**
12
+ * 计算总体概览统计
13
+ */
14
+ private calculateRealOverview;
15
+ }
16
+ //# sourceMappingURL=markdown-report-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-report-generator.d.ts","sourceRoot":"","sources":["../../src/core/markdown-report-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE5D,qBAAa,uBAAuB;IAClC;;OAEG;IACH,2BAA2B,CACzB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,MAAM,GAChB,MAAM;IAuLT;;OAEG;IACH,OAAO,CAAC,aAAa;IAgCrB;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAyC9B"}
@@ -0,0 +1,10 @@
1
+ import { BenchmarkResult, BenchmarkConfig } from "../types";
2
+ export declare class ReportStorage {
3
+ private jsonGenerator;
4
+ private markdownGenerator;
5
+ constructor();
6
+ saveTestResult(result: BenchmarkResult, config: BenchmarkConfig, basePath?: string): Promise<string>;
7
+ private saveK6StyleJsonReport;
8
+ private saveMarkdownTableReport;
9
+ }
10
+ //# sourceMappingURL=report-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-storage.d.ts","sourceRoot":"","sources":["../../src/core/report-storage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAI5D,qBAAa,aAAa;IACxB,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,iBAAiB,CAA0B;;IAO7C,cAAc,CAClB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,eAAe,EACvB,QAAQ,GAAE,MAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC;YA8BJ,qBAAqB;YAWrB,uBAAuB;CActC"}
@@ -0,0 +1,16 @@
1
+ import { RequestResult, DetailedStats } from "../types";
2
+ /**
3
+ * 计算百分位数
4
+ * @param values 数值数组
5
+ * @param percentile 百分位数 (0-100)
6
+ * @returns 百分位数值
7
+ */
8
+ export declare const calculatePercentile: (values: number[], percentile: number) => number;
9
+ /**
10
+ * 计算统计指标
11
+ * @param results 请求结果数组
12
+ * @param startTime 测试开始时间(可选)
13
+ * @returns 详细统计信息
14
+ */
15
+ export declare const calculateStats: (results: RequestResult[], startTime?: number) => DetailedStats;
16
+ //# sourceMappingURL=stats-calculation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats-calculation.d.ts","sourceRoot":"","sources":["../../src/core/stats-calculation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAExD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ,MAAM,EAAE,EAAE,YAAY,MAAM,KAAG,MAkB1E,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,SAAS,aAAa,EAAE,EAAE,YAAY,MAAM,KAAG,aAoE7E,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { ApiTestConfig } from "../types";
2
+ /**
3
+ * 计算请求分布
4
+ * @param tests 测试配置数组
5
+ * @param totalRequests 总请求数
6
+ * @returns 每个接口的请求数分布
7
+ */
8
+ export declare const calculateRequestDistribution: (tests: ApiTestConfig[], totalRequests: number) => Record<string, number>;
9
+ //# sourceMappingURL=weight-distribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weight-distribution.d.ts","sourceRoot":"","sources":["../../src/core/weight-distribution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,GACvC,OAAO,aAAa,EAAE,EACtB,eAAe,MAAM,KACpB,MAAM,CAAC,MAAM,EAAE,MAAM,CA2CvB,CAAC"}
@@ -0,0 +1,181 @@
1
+ import { BenchmarkConfig, BenchmarkResult } from "../types";
2
+ import { Observable } from "rxjs";
3
+ export interface WrkTestResult {
4
+ groupName: string;
5
+ testName: string;
6
+ requests: number;
7
+ duration: number;
8
+ requestsPerSecond: number;
9
+ latency: {
10
+ avg: number;
11
+ stdev: number;
12
+ max: number;
13
+ p50: number;
14
+ p75: number;
15
+ p90: number;
16
+ p95: number;
17
+ p99: number;
18
+ stdevPercent: number;
19
+ };
20
+ transfer: {
21
+ total: number;
22
+ perSecond: number;
23
+ };
24
+ errors: {
25
+ connect: number;
26
+ read: number;
27
+ write: number;
28
+ timeout: number;
29
+ };
30
+ performance: {
31
+ efficiency: number;
32
+ errorRate: number;
33
+ throughput: number;
34
+ };
35
+ }
36
+ export interface TestProgress {
37
+ groupName: string;
38
+ completed: number;
39
+ total: number;
40
+ percentage: number;
41
+ currentTest?: string;
42
+ errors: number;
43
+ totalErrors: number;
44
+ }
45
+ export interface RealTimeStats {
46
+ totalRequests: number;
47
+ successfulRequests: number;
48
+ failedRequests: number;
49
+ averageResponseTime: number;
50
+ requestsPerSecond: number;
51
+ errorRate: number;
52
+ currentConcurrency: number;
53
+ maxConcurrency: number;
54
+ }
55
+ export interface TestEngineOptions {
56
+ outputDir?: string;
57
+ generateScripts?: boolean;
58
+ cleanupScripts?: boolean;
59
+ showProgress?: boolean;
60
+ verbose?: boolean;
61
+ }
62
+ export declare class TestEngine {
63
+ private config;
64
+ private reportStorage;
65
+ private progressSubject;
66
+ private statsSubject;
67
+ private startTime;
68
+ private options;
69
+ private wrkScriptsDir;
70
+ private wrkPath;
71
+ constructor(config: BenchmarkConfig, options?: TestEngineOptions);
72
+ /**
73
+ * 初始化 wrk 路径
74
+ */
75
+ private initializeWrkPath;
76
+ /**
77
+ * 初始化引擎
78
+ */
79
+ initialize(): Promise<void>;
80
+ /**
81
+ * 清理临时文件
82
+ */
83
+ private cleanup;
84
+ /**
85
+ * 检查 wrk 是否安装
86
+ */
87
+ private checkWrkInstallation;
88
+ /**
89
+ * 确保输出目录存在
90
+ */
91
+ private ensureOutputDir;
92
+ /**
93
+ * 生成 wrk 测试脚本
94
+ */
95
+ private generateWrkScripts;
96
+ /**
97
+ * 为单个测试组生成 wrk 脚本
98
+ */
99
+ private generateGroupScript;
100
+ /**
101
+ * 构建完整 URL
102
+ */
103
+ private buildFullUrl;
104
+ /**
105
+ * 运行完整的基准测试
106
+ */
107
+ runBenchmark(): Promise<BenchmarkResult>;
108
+ /**
109
+ * 使用 wrk 执行单个测试组
110
+ */
111
+ private executeGroupWithWrk;
112
+ /**
113
+ * 串行执行测试组中的所有接口
114
+ */
115
+ private executeGroupSequentially;
116
+ /**
117
+ * 并行执行测试组中的所有接口
118
+ */
119
+ private executeGroupInParallel;
120
+ /**
121
+ * 执行单个接口测试
122
+ */
123
+ private executeIndividualTest;
124
+ /**
125
+ * 为单个接口生成 wrk 脚本
126
+ */
127
+ private generateIndividualTestScript;
128
+ /**
129
+ * 创建空的统计数据
130
+ */
131
+ private createEmptyStats;
132
+ /**
133
+ * 合并统计数据
134
+ */
135
+ private mergeStats;
136
+ /**
137
+ * 计算加权平均值
138
+ */
139
+ private weightedAverage;
140
+ /**
141
+ * 运行 wrk 命令
142
+ */
143
+ private runWrkCommand;
144
+ /**
145
+ * 解析 wrk 输出 - 改进版本,正确解析延迟分布
146
+ */
147
+ private parseWrkOutput;
148
+ /**
149
+ * 解析时间单位 (us, ms, s) 并转换为毫秒
150
+ */
151
+ private parseTimeUnit;
152
+ /**
153
+ * 转换 wrk 结果为 RequestResult 格式
154
+ */
155
+ private convertWrkResultsToRequestResults;
156
+ /**
157
+ * 发送实时统计
158
+ */
159
+ private emitRealTimeStats;
160
+ /**
161
+ * 打印最终结果 - 优雅版
162
+ */
163
+ private printFinalResults;
164
+ /**
165
+ * 清理临时脚本文件
166
+ */
167
+ private cleanupScripts;
168
+ /**
169
+ * 获取进度流
170
+ */
171
+ getProgressStream(): Observable<TestProgress>;
172
+ /**
173
+ * 获取统计流
174
+ */
175
+ getStatsStream(): Observable<RealTimeStats>;
176
+ /**
177
+ * 销毁引擎
178
+ */
179
+ destroy(): void;
180
+ }
181
+ //# sourceMappingURL=wrk-test-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrk-test-engine.d.ts","sourceRoot":"","sources":["../../src/core/wrk-test-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAe,MAAM,UAAU,CAAC;AAIzE,OAAO,EAAW,UAAU,EAAE,MAAM,MAAM,CAAC;AAW3C,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE;QACP,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,WAAW,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAuB;gBAE1B,MAAM,EAAE,eAAe,EAAE,OAAO,GAAE,iBAAsB;IAiBpE;;OAEG;YACW,iBAAiB;IAkB/B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBjC;;OAEG;YACW,OAAO;IAqBrB;;OAEG;YACW,oBAAoB;IAiClC;;OAEG;YACW,eAAe;IAS7B;;OAEG;YACW,kBAAkB;IAWhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiE3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC;IAgI9C;;OAEG;YACW,mBAAmB;IAYjC;;OAEG;YACW,wBAAwB;IAkCtC;;OAEG;YACW,sBAAsB;IAwBpC;;OAEG;YACW,qBAAqB;IAyFnC;;OAEG;IACH,OAAO,CAAC,4BAA4B;IA+BpC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,OAAO,CAAC,UAAU;IAyClB;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;YACW,aAAa;IA+D3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAoJtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;IACH,OAAO,CAAC,iCAAiC;IAkBzC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAyCzB;;OAEG;YACW,cAAc;IAS5B;;OAEG;IACH,iBAAiB,IAAI,UAAU,CAAC,YAAY,CAAC;IAI7C;;OAEG;IACH,cAAc,IAAI,UAAU,CAAC,aAAa,CAAC;IAI3C;;OAEG;IACH,OAAO,IAAI,IAAI;CAIhB"}
@@ -0,0 +1,39 @@
1
+ import { BenchmarkConfig } from "./types";
2
+ export type { BenchmarkConfig, TestGroupConfig, ApiTestConfig } from "./types";
3
+ export { TestEngine } from "./core/wrk-test-engine";
4
+ export declare class ThunderBench {
5
+ private engine;
6
+ constructor(config: BenchmarkConfig, options?: {
7
+ outputDir?: string;
8
+ cleanupScripts?: boolean;
9
+ showProgress?: boolean;
10
+ verbose?: boolean;
11
+ });
12
+ /**
13
+ * 运行性能测试
14
+ */
15
+ runBenchmark(): Promise<import("./types").BenchmarkResult>;
16
+ /**
17
+ * 获取进度流
18
+ */
19
+ getProgressStream(): import("rxjs").Observable<import("./core/wrk-test-engine").TestProgress>;
20
+ /**
21
+ * 获取统计流
22
+ */
23
+ getStatsStream(): import("rxjs").Observable<import("./core/wrk-test-engine").RealTimeStats>;
24
+ /**
25
+ * 清理资源
26
+ */
27
+ destroy(): void;
28
+ }
29
+ export declare function runBenchmark(config: BenchmarkConfig, options?: {
30
+ outputDir?: string;
31
+ cleanupScripts?: boolean;
32
+ showProgress?: boolean;
33
+ verbose?: boolean;
34
+ }): Promise<import("./types").BenchmarkResult>;
35
+ export { validateConfig } from "./core/config-validation";
36
+ export { ReportStorage } from "./core/report-storage";
37
+ export { JsonReportGenerator } from "./core/json-report-generator";
38
+ export { MarkdownReportGenerator } from "./core/markdown-report-generator";
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAkC,MAAM,SAAS,CAAC;AAG1E,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAG/E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAa;gBAGzB,MAAM,EAAE,eAAe,EACvB,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB;IAKH;;OAEG;IACG,YAAY;IAIlB;;OAEG;IACH,iBAAiB;IAIjB;;OAEG;IACH,cAAc;IAId;;OAEG;IACH,OAAO;CAGR;AAGD,wBAAsB,YAAY,CAChC,MAAM,EAAE,eAAe,EACvB,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,8CASF;AAGD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC"}