Loadrunner Controller issues



Below are some key facts to remember about controller. (Note: I am publishing some of these issues from my notes which I encountered at different times. I am just consolidating them here.)

The Maximum number of threads for driver. The number of threads per driver has been internally set for each specific protocol. 

Increasing Vuser Limit: 

You can increase the Vuser limit on Windows NT by modifying the load generator's Windows Registry as follows: 

Open the Windows Registry. 

Select Find>Data and search for the term "SharedSection". 

This search should return a path similar to this: 

MyComputer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ Session Manager\Sub Systems\Windows

Modify the second value to 4096. 

Run-time settings - 
When you modify a script's run-time settings in the Controller, the new settings are saved with the Controller scenario. If, you open the script in VuGen and modify the run-time settings, use the Refresh button in the Controller to see the new settings. 

Compiled Vusers - 

When the Vuser script is a compiled Vuser, the Controller doesn't send the dll to the remote machine. 
Workaround: Add the dll to the list of script files. In the Controller Scripts tab, right-click on your script name and select Details. In the Files tab, click Add and point to the dll. This will add your dll to the list of files to be transferred with the script. 

You may receive the following error message when launching the Controller: "Cannot install license information, probably access to system resource was denied." This indicates that you need to log in with administrator permission, since you installed the product with administrator permission. 

Workaround: Run setlicensepermissions.exe from the LoadRunner bin directory to change the registry permissions. 

Environment variables on load generator machines - If you change the value of an environment variable on a load generator machine and you configured the load generator to automatically run virtual users, restart the machine to use the new value of the environment variable. 

Output window - Keeping the Controller Output window open for long periods of time will affect the machine's memory usage.

VB Script VUser Protocol - Essbase Hyperion Application

Recently I had a challenge with Essbase Hyperion application. Application Characteristics: One should install Essbase Client on their machine and should have MS Excel 2003/2007. 

The communication to the DB happens via excel. Essbase client appears as Addin from Excel. I could not use Oracle 2 tier or ODBC protocols. The communication to the dB is not via SQL queries. 

Then I tried Winsock. I could able to develop a script but building scripts for mutliple drill downs that client requested became a pain. 

So adopted VB Script VUser Protocol and I could successfully able to run the tests in PC11. If you want to know how I could able to build scripts for this application please go through this document.

Analysis - Comparing data from LoadRunner Graphs with Raw Data

The below post includes what kind of questions a Performance Engineer may encounter during Analysis session for a detailed oriented and curious client.

Performance Engineer:
I provided the Transaction Response time summary Report and shown different Graphs to the customer

Client:
I would like to have the raw transaction times (number shown in "Pass" column). This means a Transaction passed for 50 times during the test, they want to see the response times of each of the 50 passed transactions.

Performance Engineer:
I provided the Response Times of the two transactions client requested with time stamps.

Client:
What is the difference between first Buffer Time and Over All Response time?

Performance Engineer:
The First Buffer Time is always less than the Overall Response time
what we see in the Response times graph is the TIME When Response Completed. It will be obviously more than that of First Buffer Time.
Please refer the below diagram.


Client:
Thank you for the raw data and the above explanation  Could you please verify that all data points were    included as I cannot match the numbers in the spreadsheet? On the spreadsheet it shows that there were 19 data points for the Transaction1 and 18 data points for Transaction2 yet only 17 data points are available for each in the Raw Data why?

In addition, I cannot see the corresponding entry that matches the value of the maximum number displayed in the summary spreadsheet for either transaction.

The only number that I can currently match is the minimum number. Please let me know if there are other data points that need to be included.

Performance Engineer:
I provided the raw data for the login the Graph. Now I am getting you the Real Raw data from data points.

There is a difference between these two raw data (Real Raw data and Graphed Raw Data)
For Example: In Real raw data, you see two values at 36 seconds. During that 36th second of the Test run two users took 26 sec and 23 seconds respectively.

The Graphed Raw data shows the average of these response times that happened at fraction of seconds. (Because our granularity is only 1 second We cannot go more granular than 1 second)
Average of 26.738 and 23.211 = 24.975. This is what you are seeing in the Graph and But in summary you are seeing 26.738. This value is based on Real Raw data.


Coming to the question, Why we are not able to map the max values to the Maximum data point in Summary? The Web Page component Break down graph is also Average of different users activity at different point. So if you try to map the Max value in Summary with Max value in Web Page Break down Graph we are not mapping same values. Because, they might not occurred at the same time.

What the Response Time Summary shows is pretty much clear. 90 percentile shows how many transactions are below that particulat data point. If the 90 percent column is exceeding your SLA, then we have to correlate it with the Standard Deviation. If deviation is high. Then we need to go to the specific Graph and observe the trend to see where the deviation occurred.

Difference in Response times with Different LoadGenrators. Why?

I recently encountered this issue and the below solution fixed this issue

Issue:
The response times of transactions for the users generated from a Load Generator on Windows 2003 are lower then the response times of the same transactions from Users generated from a Load generator on Windows 2008 R2

Solution:
Perform this on Load generator on Windows 2008 R2

1. Control Panel> User Accounts >Turn User Account control on or off> Uncheck the Check Box with Name: User Account Control Box On to protect your computer


2. Add SSL Certificate:

a. Go to Fire Fox that is in the Bin dir (if it is for Ajax True Client)
b. Open it> Tools > Options>Advance>View Certificate> Add Certificate
c. How will I get Certificate?
Play the application manually on this box. Then certificate may be downloaded in that location.

3. Turn Off Fire Wall

WINSOCKET PROTOCOL IN LOAD RUNNER

When your application is not supported by any Loadrunner protocols. Since most network protocols use Winsock an interface, we would be able to capture almost all application on Windows if we record at theWinsock layer. So we use Winsock when other protocols do not work.

The Below Document shows how to build a Winsock Script with Loadrunner. I also included some Tips and Tricks while using Winsock Protocol




Tips and Tricks
  1. Winsocket in multi-protocol mode does not support UDP.
  2. Winsocket in single-protocol mode does not support asynchronous calls.
  3. You may encounter problems recording in Winsocket, Winsocket/Web or Oracle NCA.
  4. Workaround: Modify the registry key: HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\BrowseNewProcess and make sure that the string value BrowseNewProcess is set to yes. This causes IE to open a new process. If this workaround doesn't work for the Windows2000/2003 server, add the argument "-new" to the Program to Record. This causes IE to open a new process.

Function to write current system Time

This main use of this functions to return the current system time at any given
point of time while load runner script is running.This functiona can be used to
report transaction times , script starti time and end time.

long get_secs_since_midnight(void)
{

char * curr_hr; /* pointer to a parameter with current clock hr */
char * curr_min; /* pointer to a parameter with current clock min*/
char * curr_sec; /* pointer to a parameter with current clock sec */
long current_time, /* current number of seconds since midnight */
hr_secs, /* current hour converted to secs */
min_secs, /* current minutes converted to secs */
secs_secs; /* current number of seconds*/
curr_hr = lr_eval_string("{current_hr}>");
curr_min = lr_eval_string("{current_min}");
curr_sec = lr_eval_string("{current_sec}");
hr_secs = (atoi(curr_hr)) * 60 * 60;
min_secs = (atoi(curr_min)) * 60;
secs_secs = atoi(curr_sec);

current_time = hr_secs + min_secs + secs_secs;
return(current_time);

}

Then these two lines are enough for getting current time.

lr_save_datetime("Today is %H %M %S", DATE_NOW, "curr_time");
lr_output_message(lr_eval_string("{curr_time}"));

lr_save_datetime function in Loadrunner

lr_save_datetime function in Loadrunner

LoadRunner stores date/time parameters locally on the LoadRunner PC. This means that opening a script on another users PC, where the date/time parameter is not stored, can cause corruption to the date/time parameters in a script. You know that this has happened when a date/time parameter in this format [%Y%m%d%H%M%S] is sent to the server rather than the format that you intended.

Due to this problem, It is recommend that the lr_save_datetime function is used to save date or time values to a string. The string can then be used in the script and the script is portable between PCs because we are no longer relying on the locally stored parameters.

Sample code

lr_save_datetime("%d/%m/%y", DATE_NOW, "DDMMYY");
lr_output_message("Today's Date is %s",lr_eval_string("{DDMMYY}"));

lr_save_datetime("%d/%m/%Y", DATE_NOW, "DDMMYYYY");
lr_output_message("Today's Date is %s",lr_eval_string("{DDMMYYYY}"));

lr_save_datetime("%B %d %Y", DATE_NOW, "Today");
lr_output_message("Today is %s",lr_eval_string("{Today}"));

lr_save_datetime("%B %d %Y", DATE_NOW + ONE_DAY, "Tomorrow");
lr_output_message("Tomorrow is %s",lr_eval_string("{Tomorrow}"));

lr_save_datetime("%A", DATE_NOW - ONE_DAY, "Yesterday");
lr_output_message("Yesterday was %s",lr_eval_string("{Yesterday}"));

lr_save_datetime("%A", DATE_NOW, "Today");
lr_output_message("Today is %s",lr_eval_string("{Today}"));

lr_save_datetime("%A", DATE_NOW + ONE_DAY, "Tomorrow");
lr_output_message("Tomorrow is %s",lr_eval_string("{Tomorrow}"));

lr_save_datetime("%X", TIME_NOW , "Time");
lr_output_message("The time is %s (in this locale's date format)",lr_eval_string("{Time}"));

lr_save_datetime("%X", TIME_NOW + ONE_HOUR , "Time");
lr_output_message("In one hour it will be %s",lr_eval_string("{Time}"));

lr_save_datetime("%A", DATE_NOW + ONE_DAY, "Tomorrow");
lr_output_message("Tomorrow is %s",lr_eval_string("{Tomorrow}"));

lr_save_datetime("%j", DATE_NOW, "Today");
lr_output_message("Today is day %s in the year",lr_eval_string("{Today}"));

lr_save_datetime("%Z", DATE_NOW, "TimeZone");
lr_output_message("This machine is in the '%s' time zone",lr_eval_string("{TimeZone}"));

lr_save_datetime("%p", DATE_NOW, "AMPM");

if (strcmp (lr_eval_string("{AMPM}"),"PM")!=0)
{
lr_output_message("Good Morning");
}
else
lr_output_message("Good Afternoon");

Impact of Threadpool Architecture on Application Performance

During the performance Test, the web application is tested to respond in a timely and reliable manner to
simultaneous service requests. The response times of the transactions of these multi threaded applications depend up on thread pool architecture.

Creating and destroying a thread is expensive. It requires run-time memory allocation and deallocation.
These overheads may shutdown the system during high loads.

To minimize the overhead of thread creation and destruction, threads in the pool are reused during multiple requests and the creation and destruction of the thread is minimized to only once per thread not once per request.

Efficient thread management for a given system load depends on Thread pool size.

If thread pool is too large: there will be more unused threads --> idle threads increases then busy threads --> contextswitching increases --> processing and memory resources are wasted to maintain the thread pool

If the thread pool is too small:during peak loads, additional threads must be created and destroyed on the fly to handle new requests-->It requires run-time memory allocation and de allocation.

This causes overhead on the application and impacts the performance and may shutdown the system during high loads.

SAP BUSINESS OBJECTS [SAPBO] PERFORMANCE TESTING

This post explains how SAP BI performance testing is conducted to validate the performance of the the BO reports.

This post explains:
How to login to SAP Business Objects and create reports?
How to design a loadrunner script to simulate the above process for mutliple reports with multiple security groups in a Business Objects Universe.

Business Objects Login
1. Launch the SAP BI URL


2. Business Objects login screen will be displayed

3. Enter your user name & password in the boxes and select Windows AD from the drop down list of Authentication.
User name:
Password :
Athentication : Windows AD 

4. Click on Log on and you should be able to see the Business Objects Infoview page

5. Click on the Document List button to go to Navigation page.

6. Once you click on the Document list the navigation page will be opened

7. My Favorites folder in the navigation page is the user personal folder. Reports saved under this folder are accessible to user only and not visible to other users. Public Folders in the navigation page is the folder accessible to all the users. 8. To open the existing reports under Public Folders, navigate the folder under it and click on the folder name. All the reports available under it will be seen on the right side of the screen and double clicking on the Report name will open the report.

Creating a Business Objects Report 
1. In the Navigation page, select Web Intelligence Document under the drop down list of New
2. Depending on the user access, list of universes will be displayed. Select the universe by clicking on the Universe name to develop a report.
3. Once you click on the universe, query panel will be opened with all the universe dimensions
There will be three sections in the query panel.
Data tab: Left side of the panel is called data tab and shows the universe objects.
Result Objects: This section is used to include data in the report. To include data, select objects from the data tab and drag them here and click Run Query to return the data to the report.
Query Filters: This section is used to filer the query. To filter the query, drag objects here and then use the Filter Editor to define custom filters.
4. To develop a report, select objects and drag them to Result Objects section.
5.Click on the Run Query to return the data to the report
Report with selected data will be displayed
To add filter conditions to the report, go back to query panel by clicking on Edit Query button.
6.Drag and drop the object you want to apply filter on in Query Filters panel.
Select the filter condition from the drop down list
Enter the value OR select the Type of values from the list
7.Selecting Values from the list will display the values of the object to be selected.
select the value from the list and click on ‘ > ‘ button and click on ‘ OK’.
8. Click on the ‘Run Query’ button (available on top right corner of the page). This returns the data filtered by Node Description. 9. Reports can be saved to excel or pdf by selecting the option from save button(available on top left corner)

Requirements: The client wants to know
The response times of mutliple BO Reports for each security group.
Want to see response time of each report for every security group. The name of the security group should appear on each Transaction Name.
Quantity of the reports are in around 70-100 and security groups are around 6-9

Design:
In this case the script should be designed in a efficient way by considering following standards
Naming Convention.
Create a single script by consolidating mutliple scripts and writing functions. This makes script manitenance easy.
Apply inheritance - Write functions and use them in the script in multiple areas where ever required. In this way we can minimize script lenghth.
We see more dynamic data in these kind of applications identify and apply correlations in efficient way.
Precausion should be taked while creating Parameter file and while calling the parameters

Below example shows how a Load runner script is developped for SAP BO reports.

It concatinates the security group name(Utype) of the each user in the parameter file along with the transaction Name.




In SAP BI, There might be some prerequisite you should consider before running a script. below are some I had to do. 



The users are differentiated by passing a new parameter value, "User type"






The script executes 5 iterations. During each iteration it randomly picks one report and executes

How SAML -Open SSO works?

Example: A user logs into an application A and then clicks a link from Application A. Then He see information he is expecting from application B. when we simulated this transaction from load runner. The response time of the link is too high.

when I analyzed the communication of the click. I found the complete design behind the link.
and thought of implementing some component leve performance testing measure the latency of LDAP and SAML communication.

These two applications A and B can be B2B applications protected by firewalls of the respective clients. To pass information these two clients is a challenge. This issue is addresses using SAML and LDAP.

SAML is an XML standard for exchanging security-related information, called assertions, between business es over the web. The assertions can include attribute statements, authentication, decision statements, and authorization decision statements.

LDAP, the Lightweight Directory Access Protocol, is a protocol used to access a directory listing.

In the above example,

User Login to the Application A which is firewall protected by business A. 
Then he clicks a link. 
SAML Encrypted token is generated 
This is posted to a url of Business B Https://XXX.businessB.com in encrypted format 
The OIF which is associated with This URL Picks the encrypted SAML Token 
OIF does the following 
Decrypts this Token 
Verify Signature 
Finds SSN. 
It uses SSN to find Userid. To find the userID using SSN, LDAP is used. 
Identifies user associated with the SSN 

OAM comes in to Picture here. OAM Logs the user into the Application B and creates a new Session

as all these tasks are happening behind the scenes the response time is little higher than a normal clicks.

I will explain in the next post How I conducted performance Testing to find the response times of SAML communication and LDAP.

Creating Data For PeopleSoft in Load runner

When working with Peoplesoft GL application, I have to create multiple LR scripts to create data to support the performance testing. In the below example, I created a small script that creates Ledger Files with 5000 lines so that I can import them in to Peoplesoft GL module via a macro enabled spreadsheet. I used basic C functions to create this script. This sample script template can be leveraged to us create text files in multiple ways.

LoadRunner 11.50's licensing mechanism has changed

If you're like me and can't wait to have the latest and greatest version of software on your machine, you should be aware that, unlike previous upgrades, LR 11.50 has been modified to requires a new license.

Since current LoadRunner users cannot continue to use their existing licenses, you will need to generate a valid new one.

To Request a License

To Request a License you'll need to:
Navigate to:https://h20575.www2.hp.com/usbportal/fulfillment/selectedProducts.do?lc=EN_US&said

Select your SAID number, click and LoadRunner under 'Products' and click 'View available products'



Select LR 11.50 and click 'Get Software Update' button



You should now have a tab option for 'Get Licensing'




LR 11.5 Protocol Bundles

If you're requesting a new license, you should also be aware of what the protocol bundles for LoadRunner 11.5 and Performance Center 11.50 are:

Bundle Name
Protocols Included
.Net Record/Replay
Microsoft ADO.NET
Microsoft.NET 2.0, 3.0, and 3.5
WCF (Windows Communication Foundation)
Database
Microsoft SQL Server
ODBC
Oracle(2-tier)
DCOM
Microsoft COM/DCOM
GUI Virtual Users
HP Functional Testing(Quick Test Professional)
Java Record/Replay
CORBA-Java
Jacada
Java over HTTP Vuser

JMS
RMI-Java (Includes ORMI)
Network
DNS
FTP
IMAP
LDAP
MAPI
POP3
SMTP
Tuxedo
Windows Socket
Oracle E-Business
Oracle NCA
Oracle Web Application 11i(Click and Script)
PeopleSoft Enterprise(Click and Script)
PeopleSoft-Tuxedo
Siebel-Web
Remote Access
Citrix Virtual User (ICA)
Terminal Emulation(RTE)
Remote Desktop
RDP
Rich Internet Applications
Action Message Format (includes RTMP/AMF)
AJAX Click and Script
AJAX TruClient-Firefox

AJAX truCLient-IE
Flex Virtual User
Silverlight Vuser
Mobile TruCLient
SAP
SAP Click and Script
SAP GUI
SAP-Web
SOA
MQSeries-Client
MQSeries-Server
Service Test Vuser
Web Services
Web 2.0
Web and Multimedia
RIA and SOA combined
Web and Multimedia
Media Player (MMS)
RealPlayer
Web (Click and Script)
Web(HTTP/HTML)
Mobile Applications Protocol
Wireless
i-mode
MMS
Palm
WAP

WAN Emulation in LoadRunner

WANem is free software. Developed by TCS, published by Free Software Foundation. It can modify or redistributed on terms of GNU General Public License version 2.

Rigorous performance testing and optimization is a critical factor in the successful delivery of any business application. Yet frequently the performance of deployed applications doesn’t live up to business requirements or end-user expectations. One reason behind these unpleasant “surprises” is the fact that most performance staging labs only test the application with local users (in a local area network (LAN) environment), while the fully deployed application is used by a variety of end-users, some local and others accessing the application remotely over different network links. The different network conditions that exist between end-users and application servers have a tremendous effect on the overall performance that remote end-users experience. This deviation from performance test results obtained in the lab is further exacerbated for N-Tier applications where each tier may reside in a different geographical location with its own unique set of network conditions.

Network Emulation tools can be used to accurately replicate existing or projected conditions in the distributed production environment – including infrastructure, application traffic and the distribution of end-users.

To sum up on a high level — the benefits of using WAN Emulation tools are:

  • WANem is a freeware.
  • mitigate applications deployment risk
  •  find errors before deployment
  • test new WAN topologies and technologies
  •  emulate remote users experience
  • stress models of the network to find vulnerabilities
2.1 System Requirements:
Minimum an i386 based PC with 1 CPU, 512 MB RAM and 1 Network interface card – 100 Mbps (preferably 1 Gbps).

2.1 Applications supported by the WANem(but not limited to)

1. Web applications,
2. Video Streaming
3. Interactive applications – telnet like application.

2.2 Setting up WANem

WANem is distributed in the form of a bootable CD with Linux Knoppix O/S. This CD comes with WANem preinstalled. There are no installation steps. When an i386 architecture based PC is booted with the PC WANem is ready for use.

*Refer WANem user guide for more information on launching WANem and usage.

Drawbacks of WANem:


1. Multiple NIC cards when there is need for performing distributed load generation.

2. Dedicated PC required for WANem setup.

3. Network address translation needs to be done when a client application is running on a different network.

4. Cannot be integrated with LoadRunner.

5. Installation is relatively difficult.

Conclusion
WANem is free software and hence cost effective. Advanced network options present in WANem keeps trust and usability of the tool on the same level as of any other contemporary network emulation tool.

wan emulation:


Some times client may not have Load injectors in different geographic locations and want to generate load from different geographic locations and want to simulate the delays associated with a different geographic distribution using the load injectors in the lab. Then we need WANemulation.

Below are some tips while using WAN Emulator.Running WAN Emulation over a firewall:

If the agent connection type is defined as HTTP with proxy, the proxy server must be excluded from WAN emulation. Exclude the proxy server using the Load Generators > Details > WAN Emulation dialog.

WAN Emulation does not support the token-ring and Ethernet-token ring hybrid interfaces.

The WAN Emulator driver installation will disconnect your open network connections.

To uninstall the WAN Emulator driver, run UninstallWanDriver.bat from the WANEmulator directory on the LoadRunner CD.

To reset the WAN Emulator driver, run msh_reset.exe from the LoadRunner bin directory, or from the WANEmulator directory on the LoadRunner CD.

It is recommended not to install the Network Analyzers software on the same load generator machine where WAN emulation resides. This may cause false readings and affect measurements.

Sap Web Protocol in Load Runner

Things to correlate in a SAP Web LoadRunner Scipt


I have been doing some SAP web scripting this week and although have been using the SAP Web protocol I have noticed that we still need to do manual correlation.
These are the 3 things I need to correlate:

ClientWindowID e.g WID1339591301202

This is not specifically a parameter that needs correlation but it a value generated in client side JavaScript which is basically the Unix time including milliseconds. Lucky there is a LoadRunner function that generates this. web_save_timestamp_param("pWID",LAST);

sap-wd-secure-id e.g. 30b66c21b9fd11e1bd5f000005ee7aaa5408212193

I have noticed that this parameter does change in some scripts I have written so be careful to extract out appropriately. This is the code I used to extract out the parameter:

web_reg_save_param("pSecureID",
"LB/IC=sap-wd-secure-id=",
"RB/IC=&",
"Ord=1",
"Search=Body",
"RelFrameId=1",
LAST);

wi_id e.g. 000003799238

This parameter appears when a window is spawned.
web_reg_save_param("pWi_id",
"LB/IC=wi_id%3D",
"RB/IC=\"",
"Ord=1",
"Search=Body",
"RelFrameId=1",
LAST);

Sap Gui Protocol in loadRunner

Approach to Create SAP GUI script with Load Runner 11.5

Improved VuGen have
Recording 64bit Applications.
Improved Correlations.
Integrating Virtualized Services .
Web Protocol Asynchronous Support. 


Planning:

1 Plan the Features that need to be considered under Load Test.
Plan the Protocol that is essential.
3) Plan the statistics of responses.
4) Plan the statistics that need be parameterized and Looping.
5) Take the Bench Marks of the single user request and Responses.
6) Plan about dynamic data that need to seized and correlated for the successful running of VUGEN.




7) Plan for Control , the actual Load Test for VUser


1) Goal Oriented Scenario or a Manual scenario.
2) Select the Ram Up.
3) Execute the Test.
4) Analysis the results.


Scripting:
Scripting:
Record the Script.
Divide the script into Action and Name them.
Ex : Login_Admin , Search_10_Users, Update_5_Users , Logout_Admin.
Enhance the script (Parameterization, Inbuilt Function, Logic)
Correlation if needed. (If it is a SAP WEB script).
Run The Script: Mark the Truncation Times , make sure it not Failing .
Define Run logic (hierarchy of Blocks and Actions and number of interactions for both Actions and Blocks).

Approach to Create SAP GUI script

1) Select the protocol as “SAP GUI”.



2) Hit on Record button to select “Windows”
Now provide the 'SAP Login' exe file path in below 'Application to record' field .
and then just place the cursor at Working Directory Test field and click.

Now you can see the “Start Recording” Button gets enabled.


3) Not hit “Start Recording” and log into the sap GUI and do the required truncations or action.
4) While recording divide the actions based on the functionality.
5) Parameterized the below value Carname as shown.



6) Used below functions to generate the sample script
/* -------------------------------------------------------------------------------
Script Title : SAP GUI sample


Script Description : Record and Play


Recorder Version : 2216


Created By : Saka Amar .
------------------------------------------------------------------------------- */

vuser_init()
{

sapgui_open_connection_ex(" /SAP_CODEPAGE=1100 /FULLMENU /H/ides.consolut.eu/H/n4sexternal 01 /3 /UPDOWNLOAD_CP=2",
"LR",
"con[2]");

sapgui_select_active_connection("con[2]");

sapgui_select_active_session("ses[0]");

sapgui_select_active_window("wnd[0]");

sapgui_window_resize("187",
"25",
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui104",
END_OPTIONAL);

/*Before running script, enter password in place of asterisks in logon function*/

lr_think_time(25);

sapgui_logon("DEVELOPER",
"qtbg",
"500",
"EN",
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui1015",
END_OPTIONAL);

lr_think_time(8);

sapgui_set_ok_code("/OSE93",
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui1016",
END_OPTIONAL);

sapgui_press_button("Enter",
btn1,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui1017",
END_OPTIONAL);

sapgui_select_active_session("ses[1]");

sapgui_select_active_window("wnd[0]");

sapgui_window_resize("187",
"25",
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui204",
END_OPTIONAL);

sapgui_send_vkey(F4,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui205",
END_OPTIONAL);

sapgui_select_active_window("wnd[1]");

sapgui_window_scroll_to_row("0",
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui209",
END_OPTIONAL);

sapgui_set_focus(lbl1,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui208",
END_OPTIONAL);

sapgui_send_vkey(F2,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui2012",
END_OPTIONAL);

sapgui_select_active_window("wnd[0]");

sapgui_press_button(" Display",
btn2,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui2015",
END_OPTIONAL);

lr_think_time(8);

sapgui_press_button("Test (F8)",
btn3,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui2018",
END_OPTIONAL);

sapgui_send_vkey(F4,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui2021",
END_OPTIONAL);

sapgui_select_active_window("wnd[1]");

sapgui_window_scroll_to_row("0",
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui2025",
END_OPTIONAL);

sapgui_set_focus(lbl2,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui2024",
END_OPTIONAL);

sapgui_send_vkey(F2,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui2028",
END_OPTIONAL);

sapgui_select_active_window("wnd[0]");

sapgui_press_button(" Display",
btn2,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui2031",
END_OPTIONAL);

sapgui_status_bar_get_text("paramStatusBarText",
BEGIN_OPTIONAL,
"Recorded status bar text: Fill in all required entry fields",
"AdditionalInfo=sapgui2034",
END_OPTIONAL);

sapgui_send_vkey(F4,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui2035",
END_OPTIONAL);

sapgui_select_active_window("wnd[1]");

sapgui_window_close(
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui2038",
END_OPTIONAL);

lr_think_time(5);

sapgui_select_active_window("wnd[0]");

sapgui_set_ok_code("/OSE93",
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui2041",
END_OPTIONAL);

sapgui_press_button(" Display",
btn2,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui2042",
END_OPTIONAL);

sapgui_status_bar_get_text("paramStatusBarText",
BEGIN_OPTIONAL,
"Recorded status bar text: Fill in all required entry fields",
"AdditionalInfo=sapgui2045",
END_OPTIONAL);

sapgui_set_ok_code("/OSE93",
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui2046",
END_OPTIONAL);

sapgui_press_button("Enter",
btn1,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui2047",
END_OPTIONAL);

sapgui_select_active_session("ses[2]");

sapgui_select_active_window("wnd[0]");

sapgui_window_resize("187",
"25",
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui304",
END_OPTIONAL);

lr_think_time(10);

sapgui_set_text("Transaction Code",
"ZALV_REPORT",
ctxtTSTC1,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui305",
END_OPTIONAL);

sapgui_press_button(" Display",
btn2,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui307",
END_OPTIONAL);

lr_think_time(4);

sapgui_press_button("Test (F8)",
btn3,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui3010",
END_OPTIONAL);

sapgui_grid_select_cell_row("5",
shell1,
"5",
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui3013",
END_OPTIONAL);

sapgui_grid_select_rows("5",
shell1,
"5",
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui3014",
END_OPTIONAL);

sapgui_grid_double_click_current_cell("(5, Airline Code)",
shell1,
BEGIN_OPTIONAL,
"CurrentRow=5",
"CurrentCell=CARRID",
"AdditionalInfo=sapgui3015",
END_OPTIONAL);

sapgui_grid_select_cell_row("10",
shell1,
"10",
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui3018",
END_OPTIONAL);

sapgui_grid_select_rows("10",
shell1,
"10",
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui3019",
END_OPTIONAL);

sapgui_grid_double_click_current_cell("(10, Airline Code)",
shell1,
BEGIN_OPTIONAL,
"CurrentRow=10",
"CurrentCell=CARRID",
"AdditionalInfo=sapgui3020",
END_OPTIONAL);

sapgui_grid_select_cell_row("16",
shell1,
"16",
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui3023",
END_OPTIONAL);

sapgui_grid_select_rows("16",
shell1,
"16",
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui3024",
END_OPTIONAL);

sapgui_grid_double_click_current_cell("(16, Airline Code)",
shell1,
BEGIN_OPTIONAL,
"CurrentRow=16",
"CurrentCell=CARRID",
"AdditionalInfo=sapgui3025",
END_OPTIONAL);

lr_think_time(10);

sapgui_press_button("Sort in Ascending Order (Ctrl+F4)",
btn4,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui3028",
END_OPTIONAL);

lr_think_time(9);

sapgui_select_active_window("wnd[1]");

sapgui_press_button("Add Sort Criterion (F7)",
btnAPP_WL_SING1,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui3031",
END_OPTIONAL);

lr_think_time(4);

sapgui_press_button("Transfer (Enter)",
btn1,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui3034",
END_OPTIONAL);

lr_think_time(6);

sapgui_select_active_window("wnd[0]");

sapgui_press_button("Sort in Ascending Order (Ctrl+F4)",
btn4,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui3037",
END_OPTIONAL);

sapgui_select_active_window("wnd[1]");

sapgui_grid_select_rows("'Column Set', 0",
shell2,
"0",
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui3040",
END_OPTIONAL);

sapgui_press_button("Add Sort Criterion (F7)",
btnAPP_WL_SING1,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui3041",
END_OPTIONAL);

sapgui_press_button("Transfer (Enter)",
btn1,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui3044",
END_OPTIONAL);

lr_think_time(7);

sapgui_select_active_window("wnd[0]");

sapgui_press_button("Sort in Ascending Order (Ctrl+F4)",
btn4,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui3047",
END_OPTIONAL);

sapgui_select_active_window("wnd[1]");

sapgui_grid_select_cell("'Sort criteria' (1, @3F@)",
shell3,
"1",
"DOWN",
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui3050",
END_OPTIONAL);

sapgui_grid_select_rows("'Sort criteria', 1",
shell3,
"1",
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui3051",
END_OPTIONAL);

sapgui_grid_click_current_cell("'Sort criteria' (1, @3F@)",
shell3,
BEGIN_OPTIONAL,
"CurrentRow=1",
"CurrentCell=DOWN",
"AdditionalInfo=sapgui3052",
END_OPTIONAL);

sapgui_press_button("Transfer (Enter)",
btn1,
BEGIN_OPTIONAL,
"AdditionalInfo=sapgui3055",
END_OPTIONAL);

return 0;
}


Improved VuGen:
The VuGen user interface has been improved and enhanced to provide a more flexible and customizable user experience. An all new IDE makes LoadRunner scripting easier and more productive.
New look and feel – Flexible panes, layouts, and more
Solution Explorer – An easier way to group multiple scripts, access script items, and perform script-related operations.



Snapshots – Multiple views, improved performance, snapshot synchronization, and search functionality.


Improved editor – Context-sensitive support, code completion support, and provides enhanced coloring and formatting.

Debugger – Real C language debugger.

Search and replace – New capabilities include search in log and snapshots.



Step navigator – The new Step Navigator replaces the tree view, providing a single view of the script with easy filtering and search mechanisms.



New panes – Errors, Tasks, and Bookmarks panes display all errors, messages, and tags in simple, easy to locate views.


Join the Community – Community integration provides easy access to conversations and threads in the HP Software Community.

Improved Correlations:
A new response correlation capability has been added so correlation is easier and faster. Correlations can now be found based on server responses during recording, in many cases eliminating the need to replay iteratively to find dynamic values. Coupling this with the new Correlation Studio interface and new APIs for locating parameters based on XPath and Regular Expressions, makes scripting easier and faster
Recording 64bit Applications :
Recording of 64bit applications has been added to the existing support for 64bit operating systems. 64bit applications can usually be recognized when the ‘*32’ suffix is not displayed in the Windows Task Manager for their process. Replay is in 32bit.

Integrating Virtualized Services :
Integrate with HP Service Virtualization, and use simulated services, to facilitate load testing business processes that contain services that are not readily available or too costly. As part of your performance test, you may want to test applications that depend on other services which are a part of your business scenario. Instead of loading actual services, you can use simulated services in your test run. The virtualized services are a simulation of actual services. To facilitate performance testing business processes that contain services that are not available, Performance Center integrates with HP Service Virtualization. Using simulated services in your test is helpful if using actual services involves an additional cost or requires the service of an application that is under development or inaccessible at the time when you run your performance test.

Web Protocol Asynchronous Support :

Support for asynchronous behavior has been added. This new capability enables recording of Poll, Long Poll, and Push interactions.
Advanced Web applications contain a lot of asynchronous communication designed to keep information current and up to date. Applications such as chat, messaging, stock tickers, and news updates all use various asynchronous mechanisms such Poll, Long Poll, and Push to maintain data. Support for these mechanisms has been added to Web (HTTP/HTML) Vuser scripts, and web-based functions inside Flex, Silverlight, and Web Services Vuser scripts. These unique communication patterns are recognized automatically and the recorded script is updated accordingly.