tag:blogger.com,1999:blog-61735169206488220772024-03-12T19:30:25.410-07:00Automation blogAnonymoushttp://www.blogger.com/profile/18260954945115676908noreply@blogger.comBlogger4125tag:blogger.com,1999:blog-6173516920648822077.post-27073244095819925352009-10-14T22:09:00.000-07:002009-10-14T23:32:29.636-07:00Ginder - Load testing tool<blockquote></blockquote><span style="font-size:85%;color:#003366;"><b>1. Introduction </b></span><h1 class="western" style="margin-left: 0.3in; text-indent: -0.18in; margin-top: 0.08in; page-break-before: always; font-family: arial;" lang="en-US"> </h1> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-weight: bold; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;">The Grinder is a JavaTM load-testing framework. It is freely available under a BSD-style open-source license.</span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The Grinder 3 uses the powerful scripting language Jython, and allows any Java code to be tested without the need to write a plug-in. The Grinder 3 allows any Java (or Jython) code to be encapsulated as a test. This practically removes the need to write custom plug-ins.</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Basically, Grinder is a tool used for load testing which supports the recording mode. </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The Grinder includes the software Jython (a Java Python implementation) for scripting, created by Jim Hugunin, Barry Warsaw and the Jython team. JPython was created in late 1997 by Jim Hugunin.</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The most significant change that The Grinder 3 introduces is a Jython scripting engine that is used to execute test scripts. Jython is a Java implementation of the popular Python language. Test scripts specify the tests to run.</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The Grinder works on any hardware platform and any operating system that supports J2SE 1.3 and above. It can simulate web browsers and other devices that use HTTP, and HTTPS. </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The Grinder is a framework for running test scripts across a number of machines. It is used for generating load by simulating client requests to your application, and for measuring how an application copes with that load. </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">This document is prepared keeping in mind the users who are new to The Grinder.</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The Grinder installation and starting of the Grinder is first discussed and then the features, various controls that Grinder uses to work and their responsibilities, and the importance of each entity within the Grinder controls are then discussed in detail.</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">It would not be appropriate starting with explaining the functioning of the Grinder without discussing the features and the method of recording and executing a script recorded for a web application. </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Here we have included an example to record the script and thereby execute it for a web application. We have used one performance plan to record the scenarios.</span></span></p> <h1 class="western" style="margin-left: 0.3in; text-indent: -0.18in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#003366;"><b>2. Grinder Installation: </b></span> </h1> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">The latest version of Grinder can be downloaded from </span></span></span><span style="font-size:85%;color:#0000ff;"><u><a href="http://grinder.sourceforge.net/"><span lang="en-US"><span style="font-size: 13pt;">http://grinder.sourceforge.net/</span></span></a></u></span><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"> (We have used Grinder 3.0 Beta) </span></span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The Grinder 3 is distributed as two zip files. Everything required to run The Grinder is in the zip file labeled grinder-3.0-version.zip. The remaining files that are needed to build The Grinder are distributed in the zip file labeled grinder-3.0-version-src.zip; these are mainly of interest to developers wanting to extend The Grinder.</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Download the grinder zip file and unzip it on the local hard drive. </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;"><b>Prerequisites:</b></span></span></p> <p style="margin-left: 0.5in; margin-bottom: 0in; font-family: arial;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Java – J2SE 1.4.1 or latest version should be installed.</span></span></p> <h1 class="western" style="margin-left: 0.3in; text-indent: -0.18in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#003366;"><b>3. Starting the Grinder:</b></span></h1> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">There are two ways to start the Grinder on windows platform:</span></span></p> <h2 class="western" style="margin-left: 0.5in; font-family: arial;" lang="en-US"><span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b>3.1 Using Command Prompt: </b></i></span></span> </h2> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">In order to start Grinder explicitly from the command prompt, we need to set the path for two components. They are </span></span> </p> <p style="margin-left: 1in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">a) The grinder. jar </span></span> </p> <p style="margin-left: 1in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">b) Java home </span></span> </p> <p style="text-indent: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">To set a CLASSPATH & Java path we can go about it this way</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">Control Panel System Advanced Environment Variables Create a new variable in the System variables section.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Variable = CLASSPATH</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Value = Complete path to the grinder directory\lib\grinder.jar</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Ex- C:\Grinder\engine\grinder-3.0-beta30\lib\grinder.jar</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Variable = JAVA_HOME</span></span></p> <p style="text-indent: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Value = full path to java installed directory</span></span></p> <p style="text-indent: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Ex- E:\Program Files\Java\jre1.5.0_07\bin</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Once the variables are set, use the following commands at the command prompt</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>a) Java net.grinder.Console</b> : This command starts the Console</span></span></span></p> <p style="text-indent: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Ex- c:\test\> java net.grinder.Console </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>b) Java net.grinder.Grinder</b> : This command starts the agent process</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Ex- c:\test\> java net.grinder.Grinder</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The command (b) should be used on all the machines that will run the agent process.</span></span></p> <h2 style="font-family: arial;" class="western" lang="en-US"><span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b> 3.2 Using command files: </b></i></span></span> </h2> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Create following command files in the directory where grinder is installed</span></span></p> <p style="margin-left: 0.5in; text-indent: 0.25in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;"><b>1. setGrinderEnv.cmd:</b></span></span></p> <p style="margin-left: 0.75in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">set GRINDERPATH=(full path to grinder install directory)</span></span></p> <p style="margin-left: 0.75in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">set GRINDERPROPERTIES=(full path to grinder.properties)\ grinder.properties</span></span></p> <p style="margin-left: 0.75in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">set CLASSPATH=%GRINDERPATH%\lib\grinder.jar;%CLASSPATH%</span></span></p> <p style="margin-left: 0.75in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">set JAVA_HOME=(full path to java install directory)</span></span></p> <p style="margin-left: 0.75in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">PATH=%JAVA_HOME%\bin;%PATH%</span></span></p> <p style="margin-left: 0.75in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;"><b>2. startAgent.cmd:</b></span></span></p> <p style="margin-left: 0.25in; text-indent: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">call (path to setGrinderEnv.cmd)\setGrinderEnv.cmd</span></span></p> <p style="margin-left: 0.25in; text-indent: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">echo %CLASSPATH%</span></span></p> <p style="margin-left: 0.25in; text-indent: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">java -cp %CLASSPATH% net.grinder.Grinder %GRINDERPROPERTIES%</span></span></p> <p style="margin-left: 0.75in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;"><b>3. startConsole.cmd:</b></span></span></p> <p style="margin-left: 0.25in; text-indent: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">call (path to setGrinderEnv.cmd)\setGrinderEnv.cmd</span></span></p> <p style="margin-left: 0.25in; text-indent: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">java -cp %CLASSPATH% net.grinder.Console</span></span></p> <h1 class="western" style="margin-left: 0.3in; text-indent: -0.18in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#003366;"><b>4. The Grinder Features:</b></span></h1> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>The Grinder</b> is an easy-to-use Java-based load generation and performance measurement tool that adapts to a wide range of J2EE applications. It has BSD-style licensed and open sourced. </span></span></span> </p> <h2 class="western" style="margin-left: 0.5in; font-family: arial;" lang="en-US"><span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b>4.1 Capabilities of the Grinder</b></i></span></span></h2> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Load Testing:</b> Load Testing determines if an application can support a specified load (for example, 500 concurrent users) with specified response times. Load Testing is used to create benchmarks.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Capacity Testing:</b> Capacity Testing determines the maximum load that an application can sustain before system failure.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Functional Testing:</b> Functional Testing proves the correct behavior of an application.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Stress Testing:</b> Stress Testing is load testing over an extended period of time. Stress Testing determines if an application can meet specified goals for stability and reliability, under a specified load, for a specified time period.</span></span></span></p> <h2 class="western" style="margin-left: 0.5in; text-indent: -0.5in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b> 4.2 Standards</b></i></span></span></h2> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>100% Pure Java</b>: The Grinder works on any hardware platform and any operating system that supports J2SE 1.3 and above.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Web Browsers:</b> The Grinder can simulate web browsers and other devices that use HTTP, and HTTPS.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Web services:</b> The Grinder can be used to test Web Service interfaces using protocols such as SOAP and XML-RPC.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Database:</b> The Grinder can be used to test databases using JDBC.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Middleware:</b> The Grinder can be used to test RPC and MOM based systems using protocols such as IIOP, RMI/IIOP, RMI/JRMP, and JMS.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Other Internet protocols</b>: The Grinder can be used to test systems that utilise other protocols such as POP3, SMTP, FTP, and LDAP.</span></span></span></p> <h2 class="western" style="margin-left: 0.5in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b>4.3 The Grinder Architecture</b></i></span></span></h2> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Goal:</b> Minimize system resource requirements while maximizing the number of test contexts ("virtual users").</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Multi-threaded, multi-process:</b> Each test context runs in its own thread. The threads can be split over many processes depending on the requirements of the test and the capabilities of the load injection machine.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Distributed:</b> The Grinder makes it easy to coordinate and monitor the activity of processes across a network of many load injection machines from a central console.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Scalable:</b> The Grinder typically can support several hundred HTTP test contexts per load injection machine. (The number varies depending on the type of test client). More load injection machines can be added to generate bigger loads.</span></span></span></p> <h2 class="western" style="margin-left: 0.5in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b>4.4 Console</b></i></span></span></h2> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The Console is the heart of the Grinder. This is an engine which controls the test runs and give the test results. </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The co-ordination of the processes is taken place here on the console engine. The worker processes can be started, stopped or for that reason even reset from one central console. Also the console displays the current worker processes and their status if they are connected. </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The Grinder console provides an easy way to control multiple test-client machines, display test results, and control test runs The process monitoring becomes easy with the display of current worker processes and threads along with the results by the console. </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Graphical Interface:</b> 100% Java Swing user interface. Process coordination Worker processes can be started, stopped and reset from one central console.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Process coordination:</b> Worker processes can be started, stopped and reset from one central console.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Process monitoring:</b> Dynamic display of current worker processes and threads.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Script editing: Central editing and management of test scripts.(Future)</span></span></p> <p style="margin-bottom: 0in; page-break-before: always; font-family: arial;" align="center"> <span style="font-size:85%;"><b><span lang="en-US"><span style="color:#000000;">Figure a</span></span></b></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> </p> <p style="margin-bottom: 0in; font-family: arial;" align="right" lang="en-US"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_q73Dwx3o4GI/Sta4PVG1-7I/AAAAAAAACLE/Jo39ZPVDNHg/s1600-h/fig-a.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_q73Dwx3o4GI/Sta4PVG1-7I/AAAAAAAACLE/Jo39ZPVDNHg/s320/fig-a.PNG" alt="" id="BLOGGER_PHOTO_ID_5392700177326144434" border="0" /></a></p> <h2 class="western" style="margin-left: 0.5in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b>4.5 Statistics, Reports, Charts</b></i></span></span></h2> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Test monitoring:</b> Pre-defined charts for response time, test throughput. Display the number of invocations, test result (pass/fail), average, minimum and maximum values for response time and tests per second for each test.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Data collation:</b> Collates data from worker processes. Data can be saved for import into a spreadsheet or other analysis tool.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Instrument anything:</b> The Grinder records statistics about the number of times each test has been called and the response times achieved. Any part of the test script can be marked as a test.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Statistics engine:</b> Scripts can declare their own statistics and report against them. The values will appear in the console and the data logs. Composite statistics can be specified as expressions involving other statistics.</span></span></span></p> <h2 class="western" style="margin-left: 0.5in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b>4.6 Script</b></i></span></span></h2> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Record real users:</b> Scripts can be created by recording actions of a real user using the TCP Proxy. The script can then be customized by hand.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Powerful scripting in Python:</b> Simple to use but powerful, fully object-oriented scripting.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Multiple scenarios:</b> Arbitrary looping and branching allows the simulation of multiple scenarios. Simple scenarios can be composed into more complex scenarios. For example, you might allocate 10% of test contexts to a login scenario, 70% to searching, 10% to browsing, and 10% to buying; or you might have different workloads for specific times of a day.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Access to any Java API:</b> Jython allows any Java-based API to be used directly from the test script.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Parameterization of input data:</b> Input data (e.g. URL parameters, form fields) can be dynamically generated. The source of the data can be anything including flat files, random generation, a database, or previously captured output.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Content Verification:</b> Scripts have full access to test results. In the future, The Grinder will include support for enhanced parsing of common results such as HTML pages.</span></span></span></p> <h2 class="western" style="margin-left: 0.5in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b>4.7 The Grinder Plug-ins</b></i></span></span></h2> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>HTTP:</b> The Grinder has special support for HTTP that automatically handles cookie and connection management for test contexts.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Custom:</b> Users can write their own plug-ins to a documented interface; although this is rarely necessary due to the powerful scripting facilities.</span></span></span></p> <h2 class="western" style="margin-left: 0.5in; font-family: arial;" lang="en-US"><span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b>4.8 HTTP Plug-in</b></i></span></span></h2> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>HTTP 1.0, HTTP 1.1</b>: Support for both HTTP 1.0 and HTTP 1.1 is provided.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>HTTPS:</b> The Grinder supports HTTP over SSL.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Cookies:</b> Full support for Cookies is provided.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Multi-part forms:</b> The Grinder supports multi-part forms.</span></span></span></p> <h2 class="western" style="margin-left: 0.5in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b>4.9 TCP Proxy</b></i></span></span></h2> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>TCP proxy:</b> A TCP proxy utility is supplied that can be used to intercept system interaction at the protocol level. It is useful for recording scripts and as a debugging tool.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>HTTP Proxy:</b> The TCP proxy can be configured as an HTTP/HTTPS proxy for easy integration with web browsers.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>SSL Support:</b> The TCP proxy can simulate SSL sessions.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Filter-based architecture:</b> The TCP proxy has pluggable filter architecture. Users can write their own filters.</span></span></span></p> <h1 class="western" style="margin-left: 0.3in; text-indent: -0.18in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#003366;"><b>5. The Grinder process</b></span></h1> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The Grinder is a framework for running test scripts across a number of machines. The framework is comprised of three types of process (or program). Worker processes, agent processes, and the console. The responsibilities of each of the process types are:</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Worker processes</b> Interpret Jython test scripts and performs tests using a number of worker threads.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Agent processes</b> A single agent process runs on each test-client machine and is responsible for managing the worker processes on that machine.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><b>Console</b> Coordinates the other processes and collates statistics.</span></span></span></p> <p style="margin-left: 1in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span style="font-size:85%;color:#000000;"> <span lang="en-US"><span style="font-size: 13pt;">Collates and displays statistics</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The Grinder allows co-ordination and monitoring of the activity of the processes across a network of many load injection machines from a central console. As The Grinder is written in Java, each of these processes is a Java Virtual Machine (JVM) and can be run on any computer with a suitable version of Java installed. </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">For heavy duty testing, you start an agent process on each of several client machines. The worker processes they launch can be controlled and monitored using the console. There is little reason to run more than one agent on a single machine, but if you can if you wish.</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The Grinder typically can support several hundred HTTP test contexts per load injection machine. More load injection machines can be added to generate bigger loads. </span></span> </p> <h1 class="western" style="margin-left: 0.3in; text-indent: -0.18in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#003366;"><b>6. The Process Controls:</b></span></h1> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Worker processes that are configured to receive console signals go through three states:</span></span></p> <ul style="font-family: arial;"><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Initiated (waiting for a console signal)</span></span></p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Running (performing tests, reporting to console)</span></span></p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Finished (waiting for a console signal)</span></span></p> </li></ul> <h1 class="western" style="margin-left: 0.3in; text-indent: -0.18in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#003366;"><b>7. Console’s Display: </b></span> </h1> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The tabs available on the Console are</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">1. Graphs 2. Results</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">3. Processes 4. Script</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">These tabs on the Console display information about The Grinder and its tests</span></span></p> <h2 class="western" style="margin-left: 0.5in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b>7.1 Graphs: </b></i></span></span> </h2> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Each graph displays the 7 most recent Tests Per Second (TPS) values for a particular test.</span></span></p> <p style="margin-bottom: 0in; font-family: arial;" align="center"><span style="font-size:85%;"><b><span lang="en-US"><span style="color:#000000;">Figure b</span></span></b></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> </p> <p style="margin-bottom: 0in; font-family: arial;" align="center" lang="en-US"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_q73Dwx3o4GI/Sta4rbz4K9I/AAAAAAAACLM/QgSg4ALEUGY/s1600-h/fig-b.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_q73Dwx3o4GI/Sta4rbz4K9I/AAAAAAAACLM/QgSg4ALEUGY/s320/fig-b.PNG" alt="" id="BLOGGER_PHOTO_ID_5392700660161981394" border="0" /></a></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The colors of the graphs are based on the relative response time. </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Long response times are more red, short response times are more yellow. </span></span> </p> <h2 class="western" style="margin-left: 0.5in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b>7.2 Results: </b></i></span></span> </h2> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">This tab shows the results from The Grinder instrumentation.</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">There are a number of instruments which are defined and each of these instrumented results is displayed. </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Ex: Test, Mean Time, Successful Tests, Errors, TPS, Peak TPS </span></span> </p> <p style="margin-bottom: 0in; page-break-before: always; font-family: arial;" align="center" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Figure-C</b></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> </p> <p style="margin-bottom: 0in; font-family: arial;" align="right" lang="en-US"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_q73Dwx3o4GI/Sta5FqxdzWI/AAAAAAAACLU/d2sCsltFdn8/s1600-h/afig-c.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_q73Dwx3o4GI/Sta5FqxdzWI/AAAAAAAACLU/d2sCsltFdn8/s320/afig-c.PNG" alt="" id="BLOGGER_PHOTO_ID_5392701110854995298" border="0" /></a></p> <h2 class="western" style="margin-left: 0.5in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b>7.3 Processes: </b></i></span></span> </h2> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">This tab gives the information about the Agents, their worker processes and associated threads.</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The listed headers under this tab are </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="center" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">1. Process 2. Type 3. State</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; page-break-before: always; font-family: arial;" align="center"> <span style="font-size:85%;"><b><span lang="en-US"><span style="color:#000000;">Figure c</span></span></b></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> </p> <p style="margin-bottom: 0in; font-family: arial;" align="right" lang="en-US"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_q73Dwx3o4GI/Sta6HYiqVEI/AAAAAAAACLk/r9VqQi-o1_M/s1600-h/fig-c.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_q73Dwx3o4GI/Sta6HYiqVEI/AAAAAAAACLk/r9VqQi-o1_M/s320/fig-c.PNG" alt="" id="BLOGGER_PHOTO_ID_5392702239832429634" border="0" /></a></p> <h2 class="western" style="margin-left: 0.5in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b>7.4 Scripts:</b></i></span></span></h2> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">This tab contains the beginnings of console support for script editing and also controls for the script distribution system.</span></span></p> <ul style="font-family: arial;"><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;"><b>Set the root directory for script distribution</b></span></span></p> </li></ul> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The directory on the console host that contains the scripts for distribution</span></span></p> <ul style="font-family: arial;"><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;"><b>Set the script to run</b></span></span></p> </li></ul> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">This selects the script from those in the distributed list that is to be run</span></span></p> <ul style="font-family: arial;"><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;"><b>Send changed files to worker processes</b></span></span></p> </li></ul> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">This pushes out the contents of the root directory to all connected worker processes</span></span></p> <p style="margin-bottom: 0in; page-break-before: always; font-family: arial;" align="center"> <span style="font-size:85%;"><b><span lang="en-US"><span style="color:#000000;">Figure d</span></span></b></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> </p> <p style="margin-bottom: 0in; font-family: arial;" align="right" lang="en-US"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_q73Dwx3o4GI/Sta6V_lbRsI/AAAAAAAACLs/vIdGLhSCtTs/s1600-h/fig-d.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_q73Dwx3o4GI/Sta6V_lbRsI/AAAAAAAACLs/vIdGLhSCtTs/s320/fig-d.PNG" alt="" id="BLOGGER_PHOTO_ID_5392702490831177410" border="0" /></a></p> <h1 class="western" style="margin-left: 0.3in; text-indent: -0.18in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#003366;"><b>8. Creation of- grinder. properties file:</b></span></h1> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">This file resides on all the machines that run an agent process</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Each test context runs in its own thread. The threads can be split over many processes depending on the requirements of the test and the capabilities of the load injection machine. </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">(The number varies depending on the type of test client).</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">This is a configuration file that is read by the agent and worker processes, and the plug-in and is very important in the Grinder working </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">This file contains all the information necessary to run a particular set of tests, such as the number of worker processes, the number of worker threads, and the plug-in to use </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">For most plug-ins, the file also specifies the tests to run and can be thought of as the "test script." For example, when using the HTTP plug-in, the grinder.properties file contains the URL for each test. </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The agent process and the worker processes read their configuration from grinder.properties when they are started.</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;"><b>Each context simulates an active user session. The number of contexts is given by the following formula:</b></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="center" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;"><u><b>(Number of agent processes) x (Number of worker processes)<br />x (Number of worker threads)</b></u></span></span></p> <p style="margin-bottom: 0in; font-family: arial;" align="center"><span style="font-size:85%;"><b><span lang="en-US"><span style="color:#000000;">Figure e</span></span></b></span></p> <p style="margin-bottom: 0in; font-family: arial;" lang="en-US"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_q73Dwx3o4GI/Sta6mivR7jI/AAAAAAAACL0/xw4f60BXRCc/s1600-h/fig-e.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 134px;" src="http://4.bp.blogspot.com/_q73Dwx3o4GI/Sta6mivR7jI/AAAAAAAACL0/xw4f60BXRCc/s320/fig-e.PNG" alt="" id="BLOGGER_PHOTO_ID_5392702775145655858" border="0" /></a></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">The Grinder worker and agent processes are controlled by setting properties in the grinder.properties file.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Starting The Grinder agent process without a grinder.properties file will lead to using the default addresses, use one worker process, one thread, and make one run through the test script found in the file grinder.py</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Overall, this file consists of all the properties which are understood by ‘The Grinder’ engine.</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Below mentioned are some of the properties with their description and default values listed.</span></span></p> <p style="margin-bottom: 0in; page-break-before: always; font-family: arial;" align="center"> <span style="font-size:85%;"><b><span lang="en-US"><span style="color:#000000;">Table 1- Grinder Properties</span></span></b></span></p> <p style="margin-bottom: 0in; font-family: arial;" lang="en-US"><span style="font-size:85%;"><br /></span></p> <dl style="font-family: arial;"><dd> <table border="1" border cellpadding="8" cellspacing="0" width="627" style="color:#000000;"> <col width="259"> <col width="250"> <col width="68"> <tbody><tr valign="bottom"> <td height="4" width="259"> <p style="margin-top: 0.08in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;"><b>Property</b></span></span></p> </td> <td width="250"> <p style="margin-top: 0.08in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;"><b>Description</b></span></span></p> </td> <td width="68"> <p style="margin-top: 0.08in;" align="justify" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;"><b>Default </b></span></span> </p> </td> </tr> <tr valign="bottom"> <td height="29" width="259"> <p style="margin-top: 0.08in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">grinder.processes</span></span></p> </td> <td width="250"> <p style="margin-top: 0.08in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The number of worker processes the agent should start</span></span></p> </td> <td width="68"> <p style="margin-top: 0.08in;" align="center" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">1</span></span></p> </td> </tr> <tr valign="bottom"> <td height="5" width="259"> <p style="margin-top: 0.08in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">grinder.threads </span></span> </p> </td> <td width="250"> <p style="margin-top: 0.08in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The number of worker processes that each worker process spawns</span></span></p> </td> <td width="68"> <p style="margin-top: 0.08in;" align="center" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">1</span></span></p> </td> </tr> <tr valign="bottom"> <td height="5" width="259"> <p style="margin-top: 0.08in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">grinder.runs</span></span></p> </td> <td width="250"> <p style="margin-top: 0.08in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The number of runs of the test script each thread performs</span></span></p> </td> <td width="68"> <p style="margin-top: 0.08in;" align="center" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">1</span></span></p> </td> </tr> <tr valign="bottom"> <td height="5" width="259"> <p style="margin-top: 0.08in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">grinder.receiveConsoleSignal</span></span></p> </td> <td width="250"> <p style="margin-top: 0.08in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Set to true to respond to console signals. </span></span> </p> </td> <td width="68"> <p style="margin-top: 0.08in;" align="center" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">TRUE</span></span></p> </td> </tr> <tr valign="bottom"> <td height="36" width="259"> <p style="margin-top: 0.08in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">grinder.consoleAddress</span></span></p> </td> <td width="250"> <p style="margin-top: 0.08in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The IP address or hostname to use for communication from the Grinder processes to the console. Default is all the network interfaces of the local machine.</span></span></p> </td> <td width="68"> <p style="margin-top: 0.08in;" align="center" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">TRUE</span></span></p> </td> </tr> <tr valign="bottom"> <td height="19" width="259"> <p style="margin-top: 0.08in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">grinder.consolePort</span></span></p> </td> <td width="250"> <p style="margin-top: 0.08in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The IP port to use for communication from the Grinder processes to the console. </span></span> </p> </td> <td width="68"> <p style="margin-top: 0.08in;" align="center" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">6372</span></span></p> </td> </tr> <tr valign="bottom"> <td height="5" width="259"> <p style="margin-top: 0.08in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">grinder.plugin</span></span></p> </td> <td width="250"> <p style="margin-top: 0.08in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The plugin class to use. Currently each script uses a single plugin. </span></span> </p> </td> <td width="68"> <p style="margin-top: 0.08in;" align="center" lang="en-US"><span style="font-size:85%;"><br /></span> </p> </td> </tr> <tr valign="bottom"> <td height="5" width="259"> <p style="margin-top: 0.08in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">grinder.logDirectory</span></span></p> </td> <td width="250"> <p style="margin-top: 0.08in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Directory to write log files to. Created if it doesn't already exist</span></span></p> </td> <td width="68"> <p style="margin-top: 0.08in; margin-bottom: 0in;" align="center" lang="en-US"> <span style="font-size:85%;"><br /></span> </p> <p style="margin-top: 0.08in;" align="center" lang="en-US"><span style="font-size:85%;"><br /></span> </p> </td> </tr> <tr valign="bottom"> <td height="5" width="259"> <p style="margin-top: 0.08in;"><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">grinder.hostID</span></span></span></p> </td> <td width="250"> <p style="margin-top: 0.08in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Override the "host" string used in log filenames and logs.</span></span></p> </td> <td width="68"> <p style="margin-top: 0.08in;" align="center" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The host name</span></span></p> </td> </tr> <tr valign="bottom"> <td height="5" width="259"> <p style="margin-top: 0.08in;"><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">grinder.processIncrement</span></span></span></p> </td> <td width="250"> <p style="margin-top: 0.08in;"><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">If set, the agent will </span></span></span><span style="font-size:85%;"><em><span lang="en-US"><span style="font-size: 13pt;"><span style="color:#000000;">ramp up</span></span></span></em></span><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"> the number of worker processes, starting the number specified every </span></span></span><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">grinder.processesIncrementInterval</span></span></span><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"> milliseconds.</span></span></span></p> </td> <td width="68"> <p style="margin-top: 0.08in;" align="center" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Start all worker processes together</span></span></p> </td> </tr> <tr> <td height="5" width="259"> <p><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">grinder.processIncrementInterval</span></span></span><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"> </span></span></span> </p> </td> <td valign="bottom" width="250"> <p style="margin-top: 0.08in;"><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">Used in conjunction with </span></span></span><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">grinder.processIncrement</span></span></span><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">, this property sets the interval in milliseconds at which the agent starts new worker processes.</span></span></span></p> </td> <td valign="bottom" width="68"> <p style="margin-top: 0.08in;" align="center" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">60000 ms</span></span></p> </td> </tr> <tr valign="bottom"> <td height="5" width="259"> <p style="margin-top: 0.08in;"><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">grinder.initialProcesses</span></span></span></p> </td> <td width="250"> <p style="margin-top: 0.08in;"><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">Used in conjunction with </span></span></span><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">grinder.processIncrement</span></span></span><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">, this property sets the initial number of worker processes to start.</span></span></span></p> </td> <td width="68"> <p style="margin-top: 0.08in; margin-bottom: 0in;" align="center" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The value of the grinder.</span></span></p> <p style="margin-top: 0.08in; margin-bottom: 0in;" align="center" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Process</span></span></p> <p style="margin-top: 0.08in; margin-bottom: 0in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">increment</span></span></p> <p style="margin-top: 0.08in;" align="center" lang="en-US"><span style="font-size:85%;"><br /></span> </p> </td> </tr> <tr valign="bottom"> <td height="4" width="259"> <p style="margin-top: 0.08in;"><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">grinder.duration</span></span></span></p> </td> <td width="250"> <p style="margin-top: 0.08in;"><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">The maximum length of time in milliseconds that each worker process should run for. </span></span></span><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">grinder.duration</span></span></span><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"> can be specified in conjunction with </span></span></span><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">grinder.runs</span></span></span><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">, in which case the worker processes will terminate if either the duration time or the number of runs is exceeded.</span></span></span></p> </td> <td width="68"> <p style="margin-top: 0.08in;" align="center" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Run forever.</span></span></p> </td> </tr> </tbody></table> </dd></dl> <h1 class="western" style="margin-left: 0.3in; text-indent: -0.18in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#003366;"><b>9. HTTPPlugin:</b></span></h1> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The HTTPPlugin is a mature plug-in for testing HTTP services. </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">It has a number of utilities useful for HTTP scripts as well as a tool, TCPProxy.</span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">It's quite feasible to have HTTP plug-in grinder.properties test scripts containing hundreds or thousands of individual tests. </span></span> </p> <h1 class="western" style="margin-left: 0.3in; text-indent: -0.18in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#003366;"><b>10. TCPProxy: </b></span> </h1> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The Grinder 3.0 is shipped with a tool, the TCPProxy that can automatically capture test-script entries corresponding to the HTTP requests a user makes using a browser, and generate corresponding test-script entries. </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The TCP Proxy is configured to sit between the user's browser and the target server and capture all the requests the browser makes before proxying the requests on to the server. </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">You can start the TCP Proxy in a special mode in which it outputs a recording of the requests you make with the browser as a full grinder.properties test script. You can then take this test script and replay it using The Grinder. </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">It is useful for recording scripts and as a debugging tool. </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The TCP proxy can be configured as an HTTP/HTTPS proxy for easy integration with web browsers. </span></span> </p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The TCP proxy can simulate SSL sessions. </span></span> </p> <h1 class="western" style="margin-left: 0.3in; text-indent: -0.18in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#003366;"><b>11. Recording a Script for a Web Application:</b></span></h1> <p style="text-indent: 0.5in; margin-bottom: 0in; font-family: arial;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 16pt;"><b>Pre-conditions: </b></span></span> </p> <h2 class="western" style="margin-left: 0.5in; font-family: arial;" lang="en-US"><span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b>11.1 Proxy Settings: </b></i></span></span> </h2> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">(E.g. According to performance plan for trakstar we have recorded all the transactions mentioned into one activity as a single script. Thus we have recorded all the four activities for one scenario. For this process we have used following methods.) </span></span> </p> <ul style="font-family: arial;"><li><p style="margin-top: 0.08in; margin-bottom: 0in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">First, set up IE temporarily to use a proxy server.</span></span></p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Menu -> Tools -> Internet Options -> Connections tab</span></span></p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Click on LAN Settings button</span></span></p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Check the use of proxy server for your LAN setting</span></span></p> </li></ul> <p style="margin-left: 1in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">- Click on Advanced button</span></span></p> <p style="margin-left: 1in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">- Set the http proxy address to use as localhost, port 8001</span></span></p> <p style="margin-left: 1in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">- Set the secure proxy address to use as localhost, port 8001</span></span></p> <p style="margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="center"><span style="font-size:85%;"><b><span lang="en-US"><span style="color:#000000;">Figure f</span></span></b></span></p> <p style="margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_q73Dwx3o4GI/Sta61E1dVoI/AAAAAAAACL8/zcLzfYWyUuA/s1600-h/fig-f.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 301px; height: 320px;" src="http://2.bp.blogspot.com/_q73Dwx3o4GI/Sta61E1dVoI/AAAAAAAACL8/zcLzfYWyUuA/s320/fig-f.PNG" alt="" id="BLOGGER_PHOTO_ID_5392703024816543362" border="0" /></a></p> <p style="margin-bottom: 0in; font-family: arial;" align="right"><span style="font-size:85%;"><br /></span></p> <p style="margin-bottom: 0in; font-family: arial;" align="center" lang="en-US"><span style="font-size:85%;"><br /></span></p> <h2 class="western" style="margin-left: 0.5in; font-family: arial;" lang="en-US"><span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b>11.2 TCPProxy: </b></i></span></span> </h2> <ul style="font-family: arial;"><li><p style="margin-top: 0.08in; margin-bottom: 0in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Fire off the TCPProxy within the Grinder using following command on command prompt-</span></span></p> </li></ul> <p style="margin-left: 0.75in; text-indent: 0.25in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>C:\Test>Java net.grinder.TCPProxy -console -http >Activity1.py</b></span></span></p> <ul style="font-family: arial;"><li><p style="margin-top: 0.08in; margin-bottom: 0in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Surf away with the IE session, and you will have all actions recorded.</span></span></p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Click Stop Recording on the TCPProxy Window, when you are done.</span></span></p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">You will notice within the directory there is a Activity1.py file. This are your test scripts. </span></span> </p> </li></ul> <h2 class="western" style="margin-left: 0.5in; font-family: arial;" lang="en-US"><span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b>11.3 Steps for recording a script for web application:</b></i></span></span></h2> <ul style="font-family: arial;"><li><p style="margin-top: 0.08in; margin-bottom: 0in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Set the Grinder environment (setGrinderEnv.cmd)</span></span></p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Start TCPProxy (startProxy.cmd)</span></span></p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Perform the user actions on the website and intern they are recorded</span></span></p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Stop the TCPProxy </span></span> </p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" lang="en-US"><span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">A file with the recorded script having extension .py is created on the grinder environment path.</span></span></p> </li></ul> <h2 class="western" style="margin-left: 0.5in; font-family: arial;" lang="en-US"><span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b>11.4 Running the Test Scripts: </b></i></span></span> </h2> <h3 class="western" style="margin-left: 1.38in; text-indent: -0.5in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#003366;"><i><b>11.4.1 Method 1: Executing Multiple Agents on Different Machines:</b></i></span></h3> <p style="margin-left: 1in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">To run the recorded script, the console and the agent processes should be initiated first and then the user has to set working directory in the console through the set directory option. Once the directory is set, the user can select the script that needs to be run. The name of the script that needs to be executed should be included in the properties file within the property</span></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>grinder.script = script name</b></span></span></p> <p style="margin-left: 1.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>E.g- </b></span></span> </p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>grinder.script=Activity1.py</b></span></span></p> <p style="margin-left: 1in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The user needs to set the script for the engine to run and then start the processes. This is explained action-wise below</span></span></p> <ul style="font-family: arial;"><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Set up resource monitoring with performance monitor on the server, and client machine.</span></span></p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">In the same directory have a grinder.properties, this file contains the configuration settings </span></span> </p> </li></ul> <p style="margin-left: 1.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>E.g –</b></span></span></p> <p style="margin-bottom: 0in; font-family: arial;" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>grinder.processes=1</b></span></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>grinder.threads=2</b></span></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>grinder.cycles=1</b></span></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>grinder.useConsole=true</b></span></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>grinder.consoleHost=192.168.8.215</b></span></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>grinder.consolePort=6372</b></span></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>grinder.logDirectory=log</b></span></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>grinder.appendLog=false</b></span></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>grinder.initialSleepTime=500</b></span></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>grinder.sleepTimeFactor=0.01</b></span></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>grinder.sleepTimeVariation=0.005</b></span></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>grinder.script=Activity1.py</b></span></span></p> <ul style="font-family: arial;"><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Also within that directory, have the script you would like to run. E.g Find the Activity1.py file.</span></span></p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Start the console from the directory where you are going to store the result of log files on one machine.</span></span></p> </li></ul> <p style="margin-left: 1.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>E.g.</b></span></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>C:\Test>Java net.grinder.Console</b></span></span></p> <ul style="font-family: arial;"><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify"><span style="font-size:85%;color:#000000;">‘<span lang="en-US"><span style="font-size: 13pt;"><b>Set the root directory’</b> for the script distribution on the CONSOLE host where the script is listed.</span></span></span></p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify"><span style="font-size:85%;color:#000000;">‘<span lang="en-US"><span style="font-size: 13pt;"><b>Set the script’</b> of console for running the script on Console host under the scripts tab.</span></span></span></p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Start the agent on individual machines using following command. (startAgent.cmd) [It will show the message- “Waiting for console signal”]</span></span></p> </li></ul> <p style="margin-left: 1.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>E.g</b></span></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 11pt;"><b>C:\Test>Java net.grinder.Grinder</b></span></span></p> <ul style="font-family: arial;"><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify"><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">Click <b>‘Send changed files to worker processes’</b> to distribute files from the root directory in the console.</span></span></span></p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Start the processes (Action Menu =>Start Processes)</span></span></p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Finished [Waiting for console signal]</span></span></p> </li></ul> <p style="margin-left: 1in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">(Note- In order to store all the results in the same directory, use that directory at command prompt to execute the Console or Agent)</span></span></p> <h3 class="western" style="margin-left: 1.38in; text-indent: -0.5in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#003366;"><i><b>11.4.2 Method 2: Executing Multiple Agents on One Machine:</b></i></span></h3> <p style="margin-left: 1in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">It is possible to execute the whole scenario from one machine using grinder. In that case we have to baseline the folder structure. </span></span> </p> <p style="margin-left: 1in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="left" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">E.g. If there is folder named “Scenario” and subfolders are “Activity 1”, “Activity 2” etc. In this case there should be individual script and grinder.properties file in that particular folder. E.g. Activity1.py and Activity1.properties should be included in the “Activity 1” folder. </span></span> </p> <p style="margin-left: 1in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Start the console and then open the different instances from command prompt for each activity to be executed. Go to that folder and execute the agent processes for that particular folder using following command.</span></span></p> <p style="margin-left: 1in; text-indent: 0.25in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">E.g. The activity1.py script can be executed as-</span></span></p> <p style="margin-left: 2in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span style="font-size:85%;color:#000000;"> <b><span lang="en-US"><span style="font-size: 11pt;">C:\Scanario\Activity1>Java net.grinder.Grinder</span></span></b></span></p> <p style="margin-left: 1in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Then in console we have to set the working directory. (Don’t set the script to be executed). Now we can execute the worker processes in the console.</span></span></p> <p style="margin-left: 1in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The statistical log data will be collected in the particular activity script folder. Console does have the consolidated data for all the activities executed. One can save this data and analyze the results.</span></span></p> <h2 class="western" style="margin-left: 0.5in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#003366;"><span style="font-size: 11pt;"><i><b>11.5 Results:</b></i></span></span></h2> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;"><span style="">In the log files generated we get the text files as shown in the following</span> shows the log file data generated in data_pc1.log (Only sample data and not complete data) and shows the log file data generated in out_pc1.log. contents the data gathered in console.</span></span></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Using this data one can analyze and generate the reports. </span></span> </p> <p style="margin-left: 0.5in; margin-bottom: 0in; font-family: arial;" align="center" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-left: 0.5in; margin-bottom: 0in; font-family: arial;" align="center"><span style="font-size:85%;"><a name="_Ref151438555"></a></span> <span style="font-size:85%;"><b><span lang="en-US"><span style="color:#000000;">Table 2 – data_pc1.log</span></span></b></span></p> <p style="margin-bottom: 0in; font-family: arial;"><span style="font-size:85%;"><br /></span></p> <dl style="font-family: arial;"><dd> <table border="1" border cellpadding="7" cellspacing="0" width="626" style="color:#000000;"> <col width="9"> <col width="10"> <col width="34"> <col width="62"> <col width="34"> <col width="10"> <col width="46"> <col width="54"> <col width="46"> <col width="58"> <col width="58"> <col width="35"> <tbody><tr valign="bottom"> <td bg height="61" width="9" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Thread</b></span></p> </td> <td bg width="10" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Run</b></span></p> </td> <td bg width="34" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Test</b></span></p> </td> <td bg width="62" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;"><span style="font-size:85%;color:#000000;"> <b><span lang="en-US">Milliseconds since start</span></b></span></p> </td> <td bg width="34" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Test time</b></span></p> </td> <td bg width="10" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Errors</b></span></p> </td> <td bg width="46" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>HTTP response code</b></span></p> </td> <td bg width="54" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>HTTP response length</b></span></p> </td> <td bg width="46" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>HTTP response errors</b></span></p> </td> <td bg width="58" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Time to resolve host</b></span></p> </td> <td bg width="58" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Time to establish connection</b></span></p> </td> <td bg width="35" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Time to first byte</b></span></p> </td> </tr> <tr valign="bottom"> <td height="4" width="9"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">1</span></p> </td> <td width="10"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="34"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">101</span></p> </td> <td width="62"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">47</span></p> </td> <td width="34"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">1391</span></p> </td> <td width="10"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="46"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">200</span></p> </td> <td width="54"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">8827</span></p> </td> <td width="46"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="58"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">15</span></p> </td> <td width="58"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">31</span></p> </td> <td width="35"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">1359</span></p> </td> </tr> <tr valign="bottom"> <td height="3" width="9"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">1</span></p> </td> <td width="10"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="34"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">100</span></p> </td> <td width="62"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">1453</span></p> </td> <td width="34"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">16</span></p> </td> <td width="10"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="46"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">304</span></p> </td> <td width="54"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="46"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="58"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="58"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="35"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> </tr> </tbody></table> </dd></dl> <p style="margin-bottom: 0in; font-family: arial;"><span style="font-size:85%;"><br /></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">In the above , the number of “<b>Threads</b>” and <b>“Runs</b>” are executed in the combination for the individual tests. Tests can be identified in the .py script files. Every individual Test is the request for the object recorded. It is identified by its number in the script. So each Test is executed twice for Thread and Run in combination (E.g Here Threads are mentioned as 2 and Runs as 1. So each Test is executed for Thread-0, Run-0 and Thread-1, Run-0). The column <b>“Milliseconds since start”</b> shows the response time in milliseconds taken by that Test since starting from the execution. <b>“Test time”</b> shows the complete test time in milliseconds taken by that Test to execute<b>. “Errors” </b>column shows the number of errors occurred during execution of that individual Test. <b>“HTTP response code”</b> shows the response behavior of that Test in code. (Please refer HTTP Response codes for this.) <b>“HTTP response errors” </b>shows any errors occurred during the execution of that individual Test. </span></span></span> </p> <p style="margin-left: 0.5in; margin-bottom: 0in; font-family: arial;" align="center" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-left: 0.5in; margin-bottom: 0in; font-family: arial;" align="center"><span style="font-size:85%;"><a name="_Ref151438581"></a></span> <span style="font-size:85%;"><b><span lang="en-US"><span style="color:#000000;">Table 3 – out_pc1.log</span></span></b></span></p> <p style="margin-bottom: 0in; font-family: arial;"><span style="font-size:85%;"><br /></span></p> <dl style="font-family: arial;"><dd> <table border="1" border cellpadding="7" cellspacing="0" width="621" style="color:#000000;"> <col width="33"> <col width="10"> <col width="10"> <col width="46"> <col width="58"> <col width="46"> <col width="46"> <col width="22"> <col width="46"> <col width="58"> <col width="31"> <col width="45"> <tbody><tr valign="bottom"> <td bg height="109" width="33" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Test No</b></span></p> </td> <td bg width="10" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Tests</b></span></p> </td> <td bg width="10" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Errors</b></span></p> </td> <td bg width="46" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in; margin-bottom: 0in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Mean Test</b></span></p> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Time (ms)</b></span></p> </td> <td bg width="58" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in; margin-bottom: 0in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Test Time</b></span></p> <p style="margin-left: 0.08in; margin-right: 0.08in; margin-bottom: 0in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Standard</b></span></p> <p style="margin-left: 0.08in; margin-right: 0.08in; margin-bottom: 0in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Deviation</b></span></p> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>(ms)</b></span></p> </td> <td bg width="46" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in; margin-bottom: 0in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Mean</b></span></p> <p style="margin-left: 0.08in; margin-right: 0.08in; margin-bottom: 0in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>response</b></span></p> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>length</b></span></p> </td> <td bg width="46" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in; margin-bottom: 0in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Response</b></span></p> <p style="margin-left: 0.08in; margin-right: 0.08in; margin-bottom: 0in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>bytes per</b></span></p> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>second</b></span></p> </td> <td bg width="22" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in; margin-bottom: 0in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Response</b></span></p> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>errors</b></span></p> </td> <td bg width="46" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in; margin-bottom: 0in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Mean time to</b></span></p> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>resolve host</b></span></p> </td> <td bg width="58" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in; margin-bottom: 0in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Mean time to</b></span></p> <p style="margin-left: 0.08in; margin-right: 0.08in; margin-bottom: 0in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>establish</b></span></p> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>connection</b></span></p> </td> <td bg width="31" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in; margin-bottom: 0in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Mean time to</b></span></p> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>first byte</b></span></p> </td> <td bg width="45" style="color:#ff9900;"> <p lang="en-US"><span style="font-size:85%;"><br /></span> </p> </td> </tr> <tr valign="bottom"> <td height="3" width="33"> <p style="margin-bottom: 0in;" lang="en-US"><span style="font-size:85%;color:#000000;">Test</span></p> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">100</span></p> </td> <td width="10"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">2</span></p> </td> <td width="10"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="46"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">1523.5</span></p> </td> <td width="58"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">70.5</span></p> </td> <td width="46"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="46"> <p lang="en-US"><span style="font-size:85%;color:#000000;">?</span></p> </td> <td width="22"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="46"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="58"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="31"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="45"> <p lang="en-US"><span style="font-size:85%;color:#000000;">"Page 1"</span></p> </td> </tr> <tr valign="bottom"> <td height="2" width="33"> <p style="margin-bottom: 0in;" lang="en-US"><span style="font-size:85%;color:#000000;">Test</span></p> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">101</span></p> </td> <td width="10"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">2</span></p> </td> <td width="10"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="46"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">1453.5</span></p> </td> <td width="58"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">62.5</span></p> </td> <td width="46"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">8827</span></p> </td> <td width="46"> <p lang="en-US"><span style="font-size:85%;color:#000000;">?</span></p> </td> <td width="22"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="46"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">15.5</span></p> </td> <td width="58"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">23.5</span></p> </td> <td width="31"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">1422</span></p> </td> <td width="45"> <p style="margin-bottom: 0in;" lang="en-US"><span style="font-size:85%;color:#000000;">"GET</span></p> <p lang="en-US"><span style="font-size:85%;color:#000000;">Main.php"</span></p> </td> </tr> </tbody></table> </dd></dl> <p style="margin-bottom: 0in; font-family: arial;"><span style="font-size:85%;"><br /></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">The data in out_pc1.log is the consolidated result for the number of Tests. (E.g <b>“Test 100”</b> is executed for two times i.e for Thread-0, Run-0 and Thread-1, Run-0). Here the <b>“Test 100”</b> is executed for 2 times and it is shown in <b>“Tests”</b> column. The <b>“Errors”</b> column shows the <b>total number of errors</b> occurred during execution of that complete test<b>. “Mean Test Time”</b> shows the mean time in milliseconds taken by that Test to execute. <b>“Response bytes per seconds”</b> shows the mean of response bytes per second for that Test. The column <b>“Response errors”</b> shows the total HTTP response errors occurred during the execution of complete individual Test.</span></span></span></p> <p style="margin-left: 0.5in; margin-bottom: 0in; font-family: arial;" align="center" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-left: 0.5in; margin-bottom: 0in; font-family: arial;" align="center"><span style="font-size:85%;"><a name="_Ref151438596"></a></span> <span style="font-size:85%;"><b><span lang="en-US"><span style="color:#000000;">Table 4 – Console Data</span></span></b></span></p> <p style="margin-bottom: 0in; font-family: arial;"><span style="font-size:85%;"><br /></span></p> <dl style="font-family: arial;"><dd> <table border="0" cellpadding="7" cellspacing="0" width="635"> <col width="22"> <col width="22"> <col width="22"> <col width="22"> <col width="34"> <col width="46"> <col width="46"> <col width="14"> <col width="34"> <col width="34"> <col width="34"> <col width="34"> <col width="46"> <col width="29"> <tbody><tr valign="bottom"> <td bg height="122" width="22" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Test</b></span></p> </td> <td bg width="22" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Description</b></span></p> </td> <td bg width="22" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Successful Tests</b></span></p> </td> <td bg width="22" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Errors</b></span></p> </td> <td bg width="34" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Mean Time</b></span></p> </td> <td bg width="46" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Mean Time Standard Deviation</b></span></p> </td> <td bg width="46" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>TPS</b></span></p> </td> <td bg width="14" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Peak TPS</b></span></p> </td> <td bg width="34" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Mean Response Length</b></span></p> </td> <td bg width="34" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Response Bytes Per Second</b></span></p> </td> <td bg width="34" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Response Errors</b></span></p> </td> <td bg width="34" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Mean time to resolve host</b></span></p> </td> <td bg width="46" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Mean time to establish connection</b></span></p> </td> <td bg width="29" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Mean time to first byte</b></span></p> </td> </tr> <tr valign="bottom"> <td height="62" width="22"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;">Test 100</span></p> </td> <td width="22"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;">Page 1</span></p> </td> <td width="22"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">7</span></p> </td> <td width="22"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="34"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">4530</span></p> </td> <td width="46"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">1510</span></p> </td> <td width="46"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0.0128</span></p> </td> <td width="14"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">3</span></p> </td> <td width="34"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="34"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="34"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="34"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="46"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="29"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> </tr> <tr valign="bottom"> <td height="62" width="22"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;">Test 101</span></p> </td> <td width="22"> <p style="margin-left: 0.08in; margin-right: 0.08in;" lang="en-US"> <span style="font-size:85%;color:#000000;">GET Main.php</span></p> </td> <td width="22"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">7</span></p> </td> <td width="22"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="34"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">4460</span></p> </td> <td width="46"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">1510</span></p> </td> <td width="46"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0.0128</span></p> </td> <td width="14"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">3</span></p> </td> <td width="34"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">8830</span></p> </td> <td width="34"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">113</span></p> </td> <td width="34"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="34"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">26.7</span></p> </td> <td width="46"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">462</span></p> </td> <td width="29"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">4410</span></p> </td> </tr> </tbody></table> </dd></dl> <p style="margin-bottom: 0in; font-family: arial;"><span style="font-size:85%;"><br /></span></p> <p style="margin-left: 0.5in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">The sample data generated in the console can be captured for any individual time while execution of script. It can be saved in a default CSV file named <b>“grinder-console.data” </b>during execution. This data is similar to the data in <b>“Out_pc1.log”</b> file. But using this data basically one can identify and evaluate the <b>“Mean Time”</b>, <b>“TPS”</b> and <b>“Peak TPS”</b> for individual Test sample.</span></span></span></p> <h3 class="western" style="margin-left: 1.38in; text-indent: -0.5in; font-family: arial;" lang="en-US"> <span style="font-size:85%;color:#003366;"><i><b>11.5.1 Result Analysis:</b></i></span></h3> <p style="margin-left: 1in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Using the data from data_pc1.log and out_pc1.log files as well as console host, under the results tab, one can analyze the results as follows. </span></span> </p> <ul style="font-family: arial;"><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify"><span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">Analyse the <b>Response time, Throughput</b> and <b>Error</b> using the grinder results.</span></span></span></p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Mean time in the console is response time.</span></span></p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Bytes per sec is the throughput and error can be analyzed using the parameters response error, error and successful tests.</span></span></p> </li><li><p style="margin-top: 0.08in; margin-bottom: 0in;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">Plot the graphs and analyse the results.</span></span></p> </li></ul> <p style="margin-left: 1in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;">(Note-We have collected all the log files data generated on individual agent machines and console captured data for scenario 1 as in performance plan. Then we have consolidated that data in excel sheet as shown Table 4 in and plotted the graphs.)Table 4 – Consolidated Data</span></p> <p style="margin-bottom: 0in; font-family: arial;" align="center" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-bottom: 0in; font-family: arial;" align="center" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-bottom: 0in; font-family: arial;" align="center" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-bottom: 0in; font-family: arial;" align="center" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-bottom: 0in; font-family: arial;" align="center" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-bottom: 0in; font-family: arial;" align="center" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-bottom: 0in; font-family: arial;" align="center" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-bottom: 0in; font-family: arial;" align="center"><span style="font-size:85%;"><b><span lang="en-US"><span style="color:#000000;">Table 5- Consolidated Data</span></span></b></span></p> <p style="margin-bottom: 0in; font-family: arial;"><span style="font-size:85%;"><br /></span></p> <dl style="font-family: arial;"><dd> <table border="0" cellpadding="7" cellspacing="0" width="651"> <col width="65"> <col width="38"> <col width="22"> <col width="62"> <col width="62"> <col width="50"> <col width="43"> <col width="10"> <col width="57"> <col width="35"> <col width="53"> <tbody><tr valign="bottom"> <td bg width="65" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" align="center" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Activities Number</b></span></p> </td> <td bg width="38" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" align="center" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Tests</b></span></p> </td> <td bg width="22" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" align="center" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Errors</b></span></p> </td> <td bg width="62" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" align="center" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Mean Test Time (ms)</b></span></p> </td> <td bg width="62" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" align="center" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Test Time Standard Deviation (ms)</b></span></p> </td> <td bg width="50" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" align="center" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Mean Response Length</b></span></p> </td> <td bg width="43" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" align="center" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Response bytes per second</b></span></p> </td> <td bg width="10" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" align="center" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Response errors</b></span></p> </td> <td bg width="57" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" align="center" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Mean time to resolve host</b></span></p> </td> <td bg width="35" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" align="center" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Mean time to establish connection</b></span></p> </td> <td bg width="53" style="color:#ff9900;"> <p style="margin-left: 0.08in; margin-right: 0.08in;" align="center" lang="en-US"> <span style="font-size:85%;color:#000000;"><b>Mean time to first byte</b></span></p> </td> </tr> <tr valign="bottom"> <td height="3" width="65"> <p lang="en-US"><span style="font-size:85%;color:#000000;">Total_Act1</span></p> </td> <td width="38"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">22</span></p> </td> <td width="22"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="62"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">3138.77</span></p> </td> <td width="62"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">3074.56</span></p> </td> <td width="50"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">2143.82</span></p> </td> <td width="43"> <p lang="en-US"><span style="font-size:85%;color:#000000;">?</span></p> </td> <td width="10"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="57"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">3.55</span></p> </td> <td width="35"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">3.55</span></p> </td> <td width="53"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">1515.41</span></p> </td> </tr> <tr valign="bottom"> <td height="3" width="65"> <p lang="en-US"><span style="font-size:85%;color:#000000;">Total_Act2</span></p> </td> <td width="38"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">44</span></p> </td> <td width="22"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="62"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">2258.66</span></p> </td> <td width="62"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">2509.04</span></p> </td> <td width="50"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">1578</span></p> </td> <td width="43"> <p lang="en-US"><span style="font-size:85%;color:#000000;">?</span></p> </td> <td width="10"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="57"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0.7</span></p> </td> <td width="35"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">1.07</span></p> </td> <td width="53"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">1108.5</span></p> </td> </tr> <tr valign="bottom"> <td height="3" width="65"> <p lang="en-US"><span style="font-size:85%;color:#000000;">Total_Act3</span></p> </td> <td width="38"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">106</span></p> </td> <td width="22"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="62"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">1099.16</span></p> </td> <td width="62"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">2075.97</span></p> </td> <td width="50"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">737.09</span></p> </td> <td width="43"> <p lang="en-US"><span style="font-size:85%;color:#000000;">?</span></p> </td> <td width="10"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="57"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0.58</span></p> </td> <td width="35"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">29.2</span></p> </td> <td width="53"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">542.58</span></p> </td> </tr> <tr valign="bottom"> <td height="3" width="65"> <p lang="en-US"><span style="font-size:85%;color:#000000;">Total_Act4</span></p> </td> <td width="38"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">114</span></p> </td> <td width="22"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="62"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">1139.96</span></p> </td> <td width="62"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">1954.86</span></p> </td> <td width="50"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">881.04</span></p> </td> <td width="43"> <p lang="en-US"><span style="font-size:85%;color:#000000;">?</span></p> </td> <td width="10"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0</span></p> </td> <td width="57"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0.27</span></p> </td> <td width="35"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">0.41</span></p> </td> <td width="53"> <p align="right" lang="en-US"><span style="font-size:85%;color:#000000;">559.81</span></p> </td> </tr> </tbody></table> </dd></dl> <p style="margin-left: 1in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">The result can be analysed by finding Throughput and Mean Test time as shown in fig a & fig b of graphs.</span></span></p> <p style="margin-left: 1in; margin-bottom: 0in; font-family: arial;" align="justify"><span style="font-size:85%;"><span lang="en-US"><span style="color:#000000;"><span style=""><span style="font-size: 13pt;">The graph in the</span> Graph 1<span style="font-size: 11pt;"> </span><span style="font-size: 13pt;">shows </span></span><b><span style="font-size: 13pt;">“Mean Test time”</span></b><span style=""><span style="font-size: 13pt;"> taken by that individual activity to execute all the tests of that script. Here the Activity_1 has taken </span></span><span style="font-size: 13pt;"><b>3138.77</b><span style=""> milliseconds time to execute all the 22 Tests mentioned in that script. Activity_2 has taken </span></span><b>2258.66 </b><span style=""><span style="font-size: 13pt;">milliseconds time to execute all the 44 Tests mentioned in that script. Activity_3 has taken </span></span><b>1099.16 </b><span style=""><span style="font-size: 13pt;">milliseconds time to execute all the 106 Tests mentioned in that script. Activity_4 has taken </span></span><b>1139.96 </b><span style=""><span style="font-size: 13pt;">milliseconds time to execute all the 114 Tests mentioned in that script.</span></span></span></span></span></p> <p style="margin-bottom: 0in; font-family: arial;" align="center"><span style="font-size:85%;"><b><span lang="en-US"><span style="color:#000000;">Graph 1</span></span></b></span></p><p style="margin-bottom: 0in; font-family: arial;" align="center"><span style="font-size:85%;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_q73Dwx3o4GI/Stax9xnvtTI/AAAAAAAACK8/7siN8cbSIvM/s1600-h/graph2.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 174px;" src="http://3.bp.blogspot.com/_q73Dwx3o4GI/Stax9xnvtTI/AAAAAAAACK8/7siN8cbSIvM/s320/graph2.PNG" alt="" id="BLOGGER_PHOTO_ID_5392693278672926002" border="0" /></a></span></p> <p style="margin-left: 1in; margin-top: 0.08in; margin-bottom: 0in; font-family: arial;" align="justify"><span style="font-size:85%;"><a name="_Ref151441985"></a></span> <span lang="en-US" style="font-size:85%;"><span style="font-size: 13pt;"><span style="color:#000000;">The graph in Graph 2 shows “Response Bytes per Second” taken by that individual activity to execute all the Tests of that script. Here the “Response bytes per second” column is not collecting the data in log files. So we have taken the sample data from Console and plotted the sample graph for throughput. If the data is generated in log files, it will be better for conclusion. So it is not included in conclusion.</span></span></span></p> <p style="margin-bottom: 0in; font-family: arial;" align="center"><span style="font-size:85%;"><b><span lang="en-US"><span style="color:#000000;">Graph 2</span></span></b></span></p> <p style="margin-bottom: 0in; font-family: arial;" lang=""><span style="font-size:85%;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_q73Dwx3o4GI/StawYjLHaoI/AAAAAAAACK0/A1W0JE3ACYo/s1600-h/Graph1.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 155px;" src="http://2.bp.blogspot.com/_q73Dwx3o4GI/StawYjLHaoI/AAAAAAAACK0/A1W0JE3ACYo/s320/Graph1.PNG" alt="" id="BLOGGER_PHOTO_ID_5392691539627960962" border="0" /></a></span></p> <p style="margin-bottom: 0in; font-family: arial;"><span style="font-size:85%;"><br /></span></p> <p style="margin-left: 1in; margin-bottom: 0in; font-family: arial;" align="left" lang="en-US"> <span style="font-size:85%;color:#000000;"><span style="font-size: 13pt;">No Errors, Response Errors are generated for 8 virtual users on 4 different agents of 4 individual machines. All the Tests are shown as “Successful Tests” in console.</span></span></p> <p style="margin-left: 1in; margin-bottom: 0in; font-family: arial;" align="left" lang="en-US"><span style="font-size:85%;"><br /></span></p> <p style="margin-left: 1in; margin-bottom: 0in; font-family: arial;" align="left"><span style="font-size:85%;"><b><span lang="en-US"><span style="font-size: 13pt;"><span style="color:#000000;">Conclusion: </span></span></span></b><span style=""><span lang="en-US"><span style="font-size: 13pt;"><span style="color:#000000;">According to this data and graph in fig a, the Activity 1 and Activity 2 scripts are taking more time to execute the only 22 and 44 tests as compared to other activities scripts. It should be reduced and balanced to that level of other activities. </span></span></span></span></span> </p>Anonymoushttp://www.blogger.com/profile/18260954945115676908noreply@blogger.com0tag:blogger.com,1999:blog-6173516920648822077.post-33508026804957332042008-12-03T23:39:00.001-08:002009-10-14T23:32:29.637-07:00FIT<div><br />Fitnesse</div><br /><script type="text/javascript" src="http://widgets.clearspring.com/o/491a02ad6ccc07b3/4937894521e382ff/491a02ad6ccc07b3/f9cf20ae/widget.js"></script>Anonymoushttp://www.blogger.com/profile/18260954945115676908noreply@blogger.com0tag:blogger.com,1999:blog-6173516920648822077.post-63459507638277891982008-12-03T22:58:00.001-08:002009-10-14T23:32:29.637-07:00Automation Acceptance Framework<script type="text/javascript" src="http://widgets.clearspring.com/o/491a02ad6ccc07b3/49377f943feab65d/491a02ad6ccc07b3/365eba2f/widget.js"></script>Anonymoushttp://www.blogger.com/profile/18260954945115676908noreply@blogger.com0tag:blogger.com,1999:blog-6173516920648822077.post-56211275439871125492008-10-21T07:15:00.000-07:002008-10-21T07:26:06.532-07:00<div style="text-align: center;"><span style="font-weight: bold; color: rgb(102, 0, 204);font-size:130%;" >Automated Acceptance Testing Frame work (FitNesse):</span><br /></div><br /><p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">In the last <a title="http://www.developer.com/tech/article.php/3643611" href="http://www.developer.com/tech/article.php/3643611" target="new">installment</a>, I talked about the need for some level of automated testing. I'll reiterate that the goal is not to automate 100% of all tests. But, you <i><span style="font-style: italic;">do</span></i> want to move in that direction. I've yet to encounter a team that has suffered from having too many tests. (I have worked with teams who have had too many <i><span style="font-style: italic;">poorly written</span></i> tests.)<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">I also introduced the tool FitNesse. In this installment, you'll learn more about what FitNesse is. You'll download the tool, install it, start it up, and begin to learn about its editing capabilities. In the next installment, you'll specify a very simple test and build the support for it, both in an incremental fashion.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">FitNesse combines two very powerful tools to create a whole greater than the sum of its parts. FitNesse combines the testing tool Fit (Framework For Integrated Tests) with the power of a wiki. Hopefully, you've had the experience of interacting with a wiki; if not, read <a title="http://en.wikipedia.org/wiki/Wiki" href="http://en.wikipedia.org/wiki/Wiki" target="new">this page</a> at <a title="http://wikipedia.org/" href="http://wikipedia.org/" target="new">Wikipedia.org</a> (which is itself a wiki). Simply put, a wiki is an open, collaborative web site.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">The Fit tool, devised by <a title="http://en.wikipedia.org/wiki/Ward_Cunningham" href="http://en.wikipedia.org/wiki/Ward_Cunningham" target="new">Ward Cunningham</a>, is a table-driven testing framework. It reads HTML data tables that it uses to drive interaction with an underlying application. Fit provides support for verifying application results through these tables. Programmers provide small, intermediary bits of code, known as <i><span style="font-style: italic;">fixtures</span></i>, to interpret the tables and directly drive the application being tested.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">FitNesse provides support for writing these fixtures in various languages. The primary FitNesse distribution supports Java out of the box. However, other developers have added support for coding fixtures in Ruby, C++, <st1:place st="on">Delphi</st1:place>, Python, Smalltalk, Perl, or .NET. From the FitNesse.org home page, click on the link marked <a title="http://fitnesse.org/FitServers" href="http://fitnesse.org/FitServers" target="new">FitServers</a> for more information.<o:p></o:p></span></span></p> <h3><span style="font-size:85%;"><b><span style="font-family:Verdana;"><span style="font-family:Verdana;">Getting Started<o:p></o:p></span></span></b></span></h3> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">You will download and install FitNesse. FitNesse contains a built-in web server, so you will not need to use Apache or any other web server. FitNesse does require you to have an installed version of Java; the latest version of FitNesse requires Java 5.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">Even if you are not using Java 5 for production applications, there's usually no reason you can't install Java 5 just to support FitNesse. Ultimately, you will deploy FitNesse to a production server, one that gets backed up regularly and that is under other typical server controls. Depending on how heavy your testing needs end up, you may need to allocate a separate server to run FitNesse.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">If you were unfortunately constrained to using older versions of Java, you could use the previous version of FitNesse. This version is dated July 31, 2005, and will run under Java 1.4.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">FitNesse will run with no problems under either Windows or Unix(tm). Your walkthrough of the simple example below presumes you're using Windows.<o:p></o:p></span></span></p> <h3><span style="font-size:85%;"><b><span style="font-family:Verdana;"><span style="font-family:Verdana;">Let's Go!<o:p></o:p></span></span></b></span></h3> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">The first step is to download and install FitNesse, a reasonably painless process. Navigate to <a title="http://fitnesse.org/" href="http://fitnesse.org/" target="new">FitNesse.org</a> and click the Download link.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">Select the latest version of the distribution because you're running Java 5. Currently, this version dates to July 2006. Download the file named fitnesse20060719.zip.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">Unzip the file onto your machine, into </span></span><span style="font-size:85%;"><tt><span style="font-family:Courier New;">c:</span></tt></span><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">. The path information already includes references to the subdirectory </span></span><span style="font-size:85%;"><tt><span style="font-family:Courier New;">fitnesse</span></tt></span><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">. Your entire FitNesse distribution thus ends up in </span></span><span style="font-size:85%;"><tt><span style="font-family:Courier New;">c:\fitnesse</span></tt></span><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">. You could have chosen any other location into which to install FitNesse.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">You now attempt to start the FitNesse server. To do so, create a shortcut on your desktop. When Windows asks you to "Type the location of the item:," enter:<o:p></o:p></span></span></p><pre><span style=";font-family:Courier New;font-size:85%;" >c:\fitnesse\run.bat<o:p></o:p></span></pre> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">Name this shortcurt <b><span style="font-weight: bold;">FitNesse</span></b>. Open the new shortcut to start the FitNesse server. (If you installed under Unix(tm), you would start FitNesse simply by executing the corresponding shell script, </span></span><span style="font-size:85%;"><tt><span style="font-family:Courier New;">run.sh</span></tt></span><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">.)<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">Unfortunately, it turns out you already had something running on the same port that FitNesse defaults to, port 80.<o:p></o:p></span></span></p><pre><span style=";font-family:Courier New;font-size:85%;" >C:\fitnesse>java -cp fitnesse.jar fitnesse.FitNesse<o:p></o:p></span></pre><pre><span style=";font-family:Courier New;font-size:85%;" >FitNesse cannot be started...<o:p></o:p></span></pre><pre><span style=";font-family:Courier New;font-size:85%;" >Port 80 is already in use.<o:p></o:p></span></pre><pre><span style=";font-family:Courier New;font-size:85%;" >Use the -p <port#> command line argument to use a different port.<o:p></o:p></port#></span></pre><pre><span style=";font-family:Courier New;font-size:85%;" ><o:p> </o:p></span></pre><pre><span style=";font-family:Courier New;font-size:85%;" >C:\fitnesse>pause<o:p></o:p></span></pre><pre><span style=";font-family:Courier New;font-size:85%;" >Press any key to continue . . .<o:p></o:p></span></pre> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">To fix this problem, edit the properties for the shortcut, and change the Target so that it specifies an available port:<o:p></o:p></span></span></p><pre><span style=";font-family:Courier New;font-size:85%;" >C:\fitnesserun.bat -p 8083<o:p></o:p></span></pre> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">Now when we attempt to start the server, we see:<o:p></o:p></span></span></p><pre><span style=";font-family:Courier New;font-size:85%;" >C:\fitnesse>java -cp fitnesse.jar fitnesse.FitNesse -p 8083<o:p></o:p></span></pre><pre><span style=";font-family:Courier New;font-size:85%;" >FitNesse (20060719) Started...<o:p></o:p></span></pre><pre><span style=";font-family:Courier New;font-size:85%;" > port: 8083<o:p></o:p></span></pre><pre><span style=";font-family:Courier New;font-size:85%;" > root page: fitnesse.wiki.FileSystemPage at<o:p></o:p></span></pre><pre><span style=";font-family:Courier New;font-size:85%;" > ./FitNesseRoot<o:p></o:p></span></pre><pre><span style=";font-family:Courier New;font-size:85%;" > logger: none<o:p></o:p></span></pre><pre><span style=";font-family:Courier New;font-size:85%;" > authenticator: fitnesse.authentication.<o:p></o:p></span></pre><pre><span style=";font-family:Courier New;font-size:85%;" > PromiscuousAuthenticator<o:p></o:p></span></pre><pre><span style=";font-family:Courier New;font-size:85%;" > html page factory: fitnesse.html.HtmlPageFactory<o:p></o:p></span></pre><pre><span style=";font-family:Courier New;font-size:85%;" > page version expiration set to 14 days.<o:p></o:p></span></pre> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">Success! This console window will stay around until you close it. You could also press </span></span><span style="font-size:85%;"><tt><span style="font-family:Courier New;">ctrl-c</span></tt></span><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;"> to terminate the Java process.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">The console window represents the executing FitNesse server. Normally, you won't see any other messages on this console.<o:p></o:p></span></span></p> <h3><span style="font-size:85%;"><b><span style="font-family:Verdana;"><span style="font-family:Verdana;">The FitNesse wiki<o:p></o:p></span></span></b></span></h3> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">Open up a web browser and navigate to </span></span><span style="font-size:85%;"><tt><span style="font-family:Courier New;">http://localhost:8083</span></tt></span><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">. (You could have omitted the port information had you been able to run FitNesse on port 80.) You see the FitNesse welcome page (see Figure 1).<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;"><a title="http://www.developer.com/img/2006/12/fitnesse2_1.jpg" href="http://www.developer.com/img/2006/12/fitnesse2_1.jpg" target="new"><br /><span title="http://www.developer.com/img/2006/12/fitnesse2_1.jpg" style="text-decoration: none;"><img id="_x0000_i1025" title="http://www.developer.com/img/2006/12/fitnesse2_1.jpg" src="cid:image001.jpg@01C933AB.60FB5CC0" border="0" height="339" width="500" /></span><br /><em title="http://www.developer.com/img/2006/12/fitnesse2_1.jpg"><i title="http://www.developer.com/img/2006/12/fitnesse2_1.jpg"><span title="http://www.developer.com/img/2006/12/fitnesse2_1.jpg" style="font-family:Verdana;"><span title="http://www.developer.com/img/2006/12/fitnesse2_1.jpg" style="font-family:Verdana;">Click here for a larger image.</span></span></i></em> </a><o:p></o:p></span></span></p> <p><span style="font-size:85%;"><b><span style="font-family:Verdana;"><span style="font-weight: bold;font-family:Verdana;" >Figure 1:</span></span></b></span><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;"> The FitNesse welcome page.<o:p></o:p></span></span></p> <div align="center"> <table class="MsoNormalTable" style="border: 1.5pt outset ; width: 75%;" border="1" cellpadding="0" width="75%"> <tbody> <tr> <td style="padding: 1.5pt; background: rgb(197, 197, 197) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(197, 197, 197);" bg="" valign="top"> <p class="MsoNormal"><span style=";font-family:Arial;font-size:85%;color:black;" >If you've used other wikis, such as Confluence, you'll note that FitNesse has a number of things in common with them. However, you'll probably notice that FitNesse is fairly bare-boned compared to other wikis. Its primary focus is on the ability of the wiki to support organization and entry of Fit tests, and not on the robustness of the wiki environment itself. Some of the wiki conventions that FitNesse uses may seem familiar to you; others may seem arbitrarily different. That's the downside of the proliferation of various wiki implementations!</span><span style="font-size:85%;"><o:p></o:p></span></p></td></tr></tbody></table></div> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">As a wiki, FitNesse allows you to edit any page. You'll edit the first page and add a link to a new page in which you'll store your first test. Click the button marked Edit Locally, located on the left-hand side of the welcome page.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">You see an Edit Page. Within the edit box, move to the end of the existing text, press Enter a couple times, and type in the name of your new page, TestSample. Your screen now looks like Figure 2.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;"><a title="http://www.developer.com/img/2006/12/fitnesse2_2.jpg" href="http://www.developer.com/img/2006/12/fitnesse2_2.jpg" target="new"><br /><span title="http://www.developer.com/img/2006/12/fitnesse2_2.jpg" style="text-decoration: none;"><img id="_x0000_i1026" title="http://www.developer.com/img/2006/12/fitnesse2_2.jpg" src="cid:image002.jpg@01C933AB.60FB5CC0" border="0" height="339" width="500" /></span><br /><em title="http://www.developer.com/img/2006/12/fitnesse2_2.jpg"><i title="http://www.developer.com/img/2006/12/fitnesse2_2.jpg"><span title="http://www.developer.com/img/2006/12/fitnesse2_2.jpg" style="font-family:Verdana;"><span title="http://www.developer.com/img/2006/12/fitnesse2_2.jpg" style="font-family:Verdana;">Click here for a larger image.</span></span></i></em> </a><o:p></o:p></span></span></p> <p><span style="font-size:85%;"><b><span style="font-family:Verdana;"><span style="font-weight: bold;font-family:Verdana;" >Figure 2:</span></span></b></span><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;"> Editing the welcome page.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">Press Save, and again you see the welcome page. The welcome page now shows your new text, TestSample, followed by a question mark that your browser recognizes as a page link (see Figure 3).<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;"><img id="_x0000_i1027" src="cid:image003.jpg@01C933AB.60FB5CC0" border="0" height="210" width="455" /><o:p></o:p></span></span></p> <p><span style="font-size:85%;"><b><span style="font-family:Verdana;"><span style="font-weight: bold;font-family:Verdana;" >Figure 3:</span></span></b></span><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;"> FitNesse found no page for our wiki word.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">Your new page name, TestSample, follows the wiki convention of page naming. The basic rule is that a wiki page name starts with an uppercase letter, and at least one other letter in the word is also uppercase. However, the page name cannot contain two consecutive uppercase letters. Wiki page names can contain numbers. There are likely more rules; the easiest way to figure them out is to just try various name combinations. You'll refer to a valid wiki page name as a wiki word.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">The question mark next to the text TestSample says two things: First, TestSample is a valid wiki word. Second, FitNesse can't find a page named TestSample. That's because you haven't created it yet.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">To create the page, click the question mark next to TestSample. This opens a new page with no content, offering a fresh and clean edit box for typing. Enter some simple text (see Figure 4) and press Save. Your resulting page appears in Figure 5.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;"><a title="http://www.developer.com/img/2006/12/fitnesse2_4.jpg" href="http://www.developer.com/img/2006/12/fitnesse2_4.jpg" target="new"><br /><span title="http://www.developer.com/img/2006/12/fitnesse2_4.jpg" style="text-decoration: none;"><img id="_x0000_i1031" title="http://www.developer.com/img/2006/12/fitnesse2_4.jpg" src="cid:image004.jpg@01C933AB.8FC31200" border="0" height="677" width="958" /></span><br /><em title="http://www.developer.com/img/2006/12/fitnesse2_4.jpg"><i title="http://www.developer.com/img/2006/12/fitnesse2_4.jpg"><span title="http://www.developer.com/img/2006/12/fitnesse2_4.jpg" style="font-family:Verdana;"><span title="http://www.developer.com/img/2006/12/fitnesse2_4.jpg" style="font-family:Verdana;">Click here for a larger image.</span></span></i></em> </a><o:p></o:p></span></span></p> <p><span style="font-size:85%;"><b><span style="font-family:Verdana;"><span style="font-weight: bold;font-family:Verdana;" >Figure 4:</span></span></b></span><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;"> Editing a new page.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;"><a title="http://www.developer.com/img/2006/12/fitnesse2_5.jpg" href="http://www.developer.com/img/2006/12/fitnesse2_5.jpg" target="new"><br /><span title="http://www.developer.com/img/2006/12/fitnesse2_5.jpg" style="text-decoration: none;"><img id="_x0000_i1032" title="http://www.developer.com/img/2006/12/fitnesse2_5.jpg" src="cid:image005.jpg@01C933AB.8FC31200" border="0" height="322" width="456" /></span><br /><em title="http://www.developer.com/img/2006/12/fitnesse2_5.jpg"><i title="http://www.developer.com/img/2006/12/fitnesse2_5.jpg"><span title="http://www.developer.com/img/2006/12/fitnesse2_5.jpg" style="font-family:Verdana;"><span title="http://www.developer.com/img/2006/12/fitnesse2_5.jpg" style="font-family:Verdana;">Click here for a larger image.</span></span></i></em> </a><o:p></o:p></span></span></p> <p><span style="font-size:85%;"><b><span style="font-family:Verdana;"><span style="font-weight: bold;font-family:Verdana;" >Figure 5:</span></span></b></span><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;"> The new page<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">Note a couple things about your new page. The left-hand buttons now contain a Test button. Also, the address for the page, http://localhost:8083/TestSample, is basically the server plus your page name.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">Click the FitNesse gauge icon in the upper-left corner of your new TestSample page. You also might have clicked the link marked .FrontPage at the bottom of the page. Either click takes you back to the FitNesse welcome page, which you'll also refer to as the FrontPage. Your browser now recognizes the TestSample wiki word as an existing page (see Figure 6). You can click on the link to return to the TestSample page.<o:p></o:p></span></span></p> <span style="font-size:85%;"><img src="file:///C:/DOCUME%7E1/s/LOCALS%7E1/Temp/moz-screenshot-2.jpg" alt="" /><img src="file:///C:/DOCUME%7E1/s/LOCALS%7E1/Temp/moz-screenshot-3.jpg" alt="" /></span><p><span style="font-size:85%;"><img src="file:///C:/DOCUME%7E1/s/LOCALS%7E1/Temp/moz-screenshot-1.jpg" alt="" /></span></p><span style=";font-family:Verdana;font-size:85%;" ><span style=";font-family:Verdana;font-size:10;" ><img id="_x0000_i1033" src="cid:image006.jpg@01C933AB.8FC31200" border="0" height="198" width="460" /><o:p></o:p></span></span><p><span style="font-size:85%;"><b><span style="font-family:Verdana;"><span style="font-weight: bold;font-family:Verdana;" >Figure 6:</span></span></b></span><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;"> FitNesse found your new page.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">At this point, you have enough information create and edit new pages. You're going to go off now and experiment with FitNesse, adding a few new pages. You're also going to read the FitNesse user's guide because you found a link to it from the FrontPage. In the user's guide, you expect to find information on how to spruce up the look and feel of your pages. You'll make sure you're comfortable with a few basics, such as making text bold or italic.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">At this point, if you're not already using a wiki, you now have a tool that can provide your team with great value. You can use the wiki as a very dynamic place to add content. You can post ad hoc project documents to the wiki, use it as a repository for frequently asked questions, add workstation setup procedures, or even list favorite places to eat around the office. The beauty of a wiki is that anyone can easily edit the content without having to deal with the tedium of HTML and deployment issues.<o:p></o:p></span></span></p> <p><span style=";font-family:Verdana;font-size:85%;" ><span style="font-family:Verdana;">Next, you'll create and test a simple application.<o:p></o:p></span></span></p>Anonymoushttp://www.blogger.com/profile/18260954945115676908noreply@blogger.com0