2. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml
1. 前言
入门篇我们已经成功运行hello.benchmarks.yml并输出测试结果,本篇我们就hello.benchmarks.yml、以及运行的shell脚本详细解读下其中的含义
2. 剖析hello.benchmarks.yml
2.1. job
- 在hello.benchmarks.yml中我们定义了一个新的job: server,并指定了仓库信息 ( 远程仓库 ):
1 | repository:https://github.com/doddgu/crank.git # 仓库源 |
- 并通过import导入了bombardier.yml,其中定义了另外一个job: bombardier,并指定了仓库信息 ( 远程仓库 ):
1 | repository: https://github.com/doddgu/crank.git |
2.2. scenarios
- 在hello.benchmarks.yml中我们定义了场景: hello,并为此场景指定了两个任务:
- 第一个任务名为application,使用的是项目server
- 第二个任务名为load,并指定使用项目bombardier
2.3. variables 变量
在bombardier.yml中
- 定义了全局变量: headers、presetHeaders(预设header)
- 定义了局部变量: connections、warmup、duration、requests、rate、transport、serverScheme等等
在hello.benchmarks.yml中为load定义了局部变量serverPort、path
2.4. profiles 配置
- 在hello.benchmarks.yml中我们
- 定义了配置local
- 并指定了局部变量: serverAddress = localhost
- 为任务application、load指定了部署作业的endpoint 是 http://localhost:5010 (指定执行任务的Agent地址)
2.5. arguments 参数
- 在bombardier.yml中与variables同级的配置: arguments,此参数是在启动job后传递的参数,其中定义的全局参数、局部参数信息也都是为构建完整的参数做准备,bombardier真实的参数信息是:
1 | -c {{connections}} -w {{warmup}} -d {{duration}} -n {{requests}} --insecure -l {% if rate != 0 %} --rate {{ rate }} {% endif %} {% if transport %} --{{ transport}} {% endif %} {{headers[presetHeaders]}} {% for h in customHeaders %}{% assign s = h | split : ':' %}--header \"{{ s[0] }}: {{ s[1] | strip }}\" {% endfor %} {% if serverUri == blank or serverUri == empty %} {{serverScheme}}://{{serverAddress}}:{{serverPort}}{{path}} {% else %} {{serverUri}}:{{serverPort}}{{path}} {% endif %} {% if bodyFile != blank and bodyFile != empty %} -f {{bodyFile}} {% endif %} {% if verb != blank and verb != empty %} -m {{verb}} {% endif %} |
3. 改造hello.benchmarks.yml
改造hello.benchmarks.yml,不考虑重用,最原始的代码如下
1 | variables: |
4. 解读crank shell
之前我们通过shell执行:
crank –config hello.benchmarks.yml –scenario hello –profile local –load.framework net5.0 –application.framework net5.0
- 其中crank 是固定的、代表:Crank Controller
- –config:固定的配置,指执行哪个yml配置,每次仅能指定一个yml配置
- –scenario:固定的配置,设置场景是hello
- –profile:固定的配置,非必选,可多次设置,指定当前Crank命令申请的配置是local,使用local下配置的所有信息
- –load.framework: 格式:<任务名>.framework,为任务load指定framework的运行框架版本是net5.0、–application.framework同理
改造hello.benchmarks.yml,因为移除了profile,所以执行: crank –config hello.yml –scenario hello –load.framework net5.0 –application.framework net5.0 即可
5. 疑问
- 为什么启动crank时要增加–application.framework net5.0?
- 安装crank要求必须有net5.0的环境,所以指定net5.0不需要再单独安装框架环境
- 为什么启动crank时不指定framework时默认是netcore3.1呢?
- 使用记事本打开hello.csproj、Microsoft.Crank.Jobs.Bombardier.csproj 即可了解
- scenarios节点下application以及load两个节点名称可以更换吗?只能有两个节点?
- 节点名称不固定,可以更换,也没有限制必须是两个节点,具体多少个节点根据自己的需要来
6. 结尾
通过上面的学习,我们也已经完全的了解了各配置的作用,但对bombardier.yml与开源项目bombardier存在什么样的联系还不清楚,以及为什么叫做bombardier.yml而不是其他名字,并且是如何实现性能指标的输出,接下来就会讲到bombardier.yml与开源项目bombardier的关系,以及wrk.yml与wrk的关系
源码地址: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,欢迎联系我们
2. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml
https://blogs.masastack.com/2022/02/24/independent/crank/2. advancement/