Web Capacity Analysis Tool 压力测试工具使用笔记
一.背景介绍
Web Capacity Analysis Tool是微软轻量级Web压力测试工具, 早先是IIS 6.0Resource Tool kit 工具包中的一个组件,现在独立出来有一个社区版本,下载地址在http://www.iis.net/downloads/community/2007/05/wcat-63-(x64)。
二. 安装与工作原理简介
a. 执行安装文件后目录结构如下:

简单说明一下:
wcctl.exe 主导测试的控制器,负责协调各测试客户端(wcclient.exe),收集客户端的测试结果和服务器性能数据信息
wcclient.exe 测试客户端,负责接收控制器发送的配置信息(客户端可以在不同的机器上),返回客户端的测试结果
wcat.wsf 测试启动封装脚本,见后面的具体说明
wcutil.exe 查看测试结果的工具
report.xsl 测试的结果是一个xml文件,通过该xsl文件转换成html。该xsl文件和结果xml文件在同一目录,IE直接打开即可(其它浏览器打开会报错).
BTW, 这个xsl有两个Bug, 具体的修复见这里http://stackoverflow.com/questions/11097084/wcat-report-xsl-invalid.
b.安装客户端
1. 以管理员身份运行cmd,进入WCAT安装目录,默认在C:\Program Files\wcat
2. 运行 "cscript //H:Cscript"
3. 运行 wcat.wsf –terminate –update –clients {comma separated list of WCAT client machines}, 以逗号分隔指定客户端列表,如果在本机运行测试客户端,指定localhost, 可能会导致机器重起
4. 把安装目录加入PATH 环境变量(这一步可选),方便在任何目录运行测试
C.测试运行后的进程视图如下图所示

测试的执行入口是wcat.wsf, 简单介绍一下它的工作流程:
1.测试环境初始化
1.1 解析传入运行时参数,
1.2 如果使用了-terminate,中止有正在运行的客户端
1.3 如果使用了-time,同步服务器和客户端的时钟
1.4 如果使用了-update 更新客户端的运行文件
2. 运行
1.1 运行客户端
当客户端启动时,客户端尝试联接控制器获取当前要测试的场景信息, 其中包括要测试的服务器地址和端口,测试的开始热机时间,测试时间,测试结束时间,具体的测试步骤等.
1.2运行控制器
控制器运行根据相关配置文件控制整个测试的过程,一旦客户端的连接数量等于配置的客户端数,发起指令指示所有客户端开始测试
三. 一个简单的测试用例
我们先来看一个简单的测试场景,测试一个网站的主页。 为简化起间,所有的组件布署在一台机器上
3.1 首先在IIS布署好一个网站,我使用了asp.net mvc4默认的模板生成的网站
3.2编写测试脚本,其中包含两种类型的脚本
3.2.1 主要是客户端使用的场景文件(Scenario File),内容如下所示:
scenario
{
name = "Test home page"; //测试的场景名字,会最终出现在测试结果的xml文件件中
warmup = 20; //测试前热机时间,为尽量保证测试准确性,允许所有机器测试前准备一段时间再开始测试,单位是秒
duration = 60; //测试持续时间, 单位是秒
cooldown = 20; //结束时间, 单位是秒
transaction //表示开始一个事务,这个事务表示一个基本完整业务场景,而非数据库里的'事务'
{
id = "Home"; //事务标识
weight = 1; //表示测试选中的比例值,选中事务的计算公式是 weight of current / sum of all tranactions weight
request //表示具体的请求,可以有多个
{
url = "/Home/Index";
verb = GET;
statuscode = 200; //期望的返回http状态码
}
}
}
3.2.2 测试配置信息(Settings File)
settings
{
clientfile = "simple.scenario"; //表示要发送到客户端的测试场景配置文件
server = "127.0.0.1"; //服务器名字或地址,建议用IP
clients = 1; //表示客户端数量
virtualclients = 10; //每个客户端启动的虚拟连接数 所以总的连接数是clients * virtualclients
}
3.3 运行测试
wcat.wsf -terminate -run -f simple.cfg -x
3.4 查看结果
上面的运行命令没有指定保存结果的xml文件名,默认是log.xml ,把report.xsl拷贝到同一步目录,在IE中打开log.xml,下图是本人机器的结果截图

Transaction/sec 表示每秒处理事务数
Request/sec 表示系统吞吐量
详细的参数说明参见说明文档
四.WCAT配置文件格式和语法
4.1 基本的语法格式有点类C形式,
element
{
attribute = string/dynstring/keyword/integer
}
四种类型说明如下,
1. string 表示一个ascii编码的字符串常量, "value"
2. dynstring 它有三种形式
2.1 <filename> 表示一个文本文件,运行时将用文本文件内容表示属性值
2.2 function(p1, p2, …); 表示是一个函数,运行时将函数返回值来表示属性值, WACT支持内部函数和自定义函数,具体的参见说明文档
2.3 "value" + "value" 表示字符串连接
3. keyword 表一个关键字(备注:直接写不需要加引号)
4. integer 整型
4.2 具体的配置文件格式
4.2.1 配置文件(Settings File)格式
settings
{
clientfile = string; //如前面解释
server = string; //如前面解释
clients = integer; // 如前面解释
virtualclients = integer; //如前面解释
portscalability = integer; //参见http://msdn.microsoft.com/zh-cn/library/cc150670
loginterval = integer; //表示屏幕默认显示日志间隔,单位是毫秒
counters {…} //表示设计性能计数器监视
registry {…} //参见说明文档
}
counters
{
interval = integer; //数据收集间隔
host = string; //数据收集的服务器名或IP
counter = string; // 性能计数器的名字,格式是object(instance)\countername 或object\countername,可打开perfmon.msc查看计数器的名字
}
4.2.2客户端场景文件格式
scenario
{
name = string; // 如前面解释
warmup = integer; // 如前面解释
duration = integer; // 如前面解释
cooldown = integer; // 如前面解释
throttle = integer //表示限流控制,单位是字节,详见说明文档
minbps = integer; //表示每秒最小流量接收数, 详见说明文档
library {…} //表示引用的扩展dll,详见说明文档
default {…} //表示一些默认值设置
transaction {…} // 定义一个事务
}
default {…} 元素和transaction元素下的request元素属性定义一样,主要是为所有的事务请求提供默认设置,如果在特定request元素中设置了属性值将覆盖默认设置
transaction
{
// attributes
id = string; //事务标识
weight = integer; //见前面说明
// elements
request{…} //事务的具体请求定义,可定义多个
branch{…} // 表示分支,branch包含一下goto 元素,根据goto元素定义的request id和weight随机跳转,但要保证没有死偱环
sleep{…} // 表示让客户端睡眠一段时间再开始测试,具体参见说明文档
cookies{…} // 是否清除上次请求保存的cookie
close{…} // 连接设置
}
request
{
id = string; //唯一标识一个请求
url = dynstring; //请求url
verb = keyword [GET|POST]; //http方法,当前只支持GET和POST
redirverb = keyword [GET|POST]; //重定向http方法,未设置使用前请求的请求方法
statuscode = integer; //期望的返回http状态码,如果返回状态码与期望不一致,将产生一个“非期望的状态码”错误,0将忽略状态码检查,默认为200
redirect = keyword [true|false]; //是否跟随重定向,默认为false
cookies = keyword [true|false]; //是否保存cookie,默认为true
secure = keyword [true|false]; //是否使用ssl连接,默认为false
handshake = keyword [full|reconnect]; //控制ssl连接方式,默认为full
protocol = keyword [PCT1|SSL2|SSL3|TLS1]; //指定ssl连接协议,默认为SSL3
algorithms = keyword [RSA_RC4_128_SHA]; //加密算法
version = keyword [HTTP10|HTTP11]; //http版本
postdata = dynstring; //post的数据,如果http method设为GET将忽略该属性
close = keyword [ka|graceful|reset]; //当前请求完成后连接处理方式, ka 表示Keep alive, graceful表示等待当前连接上未完成的请求完成后关闭,Reset强行关闭
authentication = keyword [BASIC|NTLM]; //请求验证方式
username = dynstring; //用户名
password = dynstring; //密码
server = dynstring; //请求服务器名字或ip列表
port = integer; //端口
handler = function; //响应的通过扩展处理函数
setheader //修改已经存在的http head头信息
{
name = dynstring;
value = dynstring;
}
addheader //添加新的http head
{
name = dynstring;
value = dynstring;
}
}
五. 更复杂的测试用例
5.1 模拟一个登录场景, 测试post数据. 场景配置文件如下
scenario
{
name = "Test user login";
warmup = 20;
duration = 60;
cooldown = 20;
default
{
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;
statuscode = 200;
}
transaction //模拟用户登录步骤,1. 打开主页 2.用户登录
{
id = "User login";
weight = 1;
request
{
url = "/Home/Index";
verb = GET;
}
request
{
url = "/Account/Login";
verb = POST;
postdata = "UserName=aa&Password=bb&RememberMe=true"; //可以先在浏览器中正常登录, fidder查看相关的post和head信息
statuscode = 302;
setheader
{
name = "Content-Type";
value = "application/x-www-form-urlencoded";
}
}
}
}
5.2测试在Setting file 中添加性能计数器, 显示性能计数器Query是成功的,但奇怪的是没有收集到数据.我在测试的服务器上自定义一个性能计数据收集来查看计数结果,也可以通过写脚本或程序获得计数器结果。
六.总结
这里只介绍了WCAT的一些基本用法,忽略了一些像测试环境配置信息,测试最佳实建议等许多信息,建议有时间通读一下说明文档。
Web Capacity Analysis Tool 压力测试工具使用笔记的更多相关文章
- Web 应用性能和压力测试工具 Gor - 运维生存时间
Web 应用性能和压力测试工具 Gor - 运维生存时间 undefined 无需花生壳,dnspod实现ddns - 推酷 undefined
- Windows开源Web服务器性能和压力测试工具
linux有很多开源工具用来测试服务器负载,而windows上非常少,几乎没有除了几个复杂的JMeter WET等 将两个好用的工具是Linux版本通过Cygwin移植过来,方便广大windows人员 ...
- 面向Web应用的并发压力测试工具——Locust实用攻略
1. 概述 该方案写作目的在于描述一个基于Locust实现的压力测试,文中详细地描述了如何利用locustfile.py文件定义期望达成的测试用例,并利用Locust对目标站点进行并发压力测试. 特别 ...
- 十个免费的Web压力测试工具
两天,jnj在本站发布了<如何在低速率网络中测试 Web 应用>,那是测试网络不好的情况.而下面是十个免费的可以用来进行Web的负载/压力测试的工具,这样,你就可以知道你的服务器以及你的W ...
- 十个免费的 Web 压力测试工具
本文列举了是十个免费工具,可以用来进行Web的负载/压力测试的.这样你就可以知道你的服务器以及你的WEB应用能够扛得住多少的并发量,以及网站性能. 0. Grinder – Grinder是一个开源 ...
- asp.net core系列 67 Web压力测试工具WCAT
一.介绍 最近搭建了一套CQRS框架,需要在投入开发前,进行必要的压力测试.Web Capacity Analysis Tool (Wcat)是一种轻量级HTTP负载生成工具,主要用于衡量受控环境中 ...
- 单机Web后端接口服务压力测试
单机Web后端接口服务压力测试 工具:Apache jmeter 环境:Window 10 语言:Kotlin + java 架构:SpringBoot + + Mysql + redis + Spr ...
- 九款Web服务器性能压力测试工具
一.http_load 程序非常小,解压后也不到100Khttp_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会 ...
- 微软压力测试工具 web application stress
转自 http://www.cnblogs.com/tonykan/p/3514749.html lbimba 铜牌会员 这里给广大的煤油推荐一个web网站压力测试工具.它可以用来模拟多个用户操作网 ...
随机推荐
- 用JDBC查询数据库
JDBC API的核心组件:1.DriverManager类:用语跟踪可用的JDBC驱动程序并产生数据库连接. 2.Connection接口:用于取得数据库信息.生成数据库语句,并管理数据库事务. 3 ...
- How to installation V145 Renault CAN Clip diagnostic software
Eobd2.fr has launched the new 2015 V145 Renault CAN Clip diagnostic tool (SP19-A and SP19-B). Here i ...
- Android小项目之十二 设置中心的界面
------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 按惯例,写在前面的:可能在学习Android的过程中,大家会和我一样,学习过大量的基础知识,很多的知识点 ...
- 自定义EditText实现一键删除数据
转载请注明出处http://blog.csdn.net/xiaanming/article/details/11066685 自定义EditText带删除小图标, 实现的功能: 点击删除小图标,删除当 ...
- 20145102 《Java程序设计》第2周学习总结
20145102 <Java程序设计>第2周学习总结 教材学习内容总结 这章先介绍了基本类型,和其他语言相似,分为short整数(2字节).int整数(4字节).long整数(8字节).f ...
- 关于inodes占用100%的问题及解决方法
#df shows no file systems processedPosted by John Quaglieri on 27 July 2012 07:26 AMA df -m command ...
- Table of Contents - TCP/IP
网络访问层 Ethernet II 网际层 IP IPv4 报文格式 ICMP ICMP 报文分析 ping: 向网络主机发送 ICMP ECHO_REQUEST 包 ARP ARP 过程 arp 命 ...
- [转]美国的软件公司是什么样?---- 以Fog Creek为例
作者: 阮一峰 日期: 2009年2月15日 Joel写过一篇文章,关于软件公司如何雇到优秀的程序员. 他说,软件公司的头等大事,就是找到第一流的人才.不同于其他行业,软件是一种纯智力产品,你有什么样 ...
- char*,const char*和string 三者转换
1. const char* 和string 转换 (1) const char*转换为 string,直接赋值即可. EX: const char* tmp = "tsinghua&quo ...
- 运维人愿意听到的话 vs 不愿意听到的话
在公司兼做了接近两年的远程运维工作,与内部打交道的过程中听到各种各样的话, 简单摘列一下那些似曾相识的愿意.不愿意听到的话: ”先别操作,帮忙先拷贝日志!我们调查一下答复!“ vs ”你先重启一下 ...