Introduction
This framework has be created to answer the needs for stress testing and performance benchmarking in the IT/PSS/DP section.
Here is a picture of how the application works :
- 1. The manager script executes via SSH another python script on the different client nodes.
- 2. The script then spawns several client programs that run against the database.
- 3. While the test is running each client releases some data in a log file in a shared folder.
- 4. At any time during or after the test, the user can execute the report generator which gathers information from the log files and generate a web-based report.
- 5. When the test is running the manager queries the database and gathers information from log files for monitoring purposes.
Installation
Here are the steps to follow to install and configure the framework :
OracleRACLoadTestingInstall
Use the scripts
Start a test
The manager script
is used with one parameter : the test name.
$ ./startTest.py 2007_12_01_COOL_2_2_2
During the test, some monitoring information is displayed on the output. (number of sessions, objects inserted, RAC CPU stats, wait events stats)
You can also use the script
statClients.py
to check the sessions on the RAC.
Generate a report
The script
reportTest.py
needs the same parameter used for
startTest.py
(the name of the test).
You will be asked to fill a little description explaining what is done during this test.
Then it will generate a web page you can visit from the website you created previously.
Abort / stop a test
stopTest.py
allows you to stops the test whenever you want. The parameter is still the test name but you can also use the word
clean
to abort the test.
How to create a test case
Input format
The client program may be a Python script or a binary.
If the client program is a binary, you should be sure that all the required environment
variables are set correctly on the client machines and 3 parameters will be given to the client as
parameters:
1. the ID number of the client,
2. the maximum time between each output,
3. the name of the file where to write the results.
For a Python script you can extend the class Client (
client.py
).
Then the script will have access to the configuration variables : clientId, reportPeriod
and logFileModel. They have the same meaning as the parameters provided to the binary version.
The first parameter makes it easier to create a complex scenario when
there is a possibility to identify each client and affect different tasks or parameters to them
depending on this id.
The second parameter allows you to change the refresh feature directly from the
configuration file. It frees the developer from the need of recompiling the client (if in C++ for
example) to lower the output frequency. This kind of operation is needed when we do scaling
tests, increasing the number of clients after each test iteration.
The last parameter is the beginning of the file name where the client should write. It
should append the extension depending on the type of message :
.csv
for the result file and
.err
for the error file.
Output format
The specification for the output file is described bellow. It allows the framework to compute this file during the test for monitoring purpose and after for analysis. The client should write the output into the file identified by the third parameter.
Note that the AFS operating mode requires the client to open and close the file for each line written into the file so it triggers a synchronisation with the other machines. The CSV format is the most relevant format in this case. It also allows to open the file with a spreadsheet application. The data structure is an array composed of different columns such as:
Note that the total would be an average in case of response time instead of throughput.
A header should be added to the result file, thus it would resemble to something like this:
1178543359.25;0;Num. objects;Total num. objects
1178543369.82;10.567964077;13013;13013
1178543380.03;10.2149808407;18018;31031
1178543390.46;10.4295310974;9009;40040
1178543400.91;10.4497208595;21021;61061
...
Tutorial : testing data insertion with COOL
A quick tutorial explains how to configure and use the framework :
OracleRACLoadTestingTuto