这篇文章介绍了.Net性能测试框架Crank的使用方法。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Crank 是微软新出的一个性能测试框架,集成了多种基准测试工具,如bombardier、wrk等。

Crank通过统一的配置,可以转换成不同基准测试工具命令进行测试。可参考Bombardier Job实现。

安装Crank

运行如下两个命令分别安装Crank的cli(Controller)和Agent。

dotnet tool update Microsoft.Crank.Controller --version "0.2.0-*" --global
dotnet tool update Microsoft.Crank.Agent--version "0.2.0-*" --global

需要.Net SDK 5.0环境

安装完成后执行命令crank,会打印出如下可以配置的参数和介绍,或者github查看相关参数介绍。

PS C:\Users\Stack\Desktop> crank
Crank Benchmarks ControllerThe Crank controller orchestrates benchmark jobs on Crank agents.Usage: Crank [command] [options]Options:-?|-h|--help         Show help information-c|--config          Configuration file or url-s|--scenario        Scenario to execute-j|--job             Name of job to define--profile            Profile name--script             Execute a named script available in the configuration files. Can be used multiple times.-j|--json            Saves the results as json in the specified file.--csv                Saves the results as csv in the specified file.--compare            An optional filename to compare the results to. Can be used multiple times.--variable           Variable--sql                Connection string of the SQL Server Database to store results in--table              Table name of the SQL Database to store results in--session            A logical identifier to group related jobs.--description        A string describing the job.-p|--property        Some custom key/value that will be added to the results, .e.g. --property arch=arm --propertyos=linux

执行crank-agent,启动基准测试所需的代理服务。github查看相关参数介绍。

PS C:\Users\Stack\Desktop> crank-agent
Hosting environment: Production
Content root path: C:\Users\Stack\.dotnet\tools\.store\microsoft.crank.agent\0.2.0-alpha.21567.1\microsoft.crank.agent\0.2.0-alpha.21567.1\tools\net5.0\any\
Now listening on: http://[::]:5010

创建Crank配置文件

配置文件参考官方hello.benchmarks.yml示例

示例文件中引入了bombardier.yml,由于大环境对githubusercontent.com域名不太友好,可以考虑将bombardier.yml下载到本地,imports引入本地路径或者直接将文件内容加入到新建的配置文件。

imports:-https://raw.githubusercontent.com/dotnet/crank/main/src/Microsoft.Crank.Jobs.Bombardier/bombardier.yml

生产中使用推荐imports文件的方式,crank配置文件中做少量配置就可以完成基准测试,并且可以引入不同的Microsoft.Crank.Jobs.XXX/XXX.yml,基于不同的基准测试工具进行测试。

其他测试工具配置文件都在https://github.com/dotnet/crank/blob/main/src/Microsoft.Crank.XXX下。

variables:headers:none: ''plaintext: '--header "Accept: text/plain,text/html;q=0.9,application/xhtml+xml;q=0.9,application/xml;q=0.8,*/*;q=0.7" --header "Connection: keep-alive"'html: '--header "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" --header "Connection: keep-alive"'json: '--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"'connectionclose: '--header "Connection: close"'presetHeaders: nonejobs:bombardier:source:repository: https://github.com/dotnet/crank.gitbranchOrCommit: mainproject: src/Microsoft.Crank.Jobs.Bombardier/Microsoft.Crank.Jobs.Bombardier.csprojsourceKey: bombardiernoBuild: truereadyStateText: Bombardier ClientwaitForExit: truevariables:connections: 256 #设置连接数warmup: 15 #设置测试预热次数duration: 15 #设置测试时间requests: 0 #设置测试请求实例数rate: 0 #设置每秒请求频率transport: fasthttp # | http1 | http2  设置使用golang的fasthttp库发送http请求serverScheme: httpserverAddress: localhostserverPort: 5000path: bodyFile: # path or url for a file to use as the body contentverb: # GET when nothing is specifiedcustomHeaders: [ ] # list of headers with the format: ': ', e.g. [ 'content-type: application/json' ]arguments: "-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 %}"onConfigure: # - job.timeout = Number(job.variables.duration) + Number(job.variables.warmup) + 10;server:source: #指定需要测试的项目,本文直接使用本地路径localFolder: .project: crank_demo.csprojreadyStateText: Application started.# source: 指定测试项目的远程仓库地址,并通过branchOrCommit指定分支#   repository: https://github.com/dotnet/crank#   branchOrCommit: main#   project: samples/hello/hello.csproj# readyStateText: Application started.scenarios: #配置基准测试场景crank_demo: #定义方案名,执行crank命令时指定该名称application: job: server # 指定测试项目为上面定义的serverload:job: bombardier # 指定测试工具bombardiervariables:serverPort: 5000 #配置http服务端口path: / #配置http服务地址profiles:local:variables:serverAddress: localhostjobs: application:endpoints: - http://localhost:5010load:endpoints: - http://localhost:5010

启动Crank-Agent

启动agent后执行crank,会有一个如下安装sdk的动作

[09:29:05.261] Runtime: 6.0.0 (Current)
[09:29:05.262] SDK: 6.0.100 (Current)
[09:29:05.263] ASP.NET: 6.0.0 (Current)
[09:29:05.265] Creating custom global.json
[09:29:05.266] Desktop: 6.0.0 (Current)
[09:29:05.266] Installing SDK '6.0.100' ...

所以启动agent时多指定一个dotnethome参数,避免重复安装sdk。

crank-agent --dotnethome 'C:\Program Files\dotnet'

启动Crank

crank --config .\demo.benchmarks.yml --scenario crank_demo --profile local

--scenario crank_demo: 指定定义的测试场景

--profile local :设置输出结果到本地,即控制台输出

可以通过参数指定结果输出到本地json文件(--output results.json )或者数据库(--sql [connection-string] --table [table-name])

结果输出

这里省略压测期间的日志输出,直接列出结果。

| application           |               |
| --------------------- | ------------- |
| CPU Usage (%)         | 56            |
| Cores usage (%)       | 447           |
| Working Set (MB)      | 140           |
| Private Memory (MB)   | 157           |
| Build Time (ms)       | 7,232         |
| Start Time (ms)       | 501           |
| Published Size (KB)   | 91,292        |
| .NET Core SDK Version | 6.0.100       |
| ASP.NET Core Version  | 6.0.0+ae1a6cb |
| .NET Runtime Version  | 6.0.0+4822e3c || load                  |                |
| --------------------- | -------------- |
| CPU Usage (%)         | 46             |
| Cores usage (%)       | 370            |
| Working Set (MB)      | 29             |
| Private Memory (MB)   | 30             |
| Build Time (ms)       | 11,891         |
| Start Time (ms)       | 226            |
| Published Size (KB)   | 68,228         |
| .NET Core SDK Version | 3.1.415        |
| ASP.NET Core Version  | 3.1.21+458d974 |
| .NET Runtime Version  | 3.1.21+df8abc0 |
| First Request (ms)    | 185            |
| Requests              | 912,005        |
| Bad responses         | 0              |
| Mean latency (us)     | 4,207          |
| Max latency (us)      | 138,999        |
| Requests/sec          | 60,305         |
| Requests/sec (max)    | 128,523        |

以上就是本文的全部内容,希望对大家的学习有所帮助。

简单介绍.Net性能测试框架Crank的使用方法相关推荐

  1. python单元测试框架unittest介绍和使用_Python+Selenium框架设计篇之-简单介绍unittest单元测试框架...

    前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest. unittest是一 ...

  2. java面试题之简单介绍一下集合框架

    集合框架分为三块:List列表.Set集合.Map映射 List列表在数据结构上可以被看做线性表,常用的有ArrayList和LinkList(不常用的有Vector(类似于ArrayList)),他 ...

  3. 开源项目cardslib简单介绍和导入eclipse并运行的方法

    本文转自http://blog.csdn.net/a396901990/article/details/25158223,仅供学习使用,所有权力归原作者所有. 开源项目里有两个关于Crad类型的自定义 ...

  4. 简单介绍订单号或者流水号的生成方法

    一般订单号或者流水号等可能在一些平台会用到,然后我就简单的介绍一个我自己生成订单号和流水号的一个方法吧,如果程序有问题或者你有更好的生成办法,欢迎留言,留下你的文章链接,我们一起学习和进步哈. 方法简 ...

  5. java单元测试启动类配置_Springboot 单元测试简单介绍和启动所有测试类的方法

    最近一段时间都是在补之前的技术债,一直忙着写业务代码没有注重代码的质量,leader也在强求,所有要把单元测试搞起来了 我把单元测试分为两种 一个是service的单元测试,一个是controller ...

  6. 简单介绍Linux进程文件路径的获取方法

    Linux进程文件路径在哪里才能找得到呢,有时会让Linux系统管理员费些心思,这里小编说一个简单的案例,相信会让不少管理员有所收获,帮助轻松获得想要的Linux进程文件路径,完成指定任务. 进入/p ...

  7. 简单介绍CSS3中的transform的使用方法

    一,转换(transform)是CSS3中具有颠覆性的特征之一,可以实现元素的位移,旋转,缩放等效果.分为两种转换,分别是2D以及3D转换效果. 转换可以简单理解为的变形,其主要效果有三种: 移动:t ...

  8. 简单介绍C#获取摄像头拍照显示图像的方法

    这篇文章主要为大家详细介绍了C#获取摄像头拍照显示图像的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了C#获取摄像头拍照显示图像的具体代码,供 ...

  9. 简单介绍Lua中的变量与赋值方法

    今天小编就为大家分享一篇关于Lua中的变量与赋值方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 看以下案例: test.lua -- 第一个lua脚本 ...

最新文章

  1. 【怎样写代码】向现有类型“添加”方法 -- 扩展方法(四):在编译时绑定扩展方法的规则
  2. 全文搜索引擎选 ElasticSearch 还是 Solr
  3. 确保字符串的每个单词首字母都大写,其余部分小写
  4. 洛谷P2280 [HNOI2003]激光炸弹
  5. 中小型局域网构建实践 PDF高清版
  6. qt创建简单的单例模式
  7. 重启 Mac 后停止更改壁纸的 4 种方法
  8. Python_爬虫_urllib解析库
  9. 用CSS border相关属性画三角形
  10. python-PIL-16bit-灰度图像生成-tiff
  11. 超详细图文介绍,华为桌面云解决方案
  12. xp3系统登录服务器错误,WindowsXP系统LOL服务器连接异常即将退出怎么解决?
  13. C语言 #define ABS(X) (X >= 0) ? X : -X 遇到的逻辑错误
  14. Gjs编程及调用底层库原理
  15. 每日一题: 第十四题
  16. php网站整合ck播放器,wordpress整合ckplayer最新版 wp文章短代码调用ck播放器
  17. 去除眼袋(画笔涂抹法)
  18. 37互娱,2019秋招提前批,Java服务端二面
  19. 小米手机连接青花瓷抓包(https)
  20. 世界上哪里有那么多云 从来都只有一朵罢了

热门文章

  1. 教育部:禁止开学前网授新学期课程
  2. [新手必看] 17个常见的Python运行时错误
  3. 有哪些相见恨晚的学习算法的方法和技巧?学到了学到了!
  4. 用Python分析了1w四六级数据,教你如何通过四六级!
  5. 操作系统学习:Linux0.12初始化详细流程-进程退出与系统进入怠速
  6. 如何设置一个严格30分钟过期的Session
  7. 美多商城之用户中心(收货地址2)
  8. 自然划分的3-4-5规则
  9. GitHub使用指南——建立仓库、建立文件夹、上传图片详细教程
  10. 自动色阶、对比度、直方图均衡等算法的一些小改进