asp.net core系列 67 Web压力测试工具WCAT

最近搭建了一套CQRS框架,需要在投入开发前,进行必要的压力测试。Web Capacity Analysis Tool (Wcat)是一种轻量级HTTP负载生成工具,主要用于衡量受控环境中Web服务器的性能。WCAT可以模拟数千个并发用户向单个网站或多个网站发出请求。WCAT引擎使用一个简单的脚本来定义要回放到Web服务器的HTTP请求集。WCAT是一个非常轻量级但功能强大的工具,可供IT专业人员和开发人员使用。其丰富的设置可用于大多数情况。它最大的缺点是缺乏用于创建和管理负载测试场景的GUI。

WCAT有四个组件来运行WCAT测试:服务器,客户端,控制器和网络,运行测试时,控制器和客户端运行不同的WCAT程序,而服务器使用WCAT文件响应请求。

服务器

服务器负责响应连接请求,管理连接以及接收,处理和响应Web内容请求。

客户端

指定测试中的客户端浏览器数量来配置各种级别的客户端; 客户请求的大小,类型和速率; 请求发送的频率以及请求的页面; 和测试的持续时间。你不必为要测试的每个客户端配备一台客户端计算机。每个WCAT客户端测试都在自己的进程中运行,因此您可以在客户端计算机上运行多个客户端。这些称为虚拟客户端。

控制器

控制器指示客户端机器向服务器发送特定请求,并且服务器响应。收集统计信息并将状态消息发送到客户端计算机。控制器监视测试的持续时间。这是WCAT根据模拟的工作负载确定服务器性能的时间。如果您已指定要监视性能计数器,则控制器将在实验期间监视这些计数器。

网络

出于WCAT的目的,网络只是客户端计算机,控制器和服务器之间的通信链接。网络必须使用TCP / IP,建议网络带宽为每秒100兆位。设置测试时,请确保连接到网络的计算机都已正确配置,以便您知道任何性能问题都不是由不正确的安装引起的。
    二.安装
    安装后文件在C:\Program Files\wcat下,有三个可执行文件(exe)和一个Windows脚本文件(wsf)以及文档(doc)和示例文件夹(samples)。里面的home.ubr和settings.ubr是我从示例文件夹中拿出来修改的,log.xml文件夹是压力测试后的一个分析报告结果。
    wcctl.exe - 控制器

wcclient.exe - 客户端

wcutil.exe - 用于查看测试简要报告的小实用程序

wcat.wsf - 用于在各种客户端计算机上更新,终止和运行wcclient
    三.准备方案文件

(1) settings.ubr文件

在\samples\scripts下有这二个示例文件。settings.ubr文件通常包括:

(1)客户端需要执行的方案文件。 如: clientfile = “home.ubr”;

(2)服务器机器名称或ip。 如:server = “localhost”;

(3)将HTTP负载发送到服务器的物理客户端数。如:clients= 5;

(4)此测试的虚拟客户端数,是指线程数。如: virtualclients = 10;

(5)表现计数器 counters

(6)注册表设置 registry

下面是一个settings.ubr的示例:

复制代码
settings
{
//--------------------------------------------------------------------------
// General controller settings
//
// clientfile - specifies the client file, relative to working dir
// server - host name of the webserver
// virtualclients - number of ‘threads’ per physical client
// clients - number of physical webcat client machines
//
//--------------------------------------------------------------------------
// Example:
//
clientfile = “home.ubr”;
server = “localhost”;
clients = 1;
virtualclients = 100;

//   
//--------------------------------------------------------------------------

//--------------------------------------------------------------------------
// Performance counters (pass '-x' option to wcctl.exe to enable)
//
//  interval        - polling interval in seconds (default=10)
//  host            - host name of machine to monitor (default=webserver)
//  counter         - path of counter to monitor
//
//--------------------------------------------------------------------------
// Optional:
//
//   Additional machines can be monitored by adding more counters blocks.
//
// Example:
//
//   counters {
//       host = "sqlserver";   // name of remote machine
//       interval = 5;
//       counter = "...";
//   }
//
//--------------------------------------------------------------------------

counters
{
    interval = 10;

    counter = "Processor(_Total)\\% Processor Time";
    counter = "Processor(_Total)\\% Privileged Time";
    counter = "Processor(_Total)\\% User Time";
    counter = "Processor(_Total)\\Interrupts/sec";

    counter = "Memory\\Available KBytes";

    counter = "Process(w3wp)\\Working Set";

    counter = "System\\Context Switches/sec";
    counter = "System\\System Calls/sec";

    counter = "Web Service(_Total)\\Bytes Received/sec" ; 
    counter = "Web Service(_Total)\\Bytes Sent/sec" ; 
    counter = "Web Service(_Total)\\Connection Attempts/sec" ; 
    counter = "Web Service(_Total)\\Get Requests/sec" ; 
}

//--------------------------------------------------------------------------
// Registry Key Monitors (pass '-x' option to wcctl.exe to enable)
//
//  path - registry path, relative to HKLM
//  name - name of registry key
//  type - type of value (REG_SZ | REG_DWORD)
//
//--------------------------------------------------------------------------
// Optional:
//
//   Additional registry keys can be monitored on the web server by
//   adding more registry blocks to this file.  Note that simple strings and
//   dwords are all that webcat currently supports.
//
// Example:
//
//   registry {
//     path = "System\\CurrentControlSet\\Services\\Tcpip\\Parameters";
//     name = "DhcpDomain";
//     type = REG_SZ;
//   }
//
//--------------------------------------------------------------------------

registry
{
    path = "System\\CurrentControlSet\\Control\\FileSystem";
    name = "NtfsDisableLastAccessUpdate";
    type = REG_DWORD;
}

registry
{
    path = "System\\CurrentControlSet\\Services\\Tcpip\\Parameters";
    name = "SynAttackProtect";
    type = REG_DWORD;
}

}
复制代码
  (2) home.ubr文件

该文件是示例场景,定义测试方案。文件通常包含预热时间warmup,测试持续时间duration,冷却时间cooldown。默认部分允许您为测试指定默认HTTP标头setheader。事务(transaction)部分用于指定实际的业务场景。weight属性用于设置此事务的优先级。请求部分(request)用于指定事务中的单个页面请求。其中request页面请求包括:

(1)页面的URL

(2)可选的HTTP动词(默认GET)。在提交数据的情况下,必须将POST指定为动词。

(3)POST的POSTDATA为提交的数据

(4)状态代码通常为200(期望的状态),但在某些情况下,您可能需要为移动请求指定300或302

下面是一个home.ubr的示例:

复制代码
scenario
{
name = “IIS Home Page”;

warmup      = 60;
duration    = 300;
cooldown    = 20;

/
//
// All requests inherit the settings from the default request.
// Defaults are overridden if specified in the request itself.
//
/
default
{
    // send keep-alive header
    setheader
    {
        name    = "Connection";
        value   = "keep-alive";
    }

    // set the host header
    setheader
    {
        name    = "Host";
        value   = server();
    }

    // HTTP1.1 request
    version     = HTTP11;

    // keep the connection alive after the request
    close       = ka;
}

//
// This script is made for IIS7
//
transaction
{
    id = "Default Web Site Homepage";
    weight = 1;

    request
    {
        url         = "http://localhost/customer-management/edit-customer/19";
        statuscode  = 200; 
    verb = GET;
    }
   request
    {
        url         = "http://localhost/member/account/login";
        statuscode  = 200; 
    verb = POST;
        postdata = "UserName=hu&Password=123456";
    }
   request
    {
        url         = "http://localhost/customer-management/edit-customer/19";
        statuscode  = 200; 
    verb = POST;
        postdata = "Id=19&Name=hu1&Email=hu3%40qq.com&BirthDate=1997-01-05&UUID=6b220653-c065-43fc-84f7-eead8f2d64e7";
    }
    //
    // specifically close the connection after both files are requested
    //
    close
    {
        method      = reset;
    }
}

}
东莞网站建设www.zg886.cn

你可能感兴趣的:(asp.net core系列 67 Web压力测试工具WCAT)