Back to Blog
Back to Blog
VuGen: Measure transaction timings in milliseconds
Posted on Mar, 2009 by Admin
Let’s say you are testing a web application and the service level agreement of response times for each web page is 1.5 seconds or below. You might want to automatically fail any transaction that comes back in a longer amount of time. You will need to measure the number of milliseconds in the transaction, and see exceeds this amount. You might need to set something like this up for any transaction where timing for milliseconds is crucial. Just because the business process passes, does not mean the transaction should pass, especially when there is a service level agreement in place.
/*
This function will get the current time in milliseconds.
First, setup 3 parameters in LoadRunner called milliseconds, hours, and minutes with the following formats:
1. milliseconds %s.000 will return seconds.milliseconds of the current time
2. hours %H will return the hour portion of the current time in military formatrmat
3. minutes %M will return the minutes portion of the time set them to update on each occurrence
*/
long int get_time()
{
int milliseconds, seconds, minutes, hours;
long int totalMilliseconds;
//these chars are set 1 byte bigger to account for the null zero
char temp[7], tempSecs[3], tempMilliseconds[4];
//temp = SS.MMM, tempSecs = SS, tempMilliseconds = MMM
sprintf(temp, "%s", lr_eval_string("{milliseconds}"));
memset(tempSecs, sizeof(tempSecs), '\0');
strncpy(tempSecs, temp, 2);
//copy 2 characters from tempSecs to temp
seconds = atoi(tempSecs);
//add 3 to temp and get millisecond portion
memset(tempMilliseconds, sizeof(tempMilliseconds), 0);
strncpy(tempMilliseconds, temp+3, 3);
milliseconds = atoi(tempMilliseconds);
//Get current hours
hours = atoi(lr_eval_string("{hours}"));
//Get current minutes
minutes = atoi(lr_eval_string("{minutes}"));
lr_output_message("This is the current time %02d:%02d:%02d.%03d", hours, minutes, seconds, milliseconds);
//Compute milliseconds
totalMilliseconds = (hours * 3600000) + (minutes * 60000) + (seconds * 1000) + milliseconds;
lr_output_message("This is the current time in milliseconds {%ld}", totalMilliseconds);
return (totalMilliseconds);
}
/*
Here is how you would use the script in LoadRunner:
You will need to set up two integer variables in your main action file at the top. For this example I am going to set up one called startTime and one called CurrentTime:
*/
int startTime, currentTime;
//Get the current time and save into the variable startTime:
startTime = get_time();
// now start a transaction:
lr_start_transaction("MainPage");
// then put all the statements that should be within that
// transaction. Here we are only going to have one web_url():
web_url("somewebpage", "URL=http://www.web.com", "RecContentType=text/html", LAST);
// before you end the transaction, get the current time with
// get_time() again and store into currentTime
currtentTime = get_time();
// set up an "if" statement to determine if you should manually
//fail the transaction or let it pass
if (currentTime - startTime > 1500)
{
lr_end_transaction("MainPage", LR_FAIL);
}
else
{
lr_end_transaction("MainPage", LR_PASS);
}