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
转载于:https://www.cnblogs.com/lonelyxmas/p/11170529.html
asp.net core系列 67 Web压力测试工具WCAT相关推荐
- python的web压力测试工具-pylot安装使用
pylot是python编写的一款web压力测试工具.使用比较简单.而且测试结果相对稳定. 这里不得不鄙视一下apache 的ab测试,那结果真是让人蛋疼,同样的url,测试结果飘忽不定,看得人心惊肉 ...
- asp.net core系列 40 Web 应用MVC 介绍与详细示例
一. MVC介绍 MVC架构模式有助于实现关注点分离.视图和控制器均依赖于模型. 但是,模型既不依赖于视图,也不依赖于控制器. 这是分离的一个关键优势. 这种分离允许模型独立于可视化展示进行构建和测试 ...
- asp.net core 系列 18 web服务器实现
一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是插入 IIS 管道的本机 IIS 模块(本机是指 ...
- 使用 WRK 压力测试工具对 ASP.NET Core 的接口进行压力测试
0. 简要介绍 WRK 是一款轻量且易用的 HTTP 压力测试工具,通过该工具我们可以方便地对我们所开发的 WebAPI 项目进行压力测试,并且针对测试的情况返回结果. PS:Wrk 并不能针对测试的 ...
- 十大网站压力测试软件 - WEB压力测试工具介绍
下面是十个免费的可以用来进行Web的负载/压力测试的工具,这样,你就可以知道你的服务器以及你的WEB应用能够顶得住多少的并发量,以及你的网站的性能.我相信,北京奥组委的订票网站的开发团队并不知道有这样 ...
- 十个免费的WEB压力测试工具
两天,jnj在本站发布了<如何在低速率网络中测试 Web 应用>,那是测试网络不好的情况.而下面是十个免费的可以用来进行Web的负载/压力测试的工具,这样,你就可以知道你的服务器以及你的W ...
- 十大Web压力测试工具
下面是十个免费的可以用来进行Web的负载/压力测试的工具,这样,你就可以知道你的服务器以及你的WEB应用能够顶得住多少的并发量,以及你的网站的性能. Grinder – Grinder是一个开源的JV ...
- 十个免费的 Web 压力测试工具(转)
本文列举了是十个免费工具,可以用来进行Web的负载/压力测试的.这样你就可以知道你的服务器以及你的WEB应用能够扛得住多少的并发量,以及网站性能. 0. Grinder – Grinder是一个开源 ...
- linux下web压力测试工具ab使用及详解
APACHE自带的测试工具AB(apache benchmark).在APACHE的bin目录下. 格式: ./ab [options] [http://]hostname[:port]/path 参 ...
最新文章
- Android核心分析之二十二Android应用框架之Activity
- 好程序员大数据教程:SparkShell和IDEA中编写Spark程序
- 在unity调用WebService的接口方法
- 如何让CloudStack使用KVM创建Windows实例成功识别并挂载数据盘
- 如果我是一线技术主管…… 1
- 2014北科计算机原理试题答案,2014北科计算机组成原理试题
- 聚类算法的原理是什么?
- 电脑连接HDMI显示器后没声音
- 2020湖南省技能竞赛获奖名单_2020技能竞赛丨湖南省职业院校技能竞赛我校赛点圆满闭幕...
- Boost 之 lexical_cast
- MongoDB笔记之简单的增删改查
- 【容器】Podman容器快速上手
- 用于app的支付成功与失败页面
- 玩转pjsip之一 简介
- 查找数组中重复的数字
- SQL注入绕过(passby)策略
- yarn Integrity check failed ... computed integrity doesn‘t match our records
- 计算机应用实验3实验报告,计算机应用实验报告样本.doc
- miix5 u盘安装linux,联想Miix520 U盘装系统xp教程
- https://nbicddnbp.pxvqgzr.com/f/Y315nOiv1 fu指喲 考貝该段,点開块手