asp.net core系列 67 Web压力测试工具WCAT
原文: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兆位。设置测试时,请确保连接到网络的计算机都已正确配置,以便您知道任何性能问题都不是由不正确的安装引起的。

二.安装

    下载WCAT 6.3:https://www.iis.net/downloads/community/2007/05/wcat-63-x64

    安装后文件在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 headersetheader{name    = "Connection";value   = "keep-alive";}// set the host headersetheader{name    = "Host";value   = server();}// HTTP1.1 requestversion     = HTTP11;// keep the connection alive after the requestclose       = 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;}}
}

四.开始压力测试

  打开cmd命令提示符界面,定位到 C:\Program Files\wcat下。接着将asp.net core mvc项目发布到iis上,默认端口为80。

  (1) 步骤1客户端运行:

    最初,需要在所有客户端计算机上更新WCAT设置,wcat客户端计算机的逗号分隔列表.

    C:\Program Files\wcat> wcat –terminate –update –clients {127.0.0.1} -run

  (2) 步骤2控制器运行

    命令中localhost为WCATClientMachineName,可以用逗号分隔的客户端名称或IP

    C:\Program Files\wcat> wcat -x -run -clients localhost -f settings.ubr -t home.ubr

    输出以下信息,包括性能统计指标,测压的Server服务器为:localhost。一个物理客户端Clients。

  (3) 步骤3启动客户端.

    客户端将尝试连接到控制器。如果它没有连接,程序将在十秒后再次尝试,并将继续尝试每十秒钟,直到你终止wcclient.exe。要终止wcclient.exe,请在命令提示符下键入CTRL + C.

    下面是启动客户端:在打开一个物理客户端命令提示符界面(有200个虚拟客户端,也就是200个并发)。

    C:\Program Files\wcat> wcclient localhost

    下面测压前的一些配置信息打印,如下图所示:

五.查看分析

  接下来会在控制台打印,按之前配置10秒(interval = 10)打印一次信息统计,持续300秒测压的信息统计。下图是第一轮10秒的信息统计,共300秒还会有29轮。

  

  下面在测压过程中来分析查看:测压中包含了登录,产生的会话是6500个。 post修改数据产生的cqrs事件源有4997条。数据库监控一切正常。只是会话多了redis会连接失败与内存有关系。

  (1) post修改产生的事件源(也就是修改一条数据,同时新增一个事件源),300秒产生4997条数据。

  (2)会话存储,300秒产生6502个登录会话

  (3) sql server profile的监控,可以查看sql性能

  

六.LOG.xml查看分析

  完成300秒测压后,结果将存储在控制器机器当前目录的log.xml文件中。WCAT有一个XSLT“report.xsl”,可以将这个XML转换为可读的安装文件夹。

  Log.xml用来分析结果包含:文件头,结果,性能计数器(如果您指定了所需的那些),文件和类统计信息。 可查看wact安装后doc文件夹中的帮助文档。

  通过分析log.xml可以看到一些统计信息,如请求的http状态,如下图请求http 200的有11078个, 请求登录产生的302有5558个,没有其它http 状态,说明200个并发没有报程序错误。

    下面是http响应的时间:

    下面是300秒内200个并发的总连接请求数,平均每秒请求55个url(16710/300.0)

七.分析结论

  上面第一个方案测压持续时间300秒,预热30秒,共200个线程并发,一个线程一次请求3个url(一个登录,一个查询,一个修改提交数据)。300秒内请求url总数为16710个,平均每秒请求55个,平均响应时间3616ms,  http 200状态有11078个, http 302状态有5558个。

  

  第二个方案测压持续时间300秒,预热60秒,共400个线程并发,一个线程一次请求3个url(一个登录,一个查询,一个修改提交数据)。300秒内请求与第一个方案差不多,应该是并发上不去了。

  第三个方案压持续时间300秒,预热60秒,共100个线程并发,一个线程一次请求3个url(一个登录,一个查询,一个修改提交数据)。300秒内请求url总数为15222个,平均每秒请求152个,平均响应时间1970 ms,http 200状态有10150个, http 302状态有5608个。

参考文献

  StressTestingWCAT

  WCAT – Simple Performance Test Tool

  Using WCAT to Stress-Test IIS

posted on 2019-07-11 15:52 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/11170529.html

asp.net core系列 67 Web压力测试工具WCAT相关推荐

  1. python的web压力测试工具-pylot安装使用

    pylot是python编写的一款web压力测试工具.使用比较简单.而且测试结果相对稳定. 这里不得不鄙视一下apache 的ab测试,那结果真是让人蛋疼,同样的url,测试结果飘忽不定,看得人心惊肉 ...

  2. asp.net core系列 40 Web 应用MVC 介绍与详细示例

    一. MVC介绍 MVC架构模式有助于实现关注点分离.视图和控制器均依赖于模型. 但是,模型既不依赖于视图,也不依赖于控制器. 这是分离的一个关键优势. 这种分离允许模型独立于可视化展示进行构建和测试 ...

  3. asp.net core 系列 18 web服务器实现

    一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是插入 IIS 管道的本机 IIS 模块(本机是指 ...

  4. 使用 WRK 压力测试工具对 ASP.NET Core 的接口进行压力测试

    0. 简要介绍 WRK 是一款轻量且易用的 HTTP 压力测试工具,通过该工具我们可以方便地对我们所开发的 WebAPI 项目进行压力测试,并且针对测试的情况返回结果. PS:Wrk 并不能针对测试的 ...

  5. 十大网站压力测试软件 - WEB压力测试工具介绍

    下面是十个免费的可以用来进行Web的负载/压力测试的工具,这样,你就可以知道你的服务器以及你的WEB应用能够顶得住多少的并发量,以及你的网站的性能.我相信,北京奥组委的订票网站的开发团队并不知道有这样 ...

  6. 十个免费的WEB压力测试工具

    两天,jnj在本站发布了<如何在低速率网络中测试 Web 应用>,那是测试网络不好的情况.而下面是十个免费的可以用来进行Web的负载/压力测试的工具,这样,你就可以知道你的服务器以及你的W ...

  7. 十大Web压力测试工具

    下面是十个免费的可以用来进行Web的负载/压力测试的工具,这样,你就可以知道你的服务器以及你的WEB应用能够顶得住多少的并发量,以及你的网站的性能. Grinder – Grinder是一个开源的JV ...

  8. 十个免费的 Web 压力测试工具(转)

    本文列举了是十个免费工具,可以用来进行Web的负载/压力测试的.这样你就可以知道你的服务器以及你的WEB应用能够扛得住多少的并发量,以及网站性能. 0. Grinder –  Grinder是一个开源 ...

  9. linux下web压力测试工具ab使用及详解

    APACHE自带的测试工具AB(apache benchmark).在APACHE的bin目录下. 格式: ./ab [options] [http://]hostname[:port]/path 参 ...

最新文章

  1. Android核心分析之二十二Android应用框架之Activity
  2. 好程序员大数据教程:SparkShell和IDEA中编写Spark程序
  3. 在unity调用WebService的接口方法
  4. 如何让CloudStack使用KVM创建Windows实例成功识别并挂载数据盘
  5. 如果我是一线技术主管…… 1
  6. 2014北科计算机原理试题答案,2014北科计算机组成原理试题
  7. 聚类算法的原理是什么?
  8. 电脑连接HDMI显示器后没声音
  9. 2020湖南省技能竞赛获奖名单_2020技能竞赛丨湖南省职业院校技能竞赛我校赛点圆满闭幕...
  10. Boost 之 lexical_cast
  11. MongoDB笔记之简单的增删改查
  12. 【容器】Podman容器快速上手
  13. 用于app的支付成功与失败页面
  14. 玩转pjsip之一 简介
  15. 查找数组中重复的数字
  16. SQL注入绕过(passby)策略
  17. yarn Integrity check failed ... computed integrity doesn‘t match our records
  18. 计算机应用实验3实验报告,计算机应用实验报告样本.doc
  19. miix5 u盘安装linux,联想Miix520 U盘装系统xp教程
  20. https://nbicddnbp.pxvqgzr.com/f/Y315nOiv1 fu指喲 考貝该段,点開块手

热门文章

  1. 【设计模式系列】行为型之模板模式
  2. Java编程——输入某年某月某日,判断这一天是这一年的第几天?
  3. [经典线程同步问题]吸烟者
  4. ARM S3C2410硬件手册重点
  5. 9 Characteristics of Free Software Users
  6. 从交换机分析网络风暴
  7. 知识图谱开源社区_您需要了解的关于开源社区中的倦怠的知识
  8. rxvt_为什么我使用rxvt作为终端
  9. bash 别名_必不可少的Bash别名
  10. linux入门_Linux入门的10种方法