3. 堪比 JMeter 的.Net 压测工具 - Crank 进阶篇 - 认识 bombardierdate
1. 前言
通过之前的学习,我们已经了解了各参数以及配置的意义,接下来的文章我们分别从 bombardier 以及 wrk 入手,进一步了解彼此之间的联系
2. 认识 bombardier
bombardier 是一个 HTTP(S) 基准测试工具。它是用 Go 编程语言编写的,并使用优秀的 fasthttp 代替 Go 的默认 http 库,因为它具有闪电般的快速性能,详细文档查看
其支持参数:
并且 bombardier 支持多平台,可以在 Windows、Linux、OSX 系统上运行,那接下来我们使用 bombardier 测试一下百度的压测情况
安装(WSL-Ubuntu):
运行:
其中:
req1xx 代表 http 响应码为 1**
req2xx 代表 http 响应码为 2**
req3xx 代表 http 响应码为 3**
req4xx 代表 http 响应码为 4**
req5xx 代表 http 响应码为 5**
result.rps.mean 代表每秒请求数
result.rps.max 代表每秒最大请求数
result.latency.mean 代表每毫秒延迟
result.latency.max 代表每毫秒最大延迟
3. 了解 Microsoft.Crank.Jobs.Bombardier
在 Microsoft.Crank.Jobs.Bombardier 项目中 Program.cs
根据参数获取-w、-d、-n、-f 参数信息
校验压测时长、请求数等参数信息
判断当前运行环境是 Windows、Linux、OSX,根据环境下载对应的 bombardier,并根据传递的
根据 yml 参数最后拼装 bombardier 的原始命令:
bombardier -c 200 -d 1s --insecure -l https://www.baidu.com --print r --format json
将输出的结果使用追加到 stringBuilder 上,再赋值给 output
通过 JObject.Parse 解析指标,最后通过 BenchmarksEventSource 存储并输出到控制台或数据库、csv、json 中
其中
请求总数 = req1xx + req2xx + req3xx + req4xx + req5xx + others
成功请求数 = req2xx + req3xx
失败请求数 = 请求总数 - 成功请求数
4. 解读 bombardier.yml 各参数作用
connections: 最大并发连接数,默认: 256
warmup: 预热时间,默认 15s,与执行 duration 类似,而并非压测次数
当 warmup > 0 时,会先预热 warmup 秒后再执行一次压测,第二次的压测才是最后返回的结果
当 warmup = 0 时,不进行预热,直接开始压测
duration: 测试时长,单位: s
requests: 请求数
rate: 每秒请求数限制
transport: 传输方式。默认: fasthttp 、支持 fasthttp、http1、http2 三种
presetHeaders: 预设 header,根据全局参数 headers,自选其一即可,选择 json,那请求的 header 即为: --header "Accept: application/json,text/html;q=0.9,application/xhtml+xml;q=0.9,application/xml;q=0.8,/;q=0.7" --header "Connection: keep-alive"
customHeaders: 自定义 headers,如果预设 headers 中没有需要的 header,则通过重写 customHeaders,以完成自定义 header 的目的
serverUri: 自定义 url,如果此参数存在,则请求地址为: {serverUri}:{serverPort}{path}
serverPort: 服务端口
serverScheme: 服务的 Scheme,默认 http、支持 http、https 两种
serverAddress: 服务地址、不包含 http、例如: www.baidu.com,如果 serverUri 存在,此配置无效,如果不存在,请求格式为: {serverScheme}://{serverAddress}:{serverPort}{path}
path: 服务接口地址,不包含域,例如: /api/check/healthy
bodyFile: body 内容,仅在非 Get 请求时使用,支持远程路径与本地绝对路径(Agent 服务的绝对地址,非 Controller 端的绝对地址)
verb: 请求方式: 默认 GET、支持 POST、PUT、DELETE、PATCH、GET
5. 总结
优势:
跨平台
用法简单
使用 go 语言开发、性能高
劣势:
不支持动态参数
不支持多个接口同时压测
bombardier.yml 的存在是为 Microsoft.Crank.Jobs.Bombardier 提供配置参数,Microsoft.Crank.Jobs.Bombardier 通过调用开源项目 bombardier 实现压测,并将压测结果通过 BenchmarksEventSource 存储并输出到控制台或数据库、csv、json 中
源码地址:https://github.com/doddgu/crank/tree/sample
开源地址
MASA.BuildingBlocks:https://github.com/masastack/MASA.BuildingBlocks
MASA.Contrib:https://github.com/masastack/MASA.Contrib
MASA.Utils:https://github.com/masastack/MASA.Utils
MASA.EShop:https://github.com/masalabs/MASA.EShop
MASA.Blazor:https://github.com/BlazorComponent/MASA.Blazor
如果你对我们的 MASA Framework 感兴趣,无论是代码贡献、使用、提 Issue,欢迎联系我们
版权声明: 本文为 InfoQ 作者【MASA技术团队】的原创文章。
原文链接:【http://xie.infoq.cn/article/ee9b578406efb94f476a2d6ff】。文章转载请联系作者。
评论