Stress and Load testing on Windows - Using WCAT 6.3 Introduction

Dec 17, 2009 at 4:57 PM

Stress and Load testing on Windows - Using WCAT 6.3

Stress and Load testing on Windows used to be done using a great little utility code named "Homer" - Web Application Stress Tool.  It gave you a nice GUI which let you easily build macros to stress test your web application.  This utility is no longer available and it has subsequently been replaced with a utility called WCAT - Web Capacity Analysis Tool. I'm sure this tool is much more powerful than it's predecessor, but it requires more manual scripting to get the same results.  The current version of WCAT for IIS 5/6/7 is 6.3 and is available for download here:
http://www.iis.net/downloads/default.aspx?tabid=34

Inital setup and test

  1. Download the file
  2. Run the installation package
  3. Read the introduction to WCAT included in the installation   

C:\Program Files\wcat\doc\wcat.doc

  1. Once you have reviewed the basics you will need to install it on your client machines. (client=machines that will actually issue the commands to the server simulating your web clients).
    1. open a command prompt (as administrator if on vista)
    2. cd c:\program files\wcat\
    3. cscript //H:Cscript
    4. wcat.wsf -terminate -update -clients localhost
    5. machine will reboot
  2. to run the software you will first need to edit the client(scenario.ubr) and settings.ubr files to match what you want to test. A simple HTTP get request for the scenario should suffice
  3. Save these two files to your WCAT directory
  4. Run your test with something like the following
  5. wcat.wsf -clients yourclientmachineip -run -t scenario.ubr -f settings.ubr -s yourserverip  -p yourserverport
  6. To view the results open log.xml

scenario.ubr - sample attached

scenario
{
    name    = "Demo";

    warmup      = 5;
    duration    = 10;
    cooldown    = 5;

    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;
    }

    transaction
    {
        id = "simple scenario";
        weight = 1;

        request
        {
            url         = "/";
        secure      = true;
        statuscode  = 200;
        }


        close
        {
            method      = reset;
        }
    }
}

settings.ubr - sample attached

settings
{   
    server         = "yourserveripaddresshere";
    clients        = 2;
    virtualclients = 5;


    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
    {
        path = "System\\CurrentControlSet\\Control\\FileSystem";
        name = "NtfsDisableLastAccessUpdate";
        type = REG_DWORD;
    }

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

More complicated scenarios and tests

Since building more complex scripts can be a pain and time consuming.  I recommend downloading the following two pieces of software that will help automate the building of the scenario scripts.

Downloads:
1. Fiddler 2.0
http://www.fiddler2.com/Fiddler2/version.asp

2. WCAT Scenario Creator
http://fiddler2wcat.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=35356
You need to download WCATScenarioGenerator.dll

Installation:
1. Install Fiddler2
2. Save WCATScenarioGenerator.dll to the Fiddler2 scripts folder

Use:

  1. Open fiddler and click the launch IE button from within Fiddler2
  2. It will start recording a list of sessions along the left side
  3. After you've got a sequence on the left you want to save to a scenario for WCAT do the following:
  4. In fiddler 2 in the bottom left you should see a black rectangle.  This is where you can type commands for the WCAT extension
    1. Type wcat reset then carriage return
    2. type wcat addtrans then carriage return
    3. type wcat save
  5. you will now have a file called fiddler.wcat in your fiddler2 install folder
  6. open fiddler.wcat and save it to your c:\program files\wcat\ as newscenarioname.ubr
  7. run wcat and execute your new scenario file
    wcat.wsf -clients yourclientmachineip -run -t newscenarioname.ubr -f settings.ubr -s yourserverip  -p yourserverport

 

Richard Fremmerlid - MCPD (Enterprise)
http://jlptdictionary.com

Apr 26, 2011 at 9:48 AM
Edited Apr 26, 2011 at 9:48 AM

First of all thanks for this excellent plugin, it is a real timesaver!

When following this scenario and entering "wcat save" I got the message "Requested ExecAction: wcat not found."
It was apparently caused by permission settings on the install directory.
You can specify another dir to which you have write permissions, e.g.

wcat save C:\temp\fiddler.wcat

HTH,

Mark van 't Zet