WCAT 6.3 web performance and scalability test tool released

Download: wcat.doc

The NT Performance team just publically released the latest version of WCAT (Web Capacity Analysis Tool), the web performance test tool that the IIS team and NT Performance team use to conduct internal performance and scalability testing of IIS and ASP.NET.

UPDATE 1/24/2008: Updated WCAT 6.3 build is available that fixes the “NULL Controller Specified” error. The build is available immediately at the existing download links.  For more info, see https://mvolo.com/blogs/serverside/archive/2008/01/24/Updated-WCAT-6.3-released.aspx.

This tool is available for download from the IIS.NET download center, and includes detailed documentation you need to use it:

This version replaces the antiquated WCAT 5.2 released in the IIS6 Resource Kit.

The tool enables a script of http requests to be executed against a web server from 1 or more client machines, which are automatically coordinated from a single controller that kicks off, manages, and collects the data from the performance run.  This allows much greater request loads to be tested then possible by running a single http client on a single machine.

Among other things, the tool supports:

  • scripting complicated http transactions, with randomness
  • collection perf counter data from the server
  • generating rich reports

I’ve personally used this tool to do heavy performance testing for IIS, and like the flexibility and ease of adding multiple client machines to up the request load and really push the server to the 100%%%% CPU mark.

The documentation included in the tool has a great reference for using the tool, and writing the WCAT scripts.  You can download the documentation online here: WCAT 6.3 Documentation (it is also included in the WCAT installation in the “doc” folder).

Let me know if you are checking the tool out, and how it goes.  I will be posting more walkthrough information and some sample scripts soon.




  1. Anonymous

    The NT Performance team just publically released the latest version of WCAT (Web Capacity Analysis Tool),

  2. Anonymous

    The NT Performance team just publically released the latest version of WCAT (Web Capacity Analysis Tool

  3. Anonymous

    It’d be really nice to have some sort of GUI for this tool. Or a recorder … or heck open source it. There’s a definte hole in this space.

  4. Anonymous

    The latest version of WCAT (Web Capacity Analysis Tool – the web performance test tool that the IIS team

  5. Mike Volodarsky


    I am not sure whether WAST is being maintained internally – WCAT is being actively developed and is used by the Windows performance team and by the IIS team to do performance testing, so we thought it would be great to release the tool publicly for customers to do performance testing.

    Is there something particular about WAST that you are interested in?


  6. Anonymous

    セミナーでWebサーバーに負荷をかけるツールとしてWCATを紹介していますが、そのフォローを少ししておかないといけませんね。 IIS Resource Kit に入っているWCATはV5.2というもので、最近もっと新しいものがリリースされています。

  7. Anonymous

    WAST is still great to do some fast testings…
    But I miss the ability to script for e.g. forms logon.

  8. Mike Volodarsky


    I dont have any comparison information right now, but I’ll be playing with the VS tools in the near future and post something …



  9. Anonymous

    Using WCAT 6.3 I cannot get the global portion of the library subsection to work.


    library {

    name = “DDL.dll”;

    global {

    initialize = “somefunctionname”;


    Causes wcclient to crash with syntax error, or at best what I can call a syntax error:

    “Invalid code recieved” from the wcctl.exe

  10. Anonymous

    I am trying to connect me to a web server that supports to SSL and working, the configuration that I am using is the following:
    name = “Test SSL”;
    warmup = 30;
    duration = 120;
    cooldown = 20;

    // send keep-alive header
    name = “Connection”;
    value = “keep-alive”;

    // set the host header
    name = “Host”;
    value = server();

    // HTTP1.1 request
    version = HTTP11;

    // keep the connection alive after the request
    close = ka;
    id = “Test SSL”;
    // weight = 1;

    secure = true;
    // protocol = SSL3;
    // port = 443;
    // algorithms = RSA_RC4_128_SHA;
    // RSA_RC4_128_MD5
    // handshake = full;
    verb = GET;
    url = “/signonTC.asp”;
    statuscode = 200;

    // specifically close the connection after both files are requested
    method = graceful;

    the error that appears to me is the following one
    thanks for its aid…
    PS C:wcat> ./wcclient
    Controller: localhost
    Wait for controller: false
    IPv6: false
    Bind Address: not specified
    It is suggested that the following registry key be set to the
    appropriate value before running wcclient. The test will continue,
    however you may experience connection establishment issues.

    Key: HKLMSystemCurrentControlSetServicesTCPIPParametersMaxUserPort
    Type: REG_DWORD
    Value: 0xfffe

    Resolving server www2.todo1.com…
    MESSAGE: adding to the list of resolved servers.
    NULL controller specified.
    PS C:wcat>

  11. Anonymous

    It determines that the error appears when in the PC you have installed Visual Studio 2005, after the installation of this product the error that appears is the following one:

    PS C:wcat > ./wcclient l3agn70 – b
    Unable to create logfile.
    Controller: l3agn70
    For Wait to controller: true
    IPv6: false
    Bind Address: not specified
    It is suggested that the following registry key sees Seth to the
    appropriate VALUE before running wcclient. The test will continues,
    however you may experience connection establishment issues.

    Key: HKLM System CurrentControlSet Services TCPIP Parameters MaxUserPort
    Type: REG_DWORD
    VALUE: 0xfffe

    Resolving server gwxml.bancomercantil.com…
    MESSAGE: adding to the list of you solve server.
    Test settings…
    Warmup: 30
    Duration: 120
    Cooldown: 20
    Server: gwxml.bancomercantil.com
    Virtual Clients: 30
    Threads: 2
    Test beginning…
    Virtual Starting 1 client every 0,500000 seconds.
    f:ntvbl _core_perf_utilities sdktools wcat client httpsreq.c@422: Error during InitializeSecurityContext.
    NULL to controller specified.
    PS C:wcat >

    I am going to apply to the SP1 in Visual studio 2005 to see if the continuous error.

  12. Anonymous

    Trying to get WCAT 6.3 running in test, but wcclient.exe keeps dying with a “NULL controller specified” after resolving and connecting to my controller! It wcctl.exe reports an “error 10054 was encountered cr/lf Error receiving code. cr/lf Error accepting remote connection”.

    I’ve played with DNS, (everything can resolve) permissions (local admin everywhere) and even a fresh new machine with no firewall, to no avail. Any help appreciated!

  13. Anonymous

    Has anyone else run into problems when specifying the -clients command line attribute?

    In the LaunchClients function in wcat.wsf, I had to change:

    commandline = CLIENT_COMMAND_LINE + ” ” + hostname + ” -b”;


    commandline = “////” + clients[i] + TARGET_SHARE + “wcclient.exe” + hostname + ” -b”;

    in order to get it to loop through the array of clients. Without doing that, it just always used localhost.

  14. Anonymous

    I have the same problem like Daryl’s. wcclient.exe dies with “NULL controller specified.” Have anyone managed to succeed?

  15. Anonymous

    We have a fix for the NULL controller specified issue. We will need to package it up and re-release it. Mike will update the blog when it is done.

  16. Anonymous

    Hi: I posted on IIS.net but didn’t get a response.

    I went through the docs and tried to configure it with a basic settings and test script, but when I run it from the command line it doesn’t seem to do anything.

    It echoes back the server to be tested, and the number of clients, and then just sits there? Eventually I have to control-c to kill it.

  17. Mike Volodarsky

    Hi Martyn,

    Unfortunately I havent gotten a chance to do this yet. … Did you have a specific question I can answer?



  18. Anonymous

    I would just like to install and try out WCAT on one machine. (I know the results will not mean much) The instrucions seem long and complex. Is there a quick setup or is it easier than it looks?

  19. Mike Volodarsky

    Hi Martyn,

    It’s fairly easy. You can use the installer to install it on the controller machine. Then, if you need to install it on other machines that will act as clients, you can use the following command (assuming the firewall is open, you are running the cmd as Administrator, and Administrator account has a syncronized password on all computers involved):

    wcat.wsf –terminate –update –clients {comma separated client list, including localhost if its to be a client}

    To run a test, you’ll need to make a scenario file that defines the requests you’d like to make. You can use the included sample scenario file and the documentation to create it.



  20. Anonymous

    The IIS 7.0 Resource Kit Book is finally out! Ok, it’s been out for almost 2 months, but somehow

  21. Anonymous

    I have try to run wcat on XP Pro but when I run: ‘wcat.wsf -terminate -run -clients {localhost} -t {localStart.ubr} -f {setting.ubr} -s {localhost} -singleip -x’

    (localStart.ubr is home.ubr)

    Windows show message: “wcctl.exe has encountered a problem and needs to close. We are sorry for the inconvenience.”

    Please help!

  22. Anonymous

    I have the same problem with errors. I run wcat controller and client on a single machine. The test is running but the result is: “unexpected errors: 455” which is actually number of all responses. I think problem is that i want to test asp.net application(.net 2.0) and I dont know what value I should put in settings file. If i write: server= “” the test runs with errors. But this is only IP of computer, not the webserver. If i write: localhost:1587/WebSite4, the test is not running because the controller cant resolve the the server address. Can anybody help? thanks.

  23. Anonymous

    Ok, problem solved. If you want to test your asp.net application you need to add the project to virtual path in iis. Control panel -> administrative tools -> internet information services -> your PC -> default websites -> add new virtual directory. Here navigate to home directory of your project(where default.aspx is located). It is also very important to set access rights to this folder: in security tab add all users using computer. Click Add, and in the field write: YOUR_COMP_NAMEUsers. OK. Now you can test this url: http://localhost/alias/Default.aspx. //alias is a name for your app, that you typed in IIS.

  24. Anonymous

    Hi, Can I send a postdata with wcat and make the tested webserver to do something with them? e.g i want to post some textbox value and on button_click i want to write this value to database. The crucial is button click. How can make a webserver execute my button_click function. Is something like that possible? thanks.

  25. Anonymous

    I have problems running a very simple senario.
    After running, the wcat.wsf , it echoes the server name and clients number and just sits there. I had to kill it as it is not producing any log file.

    here is the command line –>
    C:Program Fileswcat>wcat.wsf -terminate -run -setclients -clients localhost -t samplesscriptsh
    ome.ubr -v 3 -s “http://www.yahoo.com” -o yahootest.xml -singleip -x
    Microsoft (R) Windows Script Host Version 5.7
    Copyright (C) Microsoft Corporation. All rights reserved.

    wcat.wsf – WCAT Utility Script
    Copyright (c) 1995-2007 Microsoft Corporation.

    message: Parsing parameters…
    parameter: terminate
    parameter: run
    parameter: setclients
    parameter: clients = localhost
    parameter: {wcctl.exe command line} = -t samplesscriptshome.ubr -v 3 -s http://www.yahoo.com -o
    yahootest.xml -singleip -x -clients 1
    message: updating Clients registry key…
    message: setting localhostHKLMSoftwareWCATClients = localhost
    message: Terminating all instances of wcclient…
    message: Terminating all local instances of wcctl.exe…
    message: Launching wcclient.exe on all clients…
    message: starting wcclient.exe on localhost with command line of localhostadmin$wcatwcclient.e
    xe RAVIKOLLI -b…
    message: executing ‘”C:Program Fileswcatwcctl.exe” -t samplesscriptshome.ubr -v 3 -s http://ww
    w.yahoo.com -o yahootest.xml -singleip -x -clients 1’…
    Initializing performance counters…
    ‘http://www.yahoo.comProcessor(_Total)% Processor Time’… Success!
    ‘http://www.yahoo.comProcessor(_Total)% User Time’… Success!
    ‘http://www.yahoo.comProcessor(_Total)% Privileged Time’… Success!
    ‘http://www.yahoo.comSystemContext Switches/sec’… Success!
    Performance counter initialization complete.

    Server: http://www.yahoo.com
    Clients: 1

    inside home.ubr, I am just calling only 1 transaction request for url=”/” . That’s all.

    Can u see any issues here in setup?



  26. Anonymous

    Ok I solved the problem. I needed to use the verb=GET; delete the line postdata=; and then create a query_string with postdata from mojedata.txt. So the result is: verb=GET; url = "http://localhost/testova/Default.aspx?__VIEWSTATE… tx2=sdgfg&TextBox1=&TextBox2=&drop1=&b2=Vloz&TextBox3=&TextBox4="; notice that beside normal form postdata(Textboxes, radiobuttons) there are also defaultly hidden viewstate and eventvalidation data. These are asp encrypted data which normally you cant see. All you need is to add before body element in your asp website and then run your application in browser, fill the form, click the submit button and in the url box in browser you will see the whole query_string. Just copy and paste and you are done. Just need to do that every time after you restart IIS.

  27. Anonymous

    I am trying to run the wcat, and I am getting parameter missing error…

    C:PROGRA~1wcat>wcat.wsf -terminate -run -clients {localhost} -t {home.ubr} -f
    {settings.ubr} -s {localhost} -singleip -x

    message: Parsing parameters…
    parameter: clients = localhost (default)
    error: must specify at least one of the following parameters -run, -update, -te
    rminate, -showclients or -setclients

    I can see that I am including both -run and -terminate… why am I getting this error? Any ideas?

  28. Anonymous

    My application is a cell phone sending data to a server. I’m trying to configure wcat to stress-test the server. My specific question is what I would put in the clientsfile – transaction – url parameter? There is no html page that data is posted to but rather an executable residing on the server that receives the data and writes it to a database. Can I use WCAT to stress-test the server? Thanks for any insight!

  29. Anonymous

    Hi Mike Volodarsky, I have a problem with how I can configure request element in scenario file to add input data to the end of ‘URL=page.aspx?’ to simulate input from page , for I did not use QueryString in my page.

    for example:
    In my Login Page, I have 2 textboxes(username textbox and password textbox) and 1 login button. Login is responsed by postback from login button pushed by user. So if both the username and password are corrected, the login can pass and go ahead to the other page. Or It can not and just stay at the login page. I get username and password not by querystring, just by like username = textbox1.text and password = textbox2.text.

    So, my question is How can I simulate this postback in the configration of the request element in scenario file.

    My name is Eskimo Zhao, in Tokyo, Japan. I’m looking forward to your answer, thank you for consideration.
    You can also contact me by email:[email protected]

  30. Anonymous

    Is it possible to emulate ASP.NET server side postback's with WCAT 6.3? Is there any documentation that specifically talks about this? It would seem that if this is the MS .NET and IIS team's testing tool, there must be a way to emulate runat=server, etc. Thanks!

  31. Anonymous

    Hi Mike Volodarsky!
    I have some problem like these:
    – problem when counter, counter on server (not localhost) always error and in file log have this line “An error occured collecting server information data. Check that WMI is available”
    – when i setup client by command:
    cscript wcat.wsf -update -clients “vn-21,vn-20”
    it not work although my account belong to admin group, so i setup file wcat to pc client too and run as normal, oh well it work. So i can not know it work properly

    – when i run test first time, info in file log.xml almost full, but in second time, info lost and number of request decrease so much.
    -sorry about my bad english –

  32. Mike Volodarsky


    Be sure you can access the performance counters on the remote machine using perfmon.exe – my bet is that you have an authentication or firewall issue when connecting to the performance counters remotely.

    Also make sure that your Remote Registry service is running on the server to collect performance counters.


  33. Anonymous

    thanx for the documentation download link………This was just the thing I was looking for, keep posting. Will be visiting back soon.

  34. Anonymous

    Hi Mike (and all others)
    I have the same problem as Vandong (Log.xml says “An error occured collecting server information data.” on all performance counters).

    The remote registry service is running on my server, so I guess it has something with the authentication, but I cant find anything in the manual and Ive google the heck out of this problem without results. I can’t add P-counters from my server using the Perfmon, but I can monitor counters using MyComputer > Manage->R-click on C Mgnt->”Connect to another computer”, so something must work..

    Could you Mike or anyone, elaborate a bit on that authentication thing. Im running from an admin account on my client, but that account is not visible from my server. Im not very good at these network/account-issues…

    Thanks in advance

  35. Anonymous

    Oups… sorry for polluting your blog, but I just needed to add: Windows (and Norton) firewalls were both shut down on both ends.

  36. Anonymous

    I am trying this tool for teh first time today, and getting “An unhandled win32 exception occured in wcctl.exe[4748].

    wcat.wsf -terminate -run -t home.ubr -f settings.ubr
    C:Program Fileswcat>wcat.wsf -termina
    Microsoft (R) Windows Script Host Versi
    Copyright (C) Microsoft Corporation. Al

    wcat.wsf – WCAT Utility Script
    Copyright (c) 1995-2007 Microsoft Corpo

    message: Parsing parameters…
    parameter: terminate
    parameter: run
    parameter: clients = localhost (defaul
    parameter: {wcctl.exe command line} =
    ngs.ubr -clients 1
    message: Terminating all instances of
    message: Terminating all local instanc
    message: Launching wcclient.exe on all
    message: starting wcclient.exe on loca
    min$wcatwcclient.exe WS10283 -b…

    Any help will be appreciated.

  37. Anonymous

    Hi Mike,
    Can we have GUI made for using this tool. Can this tool be made easy to use with simple User interface with record and playback feature.
    I saw a project in sourceforge WCAT.NET which tried to create a GUI for WCAT but the project is empty.

    Just a suggestion

  38. Anonymous

    when i run the command “C:Program Fileswcat>wcat.wsf -terminate -run -clients localhost -t client.ubr -f settings.ubr -x ” it creates a log file . but in client it shows unable to create log file after that it runs.. at the end of test in controller it shows
    Logging results…
    failed: 800706ba
    Test finished.
    message: wcat.wsf completed successfully…
    In Log file, program counters having errors and i am having 0 value for all … can anyone help me ?

  39. Anonymous


    When running:
    wcctl -c config.txt -d distribution.txt -s script -a localhost
    I get the following error:
    Invalid number of clients specified.

    Can you let me know what I need to correct?
    Thank you.

  40. Anonymous

    Hi Mike, I am trying to use the tool for the first time. In a very simple test, I get an error on line 1101 char 22 in script scar.wsf. The error is the handle is invalid. The error code is 80070006 and the source is null. Any help would be appreciated.

  41. Anonymous

    Hi Mike, I need to do a large post of Binary Data.
    The documentaion suggests an extension dll.

    My user function would need to return a byte array, but the WCAT user function only allows PCHAR*.

    Do you know how I can do this in WCAT?

  42. Anonymous


    I was following your steps, but end with Invalid number of clients specified.

    Basically my local machine will be acted as client as well as web server (I got IIS 7.0 since i am using 64 bits windows 7 enterprise), and my databsase is on another machine.

    But when I try to run this command: wcctl -c config.txt -d distribution.txt -s script.txt -a localhost, it throws this error: invalid number of clients specified. Is there anything wrong with the tutorial or i am missing sth in here.

    this is my current environment configuratioin:

    I am using 64 bit windows 7, hence the installation directory will be C:Program Files (x86)wcat rather than C:Program Fileswcat, i am not sure whether this makes difference.

    Here are my questions:

    1. where shall i save these 3 files, currently i am saving these configuration.txt, script.txt and distribution.txt files in the wcat installation directory, (C:Program Files (x86)wcat)

    2. Can the controller and clients on the same machine? coz at this time being, both my controller (web server I assume) and client are on the same machine (64 bits windows 7 and iis7)

  43. Anonymous


    I have installed WCAT 6.3 to stress test IIS 6 on Windows Server 2003 r2. I am facing a weird issue where after sending some HTTP request WCAT stop sending anymore requests and shows 0 in all the fields. What can be the issue? Has anyone encountered this kind of issue?


  44. Daniel Varkonyi

    Hello Mike!

    I found this tool, for testing a service. When i run controller and client manually i got the following error:

    C:Program Fileswcat>wcclient.exe
    Controller: localhost
    Wait for controller: false
    IPv6: false
    Bind Addresses: not specified
    615: GetLastError was 0
    File: sdktoolswcatcommoncontroller.c
    Line: 424
    Error during network operation: bytes wrong

    Do you have any hint what can be wrong?

    Thanks for any help!

  45. George Serban

    Hello Daniel,

    I have the same behavior and error on a client:

    Error during network operation: bytes wrong

    It works like a charm on another clients.

    I know it is an old post but maybe you have found any solution and could give some indications?

    Any suggestion is welcome. Thank you!

Leave a Reply

Your email address will not be published. Required fields are marked *