Thursday 28 November 2013

Make your NOTEPAD into a Dairy

This will be useful for those people who use notepad to write down any info on a day to day basis.

Steps:
* Open a notepad and type ".LOG" (case sensitive) as the first line.
* Save and close the file.
* Double-click the file to open it and notice that Notepad appends the current date
and time and places the cursor on the next line.
* Type your notes and then save and close the file.


So now each time you open the file, it will be appending the time and date and placing the cursor below it. So now your notepad simply serves as a virtual diary!

How to set jdbc connecton pool in weblogic10

Below are the steps:

  1. click on environments
  2. click on services
  3. click on JDBC
  4. click on DataSources
  5. click on jdbcdatasource-0(that is user defined)
  6. click on connection pool
  7. enter values of intial capacity(that is no of db connections used for initially)
  8. enter value of max capacity(that is max db connections used by app server)












capacity increment is for db connections after reaching the initial connections then connections incrementation

How to set session timeout in weblogic

This is code presents in weblogic.xml in weblogic installation folder



CookieMaxAgeSecs
-1


InvalidationIntervalSecs
60


TimeoutSecs
3600


CookieName
ADMINCONSOLESESSION




false
-1
true
true

sga and pga in oracle database

Shared pool in sga in oracle memory
It is a Shared portion of the Sga it contains the Library Cache and Dictionary cache
Library Cache: The library cache contains the current SQL execution plan information. It also holds stored procedures and trigger code.

Dictionary cache: The dictionary cache stores environmental information, which includes referential integrity (like primary key etc), table definitions, indexing information, and other metadata stored within Oracle's internal tables.

To change the shared pool in Sga in oracle
1 open the file using notepad SPFILEXE.ORA in this location C:\oraclexe\app\oracle\product\10.2.0\server\dbs
2 find the parameter of shared_pool_size=88080384(the value is in bytes)
give the required memory for shared pool


Buffer Cache in sga in oracle memory
It is also called DB Buffer Cache.The DB buffer cache is read the data from datafiles.
Datafiles: Datafiles store the information contained in the db(i.e our tables,views…. data)

To change the Buffer Cache in Sga in oracle
1 open the file using notepad SPFILEXE.ORA in this location C:\oraclexe\app\oracle\product\10.2.0\server\dbs
find the parameter of db_cache_size=176160678 (the value is in bytes)
3 give the required memory for shared pool

Setting the Sga and Pga

1open the file using notepad SPFILEXE.ORA in this location C:\oraclexe\app\oracle\product\10.2.0\server\dbs
2sga_target=314572800 (to set sga memory using this parameter)
pga_aggregate_target=90M(to set pga memory using this parameter)

lr_get_debug_message

The lr_get_debug_message() is returns the current log settings of the script.

The returned value is saved in a unsigned int varible.

Example:
unsigned int log_options;
log_options=lr_get_debug_message();
lr_output_message("The current log setting value is%d",log_options);

Answer:
The current log setting value is 4
so the current log setting is LR_MSG_CLASS_PARAMETERS


Log Level C Constant Value
-------------------------------------------------------------------------------------------------------------
Disabled LR_MSG_CLASS_DISABLE_LOG                                              0
--------------------------------------------------------------------------------------------------------------
Brief LR_MSG_CLASS_BRIEF_LOG                                                         1
------------------------------------------------------------------------------------------------------------
Extended Log LR_MSG_CLASS_EXTENDED_LOG                                16
--------------------------------------------------------------------------------------------------------------
Result Data LR_MSG_CLASS_RESULT_DATA                                        2
--------------------------------------------------------------------------------------------------------------
Parameter Substitution LR_MSG_CLASS_PARAMETERS                         4
-----------------------------------------------------------------------------------------------------------------
Full Run-Time Trace LR_MSG_CLASS_FULL_TRACE                             8
----------------------------------------------------------------------------------------------------------------
Log on Error LR_MSG_CLASS_JIT_LOG_ON_ERROR                          512
--------------------------------------------------------------------------------------------------------------

Depend upon the value that is retrieved using lr_get_debug_message() we can say the current log settings

Example:
Action()
{

logs_on()
{
lr_set_debug_message(LR_MSG_CLASS_EXTENDED_LOG, LR_SWITCH_ON );
}
-----------------------
-----------------------
-----------------------
void logclear(void)
{
unsigned int log_options = lr_get_debug_message();
lr_set_debug_message(log_options, LR_SWITCH_OFF);
lr_output_message("The current log value is %d",log_options);
return 0;
} }
Answer:

The current log setting value is 16

How to set JVM Heap Memory

1) After Installing the weblogic10 then search the file setDomainEnv.sh in weblogic installation folder

2) open in notepad or editplus what ever the tool is

3)WLS_MEM_ARGS_64BIT="-Xms256m -Xmx512m"
export WLS_MEM_ARGS_64BIT
WLS_MEM_ARGS_32BIT="-Xms256m -Xmx512m"
export WLS_MEM_ARGS_32BIT


-Xms256m(is intila size of heap)

-Xmx512m(is max size of heap)

update these values as per requirement

We can also set perm size of heap meory

MEM_PERM_SIZE_64BIT="-XX:PermSize=128m"
export MEM_PERM_SIZE_64BIT

MEM_PERM_SIZE_32BIT="-XX:PermSize=48m"
export MEM_PERM_SIZE_32BIT

web_set_user function in load runner

The proxy server evaluates the user request according to the filtering rules for ex: the filters may IPaddress or protocol. If the requests is validated by filter, the proxy server provide resources by connecting to the relevant server and requesting the service on behalf of the client.

proxy options in run time settings: 

1)No Proxy: All vusers should use direct connections to the internet so the connection made without proxy

2) Obtain proxy settings from the default browser : All vusers use the proxy settings of the default browser from the machine upon which they running

3) use custom proxy: All vusers use a custom proxy server. you can supply the actual proxy server details in runtime settings some times the request doesn't identify the proxy settings at that time we can
write manually

To supply the details of the server that is IPaddress or hostname, port no. You can specify one proxy server for all HTTP sites.

After providing proxy information , you can specify authentication information for proxy servers

To find the error like Error -26547: Authentication Required
This error occurs bcz our request not connect to the server so we can useweb_set_user()

syntax:
int web_set_user(const char * username, const char * password, const cahr *host:port);

Example:
web_set_user("dashwood","myaccount","student:8080");

In the above example dashwood is username of the server
myaccount is password of the server , student is hostname of the server machine and 8080 is port no of the server machine

EX:

vuser_init()
{
web_set_proxy("student:8080");

web_set_user("dashwood","myaccount","student:8080");
}


web_set_proxy() is a service function it forward the user request to the particular proxy server

web_set_proxy("student:8080");
web_set_user("dashwood","myaccount","student:8080"); These functions also write in before web_url() and web_submit_data()

web_set_user() is overrides the runtime proxy authentication settings for username and password. This function is supported for all web scripts and WAP scripts running in HTTP mode only.

How to set JDBC connection pool in WEBLOGIC Manually

JDBC connection pool in WEBLOGIC SERVER Manually:

These attributes are used to set the jdbc connection settings

Initial Capacity:
The no of physical db connections to create when creating the connection pool
Min:0
Max:2147483647
Default:1
Attribute:IntialCapacity

Maximum Capacity:
Max no. of physical db connections that contain in connection pool. Different JDBC drivers and db servers may limit the no .of possible physical connections
Min:1
Max:2147483647
Default:15
Attribute:MaxCapacity

Capacity Increment:
Increment by which the connection pool capacity is expanded. When there are no more avilablae physical connections to service requests, the connection pool will create this number of additional physical db connections add them to the connection pool.

Min:0
Max:2147483647
Default:1
Attribute:CapacityIncrement

To set these values in Weblogic manually

To open the file Jdbc_Data_source_0_3401_jdbc.xml in
D:\oracle weblogic\middleware\user_projects\domains\base_domains\config\jdbc



1
15
1
300
SQL SELECT 1 FROM DUAL
10
LRU
1

How to set thread pool in weblogic server

Steps to set thread pool in weblogic:
  • click on Environment in weblogic admin console
  • click on worker manager
  • click on new
  • select worker manager
  • give the name of worker manager,like Name: elrrmanager
  • click on next
  • check the admin server dialogue box
  • click on finish 
  • After creating the worker manager then
  • click on myworkermanager
  • click on new in Min Thread Constrsint
  • give name and count of min thread count as Name: minthreads
  • count: 1 
  • click on next
  • check the adminserver dialogue box
  • click on finish
  • click on save 

We will also configure Maximum Thread Constraint and Capacity Constraint same process as above
























NOTE:
worker manager is not application specific but is mapped by my application in weblogic.xml

lr_set_debug_message() in Load Runner

lr_set_debug_message:
  • By using lr_set_debug_message() function we can manually set the log options in the vuser script
  • By using lr_set_debug_message() to dispaly only a certain portion of the log generated.
  • We can place the lr_set_debug_message before the code in Action() method and close as per requirement.

Ex:
Action()
{
lr_set_debug_message(LR_MSG_CLASS_EXTENDED_LOG, LR_SWITCH_ON);
------------------------------------------------------
-------------------------------------------------------
-----------------------------------------------------
lr_set_debug_message(LR_MSG_CLASS_EXTENDED_LOG, LR_SWITCH_OFF);
return 0;
}

Each logging option has separate  C-constant 
Log LevelC ConstantValueBinary Value
DisabledLR_MSG_CLASS_DISABLE_LOG000000000 00000000
BriefLR_MSG_CLASS_BRIEF_LOG100000000 00000001
Extended LogLR_MSG_CLASS_EXTENDED_LOG1600000000 00010000
Result DataLR_MSG_CLASS_RESULT_DATA200000000 00000010
Parameter SubstitutionLR_MSG_CLASS_PARAMETERS400000000 00000100
Full Run-Time TraceLR_MSG_CLASS_FULL_TRACE800000000 00001000
Log on ErrorLR_MSG_CLASS_JIT_LOG_ON_ERROR51200000010 00000000

NOTE:Before writing these functions in your script first to disable the log in runtime settings otherwise you can't ddifferentiate the log settings (click F4)

We can also write multiple parameters in lr_set_debug_message() function by separated using " | "

These constants are integer type variables and return type is unsigned int
By using these C constants we can set different log options

The lr_set_debug_message() is also written in function and palce the function inglobals.h and call those functions in Action() method

EX:(This code is in globals.h)
#ifndef _GLOBALS_H
#define _GLOBALS_H

//--------------------------------------------------------------------
// Include Files
#include "lrun.h"
#include "web_api.h"
#include "lrw_custom_body.h"

//--------------------------------------------------------------------
// Global Variables

#endif // _GLOBALS_H

logs_on()
{
lr_set_debug_message(LR_MSG_CLASS_EXTENDED_LOG |LR_MSG_CLASS_RESULT_DATA| LR_MSG_CLASS_PARAMETERS , LR_SWITCH_ON );
}
logs_off()
{
lr_set_debug_message(LR_MSG_CLASS_EXTENDED_LOG |LR_MSG_CLASS_RESULT_DATA| LR_MSG_CLASS_PARAMETERS , LR_SWITCH_OFF );
}


call the above functions in Action() method

Action()
{
logs_on()
-----------------------
-----------------------
----------------------
logs_off()
return();
}

Wednesday 27 November 2013

How to record script in Loadrunner VUGen using Firefox

As we see LoadRunner gives choice to record script for two type of applications:
1. Internet Application (Using IE browser)
2. Win 32 Application

So, what if you want to record script using Firefox. There is way to do it LoadRunner

Steps to create VUGen script using Firefox:

1. Click on New
2. Select suitable protocol
3. Choose “Win 32 Application” in window





4. Give the path Firefox IN “Program to record” field,go to C drive-Program files-Mozilla Firefox and select Mozilla.exe
5. Give application URL in “URL Address”
6. Click on “Ok”

Your application will launch using Firefox and ready to record.

How to keep Remote desktop active for Long Duration

While doing testing/monitoring the server, it is common now days to use access server machine using remote desktop (one of best feature I must say). Even while doing manual testing using remote desktop is common these days. Now some time your remote desktop session get expire soon and monitoring get interrupt for tester.

Before, I share that how we can increase session time of remote desktop service. Let me share a basic idea of remote desktop.

Remote desktop service is technique of feature which enables any system user to access other machine of network using proper authentication without reaching out to the system physically.

Many of you of course already know it. Remote desktop is also known as “Terminal Services”.

Terminal service is windows component which can be installed using “Turn on or off windows components” from control panel.

Using “mstsc” cmd command you can open RD (remote desktop) and enter computer information with authentication information and you can easily connect to another system.

To keep remote desktop connection active for long duration:

Step 1: Go to “Administrative Tools->Terminal Services”
Step 2: Go to “Configuration”
Step 3: Open the “Connection” folder using tree view
Step 4: Select “RDP-TCP” and right click on it
Step 5: Select “Properties”
Step 6: Go To “Session” Tab
Step 7: Make sure that “Override user settings” check box is selected
Step 8: Set “idle session time” as max (2 days) from default value (2 hours)
Step 9: Click on “Apply”
Step 10: Click on “Ok” and a confirmation message will appear then click “Ok” to confirm changes of time.

Please note that connection of RDP which are already established before changing above setting will be not impacted by this.

Protocol Adviser in Load Runner

VuGen is one of the components of LoadRunner. It stands for Virtual User Generator. This component is used for creating, modifying and debugging the script. User can script using component in TSL scripting language. Load runner provides various predefined functions which can use to create script.
There are various which can be used which creating script. The first step which required creating a script for any application in VuGen is Protocol information.

Protocol: A means of communication in application. A set of rules followed by application for communication.


Depending on protocol information, you can decide that LoadRunner is suitable tool or not for you application. LoadRunner supports various types of protocols.

Microsoft .NET Protocol
Java Protocol
Java Protocol - Manually Programming Scripts
Enterprise Java Beans (EJB) Protocol
Flex Protocol
AJAX Protocol
AMF Protocol
Citrix Protocol
RDP Protocol
Click and Script Protocols
Web Protocols
Oracle NCA Protocol
SAP Protocols
Java over HTTP Protocol
RTE Protocol
Windows Sockets Protocol
Mailing Service Protocols
Tuxedo Protocols
Siebel Web Protocol
COM Protocol
Database Protocols
LDAP Protocol
Wireless Protocols
SilverLight Protocol
Web Services - Adding Script Content
Web Services - Managing Services
Web Services - Security
Web Services - Preparing Scripts for Replay
Web Services - Service Emulation

If you application is using any of above mentioned protocol then you can use load runner tool for performance testing.
In case u don’t about the protocol used by application there is one feature in VuGen which can help out to find it.

Protocol Adviser is one feature which help us to find most appropriate protocol used in application. It will display a list of protocols detected in your application.

How to use Protocol Adviser:

Step 1:
Navigate to “File > Protocol Advisor > Analyze Application



Application type: where you can choose that your application is win32 or MS internet explorer one

Step 2: Click on “OK” and it start analyze your application. It will also display a small popup which will provide option stop analysis process
Step 3: Click on “Stop”

Step 4: It will give you the result of analysis and display a protocol or a list of protocols which you can use to create your script.

In case of multiple protocols detection, it also suggest you about combinations of protocol which can be used in “Multiple protocols: mode,

“This script was generated with an outdated DFE engine” in load runner

Fatal Error -26000: This script was generated with an outdated DFE engine, regenerate the script in order to successfully replay the DFE steps.

Warning: Extension lrwreplaymain.dll reports error -1 on call to function ExtPerProcessInitialize

Error: Thread Context: Call to service of the driver failed, reason – thread context wasn’t initialized on this thread.


This error occurs because the script is being replayed with a version of the DFE engine newer than the one it was generated by. It usually happens if new patches are installed after the script was recorded.

There are 2 possible workarounds for this issue

Method 1:

Do the following 3 steps to fix the issue:

1. Navigate to the script folder
2. Delete the folder named DfeConfig
3. Regenerate the script in VuGen.

Method 2:

1. Open script folder
2. Delete DfeConfig folder
3. Replay script



any method works perfectly.

Tuesday 26 November 2013

Sun Java System web server

Working With Administration Server

The Administration Server is a web-based server that contains the Java forms you use to configure all of your Sun Java System Web Servers.
After installing Sun Java System Web Server, you use your browser to navigate to the Administration Server page (Administration Console) and use its forms to configure your Sun Java System Web Servers. When you submit the forms, the Administration Server modifies the configuration for the server you were administering.
The URL you use to navigate to the Administration Server page depends on the computer host name and the port number you choose for the Administration Server when you install Sun Java System Web Server. For example, if you installed the Administration Server on port 1234, the URL will look like this:
http://myserver.sun.com:1234/


Before you can get to any forms, the Administration Server prompts you to authenticate yourself. This means you need to type a user name and password. You set up the "superuser" user name and password when you install Sun Java System Web Server on your computer. The following figure shows a typical authentication screen:

The settings for the Administration Server appear in the top pane, organized by a set of tabs.
The first page you see when you access the Administration Server, is the common tasks page. You use the buttons on this page to manage, add, remove, and migrate your Sun Java System Web Servers. The common tasks page is highlighted in the following figure:

The Administration Server provides the following tabs for your administration-level tasks:
  • Configuration
  • Nodes
  • Server Certificates
  • Monitoring
  • Administration Server


Note - Clicking on any of these tabs may result child tabs appearing on the page. The actions provided by the child tabs are specific to the parent tab functionality.
The following figure shows the child tabs for a selected tab. Note that the parent and child tab labels change based on the action context.



The top panel of the Administration Console provides information on pending actions related to web application deployments and other configured alerts. Clicking on the tab opens pages in the same window. There are certain tasks that involves gathering data from the user in series of steps. The Administration Console has wizard interface for such tasks. These wizards always open up in a new window. The following figure shows a wizard page for creating a new configuration:

Help on GUI Components

All form elements and GUI components have a detailed inline help providing information on the validation and optional parameters. For wizard interface, at any step in the wizard, click the help tab to read the documentation specific to the current task.

Starting the Administration Server in UNIX/Linux

To start the Administration Server perform the following tasks:
Starting the Administration Server in UNIX/Linux
  1. Go to the install_root/admin-server/bin directory (for example, /usr/sjsws7.0/admin-server/bin)
  2. Type ./startserv.
    This command starts the Administration Server using the port number you specified during installation.

Starting the Administration Server in Windows

The Sun Java System Web Server installation program creates a program group with several icons for Windows platforms. The program group includes the following icons:
  • Release Notes
  • Start Administration Server
  • Uninstall Web Server
Note that the Administration Server runs as a services applet; thus, you can also use the Control Panel to start this service directly.
To access the Administration Server on Windows platforms, perform the following steps:
To Access the Administration Server on Windows Platform
  1. For accessing the administration server through the SSL port, type the following URL in your browser:
    https://hostname.domain-name:ssl_administration_port
    Sun Java System Web Server then displays a window prompting you for a user name and password.
  2. Type the administration user name and password you specified during installation.
    Sun Java System Web Server displays the Administration Server page.
    For more information, refer the Administration Console online help.
    You can also access the Administration Server from a remote location. Since the Administrator Server is accessed through a browser, you can access it from any machine that can reach the server over the network.

Wednesday 20 November 2013

How to generate GUID in LoadRunner


Compatibility:  Java (all version), SOAP UI, LoadRunner/VuGen (all version)

Today I came across a SOAP request that uses a java function (java.util.UUID.randomUUID()) to generate random number. In very high level, this java function generate strong pseudo random number using randomUUID() function from java util library. Here is the part of the SOAP request with Java function:

${=java.util.UUID.randomUUID()}
ABC


If I need to generate this random number using Java, that is easy. Here is 
the example:

import java.util.*;

public class UUIDGenerator {
    public static void main(String[] args) {
        // creating UUID
        UUID uid = UUID.fromString("12300000-afcd-11bd-b23e-10b96e4ef00d");
        // checking the value of random UUID
        System.out.println("Randomly generated UUID value: "+uid.randomUUID());
    }
}

Output would be:

Randomly generated UUID value: 69b9c547-2278-45d0-a632-b627e30119aa

But the problem was to convert this solution to LoadRunner. Thanks to Scotte 
Moore for coming up with the creative solution. Here are the steps:
•    Create a test using the protocols that generate C scripts.
•    Download the “ole32.dll” file from online (If you google it, you should be able to find it)
•    Save that “ole32.dll” file into the test folder so that lr_load_dll() function can load this dll
•    Finally, you can either create seperate functions to generate GUID/randomUUID or can enabled in the action that will use it.

Action() {
    lr_guid_gen();
    return 0;
}

int lr_guid_gen(){
    typedef struct _GUID{
        unsigned long Data1;
        unsigned short Data2;
        unsigned short Data3;
        unsigned char Data4[8];
    } 
    GUID;
    GUID m_guid;
    char buf[50];
    char bufx[50];
    lr_load_dll ("ole32.dll");
    CoCreateGuid(&m_guid);

    sprintf (buf, "{%08lX-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
    m_guid.Data1, m_guid.Data2, m_guid.Data3,
    m_guid.Data4[0], m_guid.Data4[1], m_guid.Data4[2], m_guid.Data4[3],
    m_guid.Data4[4], m_guid.Data4[5], m_guid.Data4[6], m_guid.Data4[7]);

    lr_save_string(buf, "lrGUID");
    lr_output_message(lr_eval_string(buf));
    return 0;
}
Output would be similar to following:

Action.c(54): {1FC2EFD0-3887-45D7-9432-5682802E6D82}

Common Problems in Flex Applications using LoadRunner(Flex Issues)

This article lists the common problems & solutions that performance engineers come across when testing flex applications.

Problem : Overlapped transmission error occurs when a flex script is run for the first time from controller. But the same script works fine in VuGen.

Error -27740: Overlapped transmission of request to “www.url.com” for URL “http://www.url.com/ProdApp/” failed: WSA_IO_PENDING.


Solution : The transmission of data to the server failed. It could be a network, router, or server problem. The word Overlapped refers to the way LoadRunner sends data in order to get a Web Page Breakdown. To resolve this problem, add the following statement to the beginning of the script to disable the breakdown of the “First Buffer” into server and network time.

web_set_sockets_option (“OVERLAPPED_SEND”, “0″);


Problem  : During script replay Vugen crashes due to mmdrv error. mmdrv has encountered a problem and needs to close. Additional details Error: mmdrv.exe caused an Microsoft C++ Exception in module kernel32.dll at 001B:7C81EB33, RaiseException () +0082 byte(s)

Solution : The cause of this issue is unknown. HP released a patch that can be downloaded from their site.

Problem : AMF error: Failed to find request and response

Solution
: LoadRunner web protocol has a mechanism to prevent large body requests to appear in the action files, by having the body in the lrw_custom_body.h. In AMF and Flex protocol, LR cannot handle these values and fails to generate the steps. Follow these steps to fix the problem:

1. Go to the “generation log”

2. Search for the highest value for “Content-Length”

3. Go to /config

4. Open vugen.ini

5. Add the following:

[WebRecorder]

BodySize=

6. Regenerate the script

Problem : There are duplicate AMF calls in the recording log as well as in the generated code.

Solution : Capture level may be set to Socket and WinInet, make sure under Recording Options –> Network –> Port Mapping –> Capture level is set to WinInet (only)

Problem : A Flex script which has Flex_AMF and Flex_RTMP calls, on replay will have mismatch in the tree view between the request and the response. After looking in the replay log we can see that correct calls are being made but they are being displayed incorrectly in the tree view (only the replay in tree view is incorrect). Sometimes it shows the previous or next Flex_AMF call in the tree view in place of the Flex_RTMP call.

Solution : This issue has been identified as a bug by R&D in LR 9.51 and LR 9.52. R&D issued a new flexreplay.dll which resolved the issue and will be included in the next Service Pack.

Problem  : Flex protocol script fails with “Error: Encoding of AMF message failed” or “Error: Decoding of AMF message failed”

Solution : The cause for this error is the presence of special characters (>, <, & etc…) in the flex request. Send the request enclosed in CDATA Example: XXXXXXX & CO. INC. in script to

Problem  : When creating a Multi Protocol Script that contains FLEX and WEB protocols sometimes VuGen closes automatically without any warning/error message displayed. This happens when the Web protocol is set to be in HTML Mode. When in URL mode the crash does not occur. There is no error code except a generic Windows message stating the VuGen needs to close.

Solution : This issue can be seen on Machines that are running on Windows XP, and using Mfc80.dll. Refer to Microsoft KB Article in the link below that provides a solution for the same. Microsoft released a hot fix for Windows specific issue that can cause VuGen to close.

http://support.microsoft.com/kb/961894

Problem  : When recording a FLEX script, RTMP calls are not being captured correctly so the corresponding FLEX_RTMP_Connect functions are not generated in the script.

Solution : First set the Port Mapping (Choose Recording options –> Network –> Port Mapping –> set Capture Level to ‘Socket level and WinINet level data’) set to ‘Socket level and if this doesn’t help, follow the next step. Record a FLEX + Winsock script. In Port mapping section, Set the Send-Receive buffer size threshold to 1500 under the options. Create a new entry and select Service ID as SOCKET, enter the Port (such as 2037 or whatever port the FLEX application is using for connection), Connection Type as Plain, Record Type as Proxy, and Target Server can be the default value(Any Server).

Problem  : Replaying a Flex script containing a flex_rtmp_send() that has an XML argument string may result in the mmdrv process crashing with a failure in a Microsoft DLL.

Solution : The VuGen script generation functionality does not handle the XML parameter string within the function correctly. This results in the mmdrv process crashing during replay. If you have the 9.51 version, installing a specific patch (flex9.51rup.zip) or service pack 2 will resolve the problem

Problem  : During the test executions in controller, sometimes the scripts throw an error ‘Decoding of AMF message failed. Error is: Externalizable parsing failed’.

Solution : This is mostly due to the file transfer problem. It is always advised to place the jar files in a share path common to all load agents.

Other Flex Supported Load Testing Tools:


There are other Commercial & Open Source tools available, that support the flex application testing. Some tools (For example, Neoload) have much considerable support for RTMP even when compared to LoadRunner. The way all these tools test the flex application is quite similar, each tool has its own AMF/XML conversion engine, which serializes the binary data to readable XML format

Open Source
* Data Services Stress Testing Framework

* JMeter

Commercial Tools


* Silk Performer by Borland

* NeoLoad by Neotys

* WebLOAD by RadView

Performance Improvement Recommendations

When it comes to performance improvement of an application, our first concern would be to enhance the scalability for a specified hardware & software configuration.

* In case of flex, the scalability issues derive from the fact that BlazeDS is deployed in a conventional Java Servlet container, and performance/scalability of BlazeDS also depends on the number of concurrent connections supported by the server such as Tomcat, WebSphere, Web Logic … BlazeDS runs in a servlet container, which maintains a thread pool.

* Each thread is assigned to client request and returns to a reusable pool after the request is processed. When a particular client request uses a thread for a longer duration, the thread is being locked by that corresponding client till the request is processed. So the number of the concurrent users in BlazeDS depends on the number of threads a particular servlet container can hold.

* While BlazeDS is preconfigured with just 10 simultaneous connections, it can be increased to several hundred, and the actual number depends on the server’s threading configuration, CPU and the size of its JVM heap memory. This number can also be affected by the number of messages processed by server in the unit of time and size of the messages.

* Tomcat or WebSphere can support upto several hundred of users, and any servlet container that supports Servlets 3.0, BlazeDS can be used in the more demanding applications that require support of thousands concurrent users.

Based on our project experience in performance testing Flex applications using LoadRunner we have pointed out some of the common problems that might arise during performance testing Flex applications. This will save you a lot of time as we have also provided the solutions to troubleshoot the errors if they occur.

How to upload files in Scripting Load Runner(Vugen)

How to upload any local or network files with Load runner scripting:

 There are several options that do the same work:

Running test locally :
Record script where you upload a local file. I suggest placing file in “C:\temp” before recording.
Run the test using same local machines. Test will pass since script and upload file both located in the same machine during recording and test execution.
Keep in mind to replace single backslash with double backslashes in the script. Here is the sample script:
web_submit_data("AddAttachment.aspx",
 "Action=https://learningshared.com/AddAttachment.aspx",
 "Method=POST",
 "EncType=multipart/form-data",
 "RecContentType=text/html",
 "Snapshot=t7.inf",
 "Mode=HTML",
 ITEMDATA,
     "Name=__VIEWSTATE", "Value={ViewState_Value_1}", ENDITEM,
     "Name=__EVENTVALIDATION", "Value={EVENTVALIDATION_1}", ENDITEM,
     "Name=FileUpload1", "Value=C:\\Temp\\my_uploaded_file.pdf", "File=yes", ENDITEM,
     "Name=Button1", "Value=Upload", ENDITEM,
 LAST);

Running test with any network load generator:This method is similar to the first method. Therefore, record the script the same way as above.
Create a network share location with read & write access. Place files those need to be uploaded.
Replace local file location with network file location. Make sure to replace single backslash with double backslashes in the script. Here is the sample script:
web_submit_data("AddAttachment.aspx",
 "Action=https://learningshared.com/AddAttachment.aspx",
 "Method=POST",
 "EncType=multipart/form-data",
 "RecContentType=text/html",
 "Snapshot=t7.inf",
 "Mode=HTML",
 ITEMDATA,
     "Name=__VIEWSTATE", "Value={ViewState_Value_1}", ENDITEM,
     "Name=__EVENTVALIDATION", "Value={EVENTVALIDATION_1}", ENDITEM,
     "Name=FileUpload1", "Value=\\\\shared_network_location\\my_uploaded_file.pdf", "File=yes", ENDITEM,
     "Name=Button1", "Value=Upload", ENDITEM,
 LAST);

 Attach upload file with scripts:
  • This method is similar to the first method. Record the script with a local file.
  • Add all the files (to be uploaded) to scripts by clicking “Add Files to Scripts…” menu from “Files -> Add Files to Scripts…”
  • Now clear file location and just leave the file name. These scripts should run from any load generators in the network or can be run from Performance center ALM too.
web_submit_data("AddAttachment.aspx",
 "Action=https://learningshared.com/AddAttachment.aspx",
 "Method=POST",
 "EncType=multipart/form-data",
 "RecContentType=text/html",
 "Snapshot=t7.inf",
 "Mode=HTML",
 ITEMDATA,
     "Name=__VIEWSTATE", "Value={ViewState_Value_1}", ENDITEM,
     "Name=__EVENTVALIDATION", "Value={EVENTVALIDATION_1}", ENDITEM,
     "Name=FileUpload1", "Value=my_uploaded_file.pdf", "File=yes", ENDITEM,
     "Name=Button1", "Value=Upload", ENDITEM,
 LAST);

Socket level data WinInet level data in load runner

There are situations where recording application using protocol Web (HTTP/HTML) encounters problem such as (1) not recording events, (2) not launching or (3) crashing. The context may deviate however the below list aims to provide a quick-and-dirty resolution to the problems. Obviously, the quick-and-dirty may work/not work in different environment and situations, however it will help you scope down the problem in a sequential and logical manner.

1. Use another machine to record

2. Use web_custom_request

3. Configure Port Mappings using “WinInetlevel data”  or “Socket level and WinInet level data”. And if necessary,

define the port and certs. 4. Use Older Recording Engine

5. Use LoadRunner as Proxy Server on port 7777 for  Recording (For Older Recording Engine)

6. Determine OS Support Status and application type

7. Determine the actual protocol and port number using

Winsock protocol or network sniffing tools (WireShark Network Analyzer)

Ok, let’s move to the details on the rationals and steps

Our Requirement is  to get your HTTP application record!

[1] Use another machine to record

Install VuGen on another machine and proceed with recording. What we are doing here, is to differ a problematic machine to a working one (at a machine-level troubleshooting). The existing machine may have problems due to a clone image, restricted privileges or previous installation of programs (unless you are pretty sure that your machine is fully workable with Vugen).

[2] Use web_custom_request

Use the basic web request methods for communicating to the server. This is needed when Vugen (sometimes) is unable to recognise the HTTP traffic and compose into web_submit_data APIs. Therefore, by instructing VuGen to record using web_custom_request only, this will detect all unknown communications been used in a HTTP mode to be recorded but in a more unreadable or unfriendly web_custom_request script.

1.1 Create a new Multi-Protocol Web (HTTP/HTML) script; do not create a Single Protocol script.

1.2 In the recording options, select recording to be URL- based script (not HTML mode) and select “Use web_custom_request only”. Proceed with the recording.

[3] Configure Port Mapping
Some applications may use ports that are different from the browser. The default HTTP port is 80 by most application but this may not be used by the application that you are recording against. In such situation, you may need to configure Vugento capture the HTTP traffic by mapping the ports to the service type. The service type other than HTTP are FTP, Socket, etc depending on your application needs. In this way, Vugen will become a proxy and capture traffic on the defined port.

1.1 In Recording Options ensure that you are already using web_custom_request only as stated in the previously.

1.2 Go to Port Mappings, remove all registered Entry and add New Entry with the known information (such as port number and target server). Note that there should not be any duplicate port numbers.

1.3 If 1.2 didn’t resolve the problem, try using “WinInet Level data” for the Capture Level and record the application.

1.4 If 1.3 didn’t resolve the problem, try using “Socket level and WinInet level data” for the Capture Level and record the application.

1.5 If the above didn’t resolve the problem, edit the port mapping entry; change the “Record Type” to “Direct” and to “Proxy” if you using SSL. If you know the ciphers used and type, you can configure it here.

1.6 For SSL, either client-side or server-side, refer to “Configuring the Port Mappings” of the Vugen User Guide for the detailed information. You will have to provide the certificates in either Base64 or PEM format. PEM format can be converted with a tool called openssl.exe availablie with the installer as well as online search.

[4] Use Older Recording Engine


This is to utilize the old recording engine prior version

8.1. The old version records at the proxy level whereas the new engine records on the process level.

[5] Use LoadRunner as Proxy Server for Recording (For Older Recording Engine)

If [4], didn’t work out right, you have to specifically configure LoadRunner as a proxy to record all communication via port 7777. Take note that this is in the old recording engine.

1.1 In Recording Options, under Browser, set the application to launch manually with “Manually launch an application”

1.2 Under Recording Proxy, select “No Proxy”.

1.3 On a separate machine (e.g. Machine A), set the Proxy to the LoadRunner machine with port 7777. (NOTE: Proxy server can be configured on the LR machine itself).

1.4 Start recording on LoadRunner machine.

1.5 Invoke the application on Machine A.

1.6 You should be seeing events counted on the LoadRunner machine. It means the target application accesses the LR machine and LR is recording it.

[6] Determine OS Support Status and application type

At this point, you have tried almost everything (and have come to theend of the road/solutions). My recommendation is to check out with Mercury/HP support, on the support level of the target application. Also check them out if they had encountered such problems before.

[7] Use Winsock protocol or network sniffing tools

Using WinSock protocol, you can determine the actual communication method by the client to the server. With this evidence, you can bring forward a discussion with your client on the unknown communication method. Another good tool to use is the WireShark Network Analyzer (formerly known as Ethereal Network Analyzer) to identify the communication and port being used.

Web_convert_param() function in Load Runner

I recorded a script against an Java application that ultimately sends a HTTP POST request to the server being tested with an XML in the Body of the request. The script came out fine, except that the body (XML content) was URL encoded. It would have been fine if I didn't need to parameterize the data in the body but since I had to, I realized in a few seconds that I would have to do some extra work to convert the data from parameter file to URL encoded format. The data in parameter file is of the form:

Fname,Mname,Lname,Gen,SSN,A1,A2,A3,A4,A5,City,State,Zip
John,,Smith,,123456789,123,Main,St,#,88,TestCity,TestState,987654321

However, in the script, address is one field that is a concatenated string of A1 - A5 parameters with a space between each of them.

Further Research:
A1 - A5 are the components that make up the street address that is supposed to be concatenated to one field in the script. No problem.
sprintf(as,"%s %s %s %s %s", lr_eval_string("{a1}"), 
lr_eval_string("{a2}"), lr_eval_string("{a3}"), 
lr_eval_string("{a4}"), lr_eval_string("{a5}"));
lr_save_string(as, "addressStreet");

…but the problem is there are spaces in between this components, which we all know get converted to a '+' character in URL encoding. Ok, so I could've just used sprintf(as,"%s+%s+%s+%s+%s",…
But some of the addresses also have '#' signs that get converted into '%23'. Now I had 2 options:
1. remove all the addresses that have a '#' sign
2. write a URLEncode(char *) function that does the obvious.

In the 1st option the addresses can have other characters that need to get URL encoded as well. And if a sizeable chunk of the data given to me has these characters, I could lose a lot of records. Also I didn't want to have to modify the data every time I get a new 10,000 record file.
2nd option seemed the way to go. I ran my tests by removing the records with '#' character.

Solution:

Pass the 'XMLSource' parameter as an input to the web_convert_param function, and store the result as 'TargetXML'
web_convert_param("TargetXML", "SourceString={XMLSource}", "SourceEncoding=HTML", "TargetEncoding=URL", LAST);

So this web_convert_param function seemed to do exactly what I needed. I tried it out with a couple of different strings and it did as promised. So my new script had:
sprintf(as,"%s %s %s %s %s", lr_eval_string("{a1}"), lr_eval_string("{a2}"), lr_eval_string("{a3}"), lr_eval_string("{a4}"), lr_eval_string("{a5}"));
lr_save_string(as, "addressStreet");

web_convert_param("encAddressStreet", "SourceString={addressStreet}", "SourceEncoding=PLAIN", "TargetEncoding=URL", LAST);
lr_output_message("%s", lr_eval_string("{encAddressStreet}"));

Creating web_custom_request for HTTP file uploads manually

LoadRunner captures any form based file uploads as web_submit_data with the file name (and location) within the list of data within the request. An example request:

web_submit_data("FileUpload",
"Action={URL}",
"Method=POST",
"EncType=multipart/form-data",
"TargetFrame=",
"RecContentType=text/html",
"Mode=HTML",
ITEMDATA,
"Name=File", "Value=C:\\testdata\\readme1.txt", "File=yes", ENDITEM,
LAST);

In this we may get 2 drawbacks
  • For this kind of script, the files to be uploaded have to be transferred to each of the Load Generator machines being used in the scenario. Or they have to be transferred to a shared network location so that both the machine used for creating the script and the load generator machines can reference it.
  • As mentioned in the forum post, any parameterization in the file contents is not possible. If the scenario requires files to be uploaded iteratively with unique names, that many files have to be created manually 
There are 2 solutions to this and one is more universally acceptable (by web servers) than the other. I'll describe both and let you decide which one you want to use. I also highly recommend reading RFC1867 which provides excellent background on how multi part file uploads are implemented in HTML form based submissions.

1. web_custom_request POST: To arrive at the solution, I did exactly what I usually do when I'm stuck with some HTML script or want to see the raw HTTP request being sent to any web server. I opened Webscarab to capture the HTTP request that was being sent for file uploads.

Here's a screenshot of the HTTP post request as captured by Webscarab:



And here's the relevant portions of the raw request:


Content-Type: multipart/form-data; boundary=---------------------------327572003712859
Content-length: 228

-----------------------------327572003712859
Content-Disposition: form-data; name="File"; filename="readme1.txt"
Content-Type: text/plain

testdata
readme
readme
123456789
-----------------------------327572003712859--

The Content-Type HTTP header is what specifies the submission to be a multipart data submission. The "boundary" is a string that doesn't occur in the file data and is used to mark the boundaries of the data being sent. Content-length, as the name implies is the length of the data that is being sent.

The body of the request starts with the boundary string and is followed by the 2 headers to specify the content-disposition which includes the name of the file to be uploaded. Content-type specifies the encoding of the data being submitted. Following that within the body is a blank line and the actual contents of the file that will be uploaded. After the contents is the boundary once again to signify end of the submission data.

So this kinda makes it easier to create a web_custom_request. The Content-Type HTTP header is specified by "EncType" attribute of the function. Content-length header can be ignored since web_custom_request itself generates it by calculating the length of the data at runtime. The rest goes in the "Body" attribute starting with the boundary. Content-Disposition specifies among other things the name of the file to be uploaded and this can be parameterized. Content-Type is the type of file being uploaded and can be text/plain, image/gif etc. And in the end is the boundary once again. The final request looks like this:


web_custom_request("{rndString}.txt",
"URL={testURL}",
"Method=POST",
"EncType=multipart/form-data; boundary=---------------------------17773322701763",
"TargetFrame=",
"Resource=1",
"RecContentType=application/octet-stream",
"Body=-----------------------------17773322701763\r\n"
"Content-Disposition: form-data; name=\"File\"; filename=\"{rndString}.txt\"\r\n"
"Content-Type: text/plain\r\n"
"\r\n"
"testdata\r\n"
"readme\r\n"
"readme\r\n"
"{rndString}\r\n"
"-----------------------------17773322701763--\r\n",
LAST);

I have parameterized the file name to be a random string so I can run this script iteratively without having to worry about server rejecting duplicate files. I can also parameterize the contents of the file within the body to whatever I like so that each file is unique or based on some other logic.

2. web_custom_request PUT: The second option is more straightforward but less universally accepted. I've read that not all web servers implement this. It involves using the HTTP PUT to create a web_custom_request. For more on different HTTP methods, see http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html. It mentions that:


The fundamental difference between the POST and PUT requests is reflected in the different meaning of the Request-URI. The URI in a POST request identifies the resource that will handle the enclosed entity. That resource might be a data-accepting process, a gateway to some other protocol, or a separate entity that accepts annotations. In contrast, the URI in a PUT request identifies the entity enclosed with the request -- the user agent knows what URI is intended and the server MUST NOT attempt to apply the request to some other resource.

I've also read that PUT is more efficient so if your test site implements the uploads using POST, better do it that way instead. Nevertheless, here is the web_custom_request with PUT:

web_custom_request("{rndString}.txt",
"URL={URL}/{rndString}.txt",
"Method=PUT",
"Resource=1",
"RecContentType=application/octet-stream",
"Body=testdata\r\n"
"readme\r\n"
"readme\r\n"
"{rndString}\r\n",
LAST);

The resulting function is straightforward, URL attribute is the URI identifying the file to be uploaded and Body is the exact contents of the file.

Tuesday 19 November 2013

Work Load Forecasting

Forecasting the projected volumes is one of the key elements for work load modeling. The forecasting process is a combination of using judgment and application of mathematics. The mathematical process takes past history and uses it to predict future events. Both these components should be used in order to come out with an accurate forecast.

For a Performance Engineer to intelligently negotiate an SLA, he or she must understand business- related concepts such as customer/employee population, inventory stocks, and business transaction rates. This kind of volume data is expressed in business units, the language of the user community. Performance Engineer must be able to communicate with the users in these terms. However, they also must be able to translate business units into measurements related to intensity of service demand (e.g. system arrival rates, transaction-processing time, etc.). Furthermore, these must be translated to system performance metrics such as utilization, queuing levels, and response time. In addition, Performance Engineers should realize that business trends are changing over time and that business growth rates will cause changes to system requirements. Therefore, estimating the computing needs of an organization requires application of forecasting techniques and relating these to the system performance metrics mentioned above. The combination of these skills form a discipline called capacity planning, is the determination of predicted future system needs which impacts system acquisition decisions and service level expectations.

Workload Forecasting Techniques:

There are two broad categories of forecasting techniques:

1.  Quantitative Methods

Quantitative methods are based on algorithms of varying complexity. Relies on the existence of historical data to estimate future values of workload parameters

2.  Qualitative Methods

Qualitative methods are based on educated guessing analogy/commercial knowledge. It’s a subjective process, based on judgments, intuition, expert opinions, historical data etc.

Quantitative Versus Qualitative:
Quantitative forecasting looks more into statistics and past trends to make predictions, whereas qualitative analysis relies more on managerial or judgmental opinion. Qualitative analysis is also often used when quantitative data is absent.

Quantitative forecasting techniques are generally more objective than their qualitative counterparts which are more subjective. Qualitative techniques are more useful in the earlier stages of the product life cycle, when less past data exists for use in quantitative methods

Quantitative methods come in two main types:

 Time-series methods

Time-series methods make forecasts based purely on historical patterns in the data. E.g. you want to forecast site visitors over the next few weeks. Time-series methods only use historical site visit data to make that forecast. Time-series methods are probably the simplest methods to deploy and can be quite accurate, particularly over the short term. Most quantitative forecasting methods try to explain patterns in historical data as a means of using those patterns to forecast future patterns. It can be further divided in to

Last period demand (often called the "naive" forecast)

 Arithmetic Average

Simple Moving Average (N-Period)
Weighted Moving Average (N-Period)

Simple Exponential Smoothing

Calculating Multiplicative Seasonal Indexes

Simple time-series methods include moving average models. In this case, the forecast is the average of the last "x" number of observations, where "x" is some suitable number. If you're forecasting monthly sales data, you might use a 12-month moving average, where the forecast for the next month is the average over the past year.

E.g. Ft+1 = Yt + Yt−1 + · · · + Yt−n+1/ n

where Ft+1 is the forecast value at time t + 1, Yt is the observation at time t and n is the number of observations used to calculate Ft+1

Trouble is, simple averaging methods don't tend to work well when there's either a trend in the data or seasonal effects. E.g. In case of marketing data, other techniques such as exponential smoothing may be more appropriate.

With moving averages, every data point carries equal weight in making the forecast whereas in case of smoothing methods, more importance is placed on the most recent data than on the historical data. If there's a trend in the data, it'll use the recent observations to make up the bulk of the forecast, and the forecast is more likely to reflect the trend.

Moving averages and simple exponential smoothing techniques are available in Excel and easy to execute. That's part of the great advantage of time-series methods: they're generally simple, cheap to run, and relatively easy to interpret.

 Explanatory methods

Explanatory forecasting methods take the process a step further and allow us to relate changes in marketing activity to changes in such outputs as sales, brand awareness, and registrations.

Explanatory models assume that the variable to be forecasted exhibits an explanatory relationship with one or more other variables. For example, we may model the electricity demand (ED) of a hot region during the summer period as

ED = f (current temperature, strength of economy, population, time of day, day of week, error)
The relationship is not exact—there will always be changes in electricity demand that cannot be accounted for by the variables in the model. The “error” term on the right allows for random variation and the effects of relevant variables not included in the model. Models in this class include regression models, additive models, and some kinds of neural networks.

The purpose of the explanatory model is to describe the form of the relationship and use it to forecast future values of the forecast variable. Under this model, any change in inputs will affect the output of the system in a predictable way, assuming that the explanatory relationship does not change.

Qualitative forecasting methods can be categorized further as below

Delphi method: It is an iterative technique for obtaining a consensus forecast from a group of experts, without the problems inherent in group decision-making. The procedure works as follows: first, give a set of questions to each expert, who provides answers (forecasts) independently from the other experts. The responses are collected and numeric responses are statistically summarized. If a consensus was not obtained, return the summarized responses to the experts, along with any comments made by the experts (anonymously), and have them revise their forecasts based on this data. Repeat until either a consensus is reached (the answers converge) or else a "stalemate" occurs (no convergence can be obtained).

Market research: Questionnaires and interviews are used to solicit potential customers, current users, and others. One potential problem is that stated intentions (expectations) do not always translate into behavior. E.g. questionnaires, test markets, surveys, etc.

Product life-cycle analogy: forecasts based on life-cycles of similar products, services, or processes.

Expert judgment by management, sales force, or other knowledgeable persons

Jboss monitoring using SIS (Integrating Site Scope with JBoss)

Below are the prerequisite configuration which required to setup the Jboss application server monitors

Step 1) check Jboss is running

Step 2) Add the below lines in “$JBOSS_HOME/bin”

On Windows: run.conf.bat 

set JAVA_OPTS="%JAVA_OPTS% -Dcom.sun.management.jmxremote.authenticate=false"

set JAVA_OPTS="%JAVA_OPTS% -Dcom.sun.management.jmxremote.ssl=false"

set JAVA_OPTS="%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=portNo"

set JAVA_OPTS="%JAVA_OPTS% -Djboss.platform.mbeanserver"

Counterpart for “run.conf.bat” on UNIX is “run.conf”

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port= portNo "

#JAVA_OPTS="$JAVA_OPTS -Djboss.platform.mbeanserver"

Step 3) Re-strat the server

Step 4) Check the:-service:jmx:rmi:///jndi/rmi://host:port/jmxrmi

(Make sure that there, no space are there b\w the url) in jconsole

Step 5) follow the basic steps use and use JMX monitor

Step 6) paste:-service:jmx:rmi:///jndi/rmi://host:port/jmxrmi

Step 7) get the counters and select whichever u need

The above configuration can be used to setup the monitor for Tomcat

Enable Connection Pool :

need to deploy the xxxx-ds.xml file in to the jboss/server/default/deploy folder. You will get the sample xxxxxx-ds.xml files from the docs/examples/jca direcoty, that is coming along with the jboss build. To create oracle connection pool, you have to deploy the oracle-ds.xml (name doe's not mean much) in the jboss/server/default/deploy directory. (or in the instance which one you are using).

 
    OracleDS
    jdbc oracle:thin:@youroraclehost:1521:yoursid
    oracle.jdbc.driver.OracleDriver
    x
    y
    org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
 


Note:We will not be able to monitor Connection pool using any SIS below 11.2.SIS 11.2 comes with a patch which helps up to retrieve Connection pool from Jboss

Difference between Web_find and web_reg_find functions in load runner

SI no
Web_find
Web_reg_find
1
The web_find function searches an HTML page for a specified text string.
function registers a request to search for a text string on a Web page retrieved by the next action function, such as web_url.

2
This function is limited to HTML–based recorded scripts
It supports both html and url mode recording
3
Java or VB does’t support (only we can use with c prog lang scripts)
Support all lang
4
Runs slower
Run much faster than web_find
5
Does’t support WAP scripts running in HTTP or WSP replay mode.
-------

Note:
Web find is deprecated. It has been replaced with web_reg_find.
WSP-Wireless Session Protocol
WAP wireless application protocol