.Net性能测试框架Crank的使用方法

目录
  • 安装Crank
  • 创建Crank配置文件
  • 启动Crank-Agent
  • 启动Crank
    • 结果输出
  • 更多参考资料

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

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

安装Crank

运行如下两个命令分别安装Crankcli(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 Controller

The 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 --property
                       os=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: none

jobs:
  bombardier:
    source:
      repository: https://github.com/dotnet/crank.git
      branchOrCommit: main
      project: src/Microsoft.Crank.Jobs.Bombardier/Microsoft.Crank.Jobs.Bombardier.csproj
      sourceKey: bombardier
      noBuild: true
    readyStateText: Bombardier Client
    waitForExit: true
    variables:
      connections: 256 #设置连接数
      warmup: 15 #设置测试预热次数
      duration: 15 #设置测试时间
      requests: 0 #设置测试请求实例数
      rate: 0 #设置每秒请求频率
      transport: fasthttp # | http1 | http2  设置使用golang的fasthttp库发送http请求
      serverScheme: http
      serverAddress: localhost
      serverPort: 5000
      path:
      bodyFile: # path or url for a file to use as the body content
      verb: # GET when nothing is specified
      customHeaders: [ ] # list of headers with the format: '<name1>: <value1>', 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.csproj
    readyStateText: 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 # 指定测试项目为上面定义的server
    load:
      job: bombardier # 指定测试工具bombardier
      variables:
        serverPort: 5000 #配置http服务端口
        path: / #配置http服务地址

profiles:
  local:
    variables:
      serverAddress: localhost
    jobs:
      application:
        endpoints:
          - http://localhost:5010
      load:
        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        |

更多参考资料

crank readme

Benchmarks crank为Benchmarks重构版本

本文示例代码

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

(0)

相关推荐

  • .Net Core内存回收模式及性能测试对比分析

    .NET Core 两种GC模式: Server GC / Workstation GC Server GC : 主要应用于多处理器系统,并且作为ASP.NET Core宿主的默认配置.它会为每个处理器都创建一个GC Heap,并且会并行执行回收操作.该模式的GC可以最大化吞吐量和较好的收缩性.这种模式的特点是初始分配的内存较大,并且尽可能不回收内存,进行回收用时会很耗时,并进行内存碎片整理工作.用一句简单的话说,这个就是贪婪模式,通过尽可能多的获得内存和少回收来得到更好的性能.结果就是高内存使

  • 详解.Net core2.0日志组件Log4net、Nlog简单性能测试

    .Net core之Log4net.Nlog简单性能测试 比较log4net.nlog的文件写入性能(.netcore环境),涉及代码和配置如有不正确的地方,还请批评指正. 测试环境 开发工具: Vsual Studio 2017 15.3 框架版本: .net core 2.0 操作系统:window10 Enterprise 1703 硬件配置:CPU I3-4170 3.7GHz,内存 8G,固态硬盘 日志组件 log4net 2.0.8 nlog 5.0.0-beta10 测试用例 1.

  • .NET Orm性能测试分析

    简介 OrmBenchmark 这个项目主要是为了测试主要的Orm对于 SqlServer 数据库的查询并将数据转换成所需 POCO 对象的耗时情况(好吧,实际上不完全orm,更像是SqlMapper ...) 测试结果: .NetFramework 4.6 有预热 .NetFramework 4.6 没有预热 .NETCore2.0 有预热 .NETCore2.0 没有预热 总体来看, Dapper的性能还是蛮强悍的 更多详情: Net Framework Net Core 性能测试 性能测试

  • .Net性能测试框架Crank的使用方法

    目录 安装Crank 创建Crank配置文件 启动Crank-Agent 启动Crank 结果输出 更多参考资料 Crank 是微软新出的一个性能测试框架,集成了多种基准测试工具,如bombardier.wrk等. Crank通过统一的配置,可以转换成不同基准测试工具命令进行测试.可参考Bombardier Job实现. 安装Crank 运行如下两个命令分别安装Crank的cli(Controller)和Agent. dotnet tool update Microsoft.Crank.Cont

  • Python 3.6 性能测试框架Locust安装及使用方法(详解)

    背景 Python3.6 性能测试框架Locust的搭建与使用 基础 python版本:python3.6 开发工具:pycharm Locust的安装与配置 点击"File"→"setting" 点击"setting",进入设置窗口,选择"Project Interpreter" 点击"+" 输入需要"Locust",点击"Install Package" 安装完成

  • yii,CI,yaf框架+smarty模板使用方法

    本文实例讲述了yii,CI,yaf框架+smarty模板使用方法.分享给大家供大家参考,具体如下: 最近折腾了框架的性能测试,其中需要测试各个模板跟smarty配合的性能,所以折腾了一桶,现总结一下.之前已经写过kohana框架+smarty模板,这里不再重复了. 一.yii框架+smarty模板 yii是覆盖了viewRenderer组件. 1.1,下载yii框架并解压,下载smarty框架并解压,将smarty/libs文件夹拷到yii框架application/protected/vend

  • 手写java性能测试框架第二版

    目录 引言 第二版的threadbase代码如下 固定次数模式的压测虚拟类 固定时间模式虚拟类 HTTPrequestbase为基础的多线程类 固定次数模式的多线程类 固定时间模式的多线程类 使用Demo: 引言 依照领导要求区分了两种压测模式:固定次数压测和固定时间压测.此前一直沿用的都是固定次数,所以本次第二版剥离了固定次数的模式增加了固定时间的模式. 这是第一版:性能测试框架 第二版的threadbase代码如下 package com.fun.base.constaint; import

  • 手写java性能测试框架的实现示例

    目录 引言 代码分享 基础类实现 数据库的实现 concurrent类 引言 之前写过一个性能测试框架,只是针对单一的HTTP接口的测试,对于业务接口和非HTTP接口还无非适配,刚好前端时间工作中用到了,就更新了自己的测试框架,这次不再以请求为基础,而是以方法为基础,这样就可以避免了单一性,有一个base类,然后其他的各种单一性请求在单独写一个适配类就好了,如果只是临时用,直接重新实现base即可. 代码分享 package com.fun.frame.thead; import com.fun

  • ZF框架实现发送邮件的方法

    本文实例讲述了ZF框架实现发送邮件的方法.分享给大家供大家参考,具体如下: Zend_Loader::loadFile("Zend/Mail.php"); Zend_Loader::loadFile("Zend/Mail/Transport/Smtp.php"); $config = array( 'auth' => 'login', 'username' => 'username@163.com', 'password' => 'password

  • thinkPHP5.0框架环境变量配置方法

    本文实例讲述了thinkPHP5.0框架环境变量配置方法.分享给大家供大家参考,具体如下: 允许使用环境变量配置,并且优先级别比在配置文件中要高,因为在读取配置参数的时候,首先会判断环境变量中是否存在该配置. 在开发过程中,可以在应用根目录下面的.env来模拟环境变量配置,.env文件中的配置参数定义格式采用ini方式,例如: app_debug = true app_trace = true 如果你的部署环境单独配置了环境变量,那么请删除.env配置文件,避免冲突. 环境变量配置的参数会全部转

  • Zend Framework框架Smarty扩展实现方法

    本文实例讲述了Zend Framework框架Smarty扩展实现方法.分享给大家供大家参考,具体如下: 今天总结一下ZF框架中扩展Smarty模板的方法,在ZF帮助文档中已经有比较详细的介绍,在这我稍微多说一些. 一.将smarty的核心文件包放在lib文件夹下,文件包中要包括(internals/,plugins/,Config_File.class.php,Smarty.class.php,Smarty_Compiler.class.php,debug.tpl). 二.在Zend/View

  • js实现iframe框架取值的方法(兼容IE,firefox,chrome等)

    本文实例讲述了js实现iframe框架取值的方法.分享给大家供大家参考,具体如下: 为啥世上会有这么多不同的浏览器?每次遇到js/css的浏览器兼容性问题,总是要发出这样的感叹,真希望这些个浏览器公司全部倒下,然后只留下一家(显然这是一个不可能实现的美好愿望),言归正传,看代码吧: iframe框架内页: <html> <head> <title>框架内页</title> </head> <body> <div> <

  • CI框架集成Smarty的方法分析

    本文实例讲述了CI框架集成Smarty的方法.分享给大家供大家参考,具体如下: 因为CI自带的模板功能不是很方便,所以大家普遍采用集成Smarty的方式来弥补CI这方面的不足. 本人在网上看了不少CI集成Smarty的教程,包括咱们CI论坛里面的一个精华帖子 http://codeigniter.org.cn/forums/forum.php?mod=viewthread&tid=10345. 自己对比了一下这些教程,我认为下面这个方案是所有里面最优秀的,强烈推荐给大家(当然也是我自己采取的方案

随机推荐