Postman测试ASP.NET Core接口性能结果存疑求助
你遇到的Postman吞吐量远低于Bombardier的情况,核心原因在于两款工具的定位和底层实现差异,具体如下:
工具定位与架构差异
Postman是面向API调试的可视化工具,基于Electron框架(依赖Chrome内核),设计重心是便捷的请求编辑、响应查看等功能,而非高并发压测。它的网络请求处理会受UI线程限制,即使设置了20个虚拟用户,也无法像专业压测工具那样高效调度并发连接,大量资源会被UI渲染、日志记录等额外操作占用。而Bombardier是专门的HTTP压测工具,基于Go语言的goroutine高并发模型,能真正创建并维持指定数量的活跃并发连接,所有资源都聚焦于请求发送与处理,没有UI相关开销,效率远高于Postman。
虚拟用户/并发连接的实现逻辑不同
Postman的“虚拟用户”并非真正的独立并发连接,实际执行中可能存在请求串行排队、连接复用效率低的问题。比如它可能会等待一个虚拟用户的请求完成后,才发起下一个请求,无法做到20个连接同时持续发送请求。Bombardier则会严格按照指定的
--connections参数创建对应数量的并发连接,持续密集地发送请求,充分压榨服务器的处理能力,这也是它能达到每秒七千多请求的关键原因。请求调度与额外开销的影响
Postman在测试过程中会实时更新UI统计数据、保存请求历史、生成详细日志,这些额外操作会产生大量IO和CPU开销,拖慢请求发送的频率。你看到平均请求耗时7ms,但吞吐量仅17.2 req/s,本质是请求之间存在大量空闲间隔,Postman没有把这些时间充分利用起来。Bombardier作为命令行工具,没有这些额外开销,请求调度更加紧凑,能让服务器持续处于高负载状态,从而得到符合预期的吞吐量结果。
附你使用Bombardier的测试输出:
PS C:\Users\Martin\Downloads> .\bombardier-windows-amd64.exe --connections=20 https://localhost:7108/api/benchmarks/benchmark2 Bombarding https://localhost:7108/api/benchmarks/benchmark2 for 10s using 20 connection(s) [=================================================================================================================] 10s Done! Statistics Avg Stdev Max Reqs/sec 7292.63 2150.11 25063.79 Latency 2.74ms 1.93ms 52.32ms HTTP codes: 1xx - 0, 2xx - 72937, 3xx - 0, 4xx - 0, 5xx - 0 others - 0 Throughput: 1.55MB/s
内容的提问来源于stack exchange,提问作者Neutrino

