You are on page 1of 517

®

LoadRunner
Creating Vuser Scripts
Windows and UNIX Find

Version 5.0 ?

Online Guide
Table of Contents
0
Table of Contents

Welcome to LoadRunner ............................................................... xv


Online Resources .............................................................................xvi
LoadRunner Documentation Set .................................................... xviii
Using the LoadRunner Documentation Set ...................................... xx
Typographical Conventions ............................................................xxiv
Find
PART I: IN TRODUCING VUSER SC RIPTS
Chapter 1: Developing Vuser Scripts ............................................ 2 ?
Introducing Vusers.............................................................................. 3
Looking at Vuser Types...................................................................... 5
Developing Vuser Scripts ................................................................... 7
Using This Guide .............................................................................. 10

PART II: W O RKING W I TH VUGEN


Chapter 2: Introducing VuGen ..................................................... 13 Click a
Recording Vuser Scripts with VuGen ............................................... 15 page
Running Vuser Scripts with VuGen .................................................. 17
Understanding VuGen Code ............................................................ 18
Using General Vuser Functions........................................................ 21

Creating Vuser Scripts iii


Table of Contents

Chapter 3: Recording with VuGen ............................................... 24


About Recording with VuGen ........................................................... 25 In

Creating a Vuser Script .................................................................... 26


Vuser Script Sections ....................................................................... 28
Recording Vuser Scripts................................................................... 29
Chapter 4: Enhancing Vuser Scripts ........................................... 38
About Enhancing Scripts .................................................................. 39
Inserting Transactions ...................................................................... 40
Inserting Rendezvous Points............................................................ 43 Find
Inserting Comments ........................................................................ 45
Obtaining Vuser Information............................................................. 47 ?
Sending Messages to Output ........................................................... 48
Handling Command Line Arguments................................................ 50
Using C Functions in Your Script...................................................... 52
Chapter 5: Defining Parameters................................................... 54
About Defining Parameters .............................................................. 55
Defining Parameters......................................................................... 57
Understanding Parameter Types...................................................... 61 Click a
Updating Parameter Values for Files................................................ 76 page
Updating Parameter Values for Internal Data Types........................ 81
Maintaining Parameters.................................................................... 82
Parameterization Options ................................................................. 83

Creating Vuser Scripts iv


Table of Contents

Chapter 6: Configuring Run-Time Settings ................................ 86


About Run-Time Settings ................................................................. 87
Setting the Think Time Settings........................................................ 89
Setting the Iteration Settings ............................................................ 91
Setting the Log Run-Time Settings................................................... 93
Setting the General Run-Time Settings............................................ 99
Setting the RTE Run-Time Settings ............................................... 105
Chapter 7: Running Vuser Scripts in Stand-Alone Mode ........ 109
About Running Vuser Scripts in Stand-Alone Mode....................... 110 Find
Running a Vuser Script in VuGen................................................... 112
Running a Vuser Script from a UNIX Command Line .................... 117 ?
Integrating a Vuser Script into a LoadRunner Scenario ................. 121
Chapter 8: Managing Scripts Using TestDirector..................... 123
Working with TestDirector .............................................................. 124
Opening a Connection to a TestDirector Project ............................ 127
Opening a Script using TestDirector............................................... 130
Saving Scripts to the TestDirector Project...................................... 132
Managing your Script in TestDirector ............................................. 133 Click a
page

Creating Vuser Scripts v


Table of Contents

PART III: DA TABASE VUSER SCRIPTS


In

Chapter 9: Developing Database Vuser Scripts ....................... 136


About Recording Database Vuser Scripts ...................................... 137
Introducing Database Vusers ......................................................... 138
Understanding Database Vuser Technology.................................. 139
Getting Started with Database Vuser Scripts ................................. 141
Using LRD Functions...................................................................... 143
Understanding Database Vuser Scripts ......................................... 147
Evaluating Error Codes .................................................................. 154 Find
Handling Errors............................................................................... 156
?
Chapter 10: Correlating Database Statements ......................... 161
About Correlating Database Statements ........................................ 162
Using Correlated Query Functions ................................................. 164
Correlating a Query Automatically.................................................. 168
Correlating Queries to Optimize a Script ........................................ 175
Correlating Queries for Tables with Constraints............................. 182

Click a
page

Creating Vuser Scripts vi


Table of Contents

PART IV: TU XEDO VUSER SC RIPTS


Chapter 11: Developing TUXEDO Vuser Scripts ..................... 187
About TUXEDO Vuser Scripts........................................................ 188
Getting Started with TUXEDO Vuser Scripts.................................. 189
Using LRT Functions ...................................................................... 191
Understanding Tuxedo Vuser Scripts............................................. 197
Correlating Queries ........................................................................ 201
Defining Environment Settings for TUXEDO Vusers...................... 206
Find
PART V: WINDOWS SOCKETS VUSER SCR IPTS
?
Chapter 12: Developing Windows Sockets Vuser Scripts....... 209
About Recording Windows Sockets Vuser Scripts ......................... 210
Getting Started with Windows Sockets Vuser Scripts .................... 211
Using LRS Functions...................................................................... 213
Understanding Windows Sockets Vuser Scripts ............................ 216
Viewing Windows Sockets Data ..................................................... 217
Using Winsock Data Buffers........................................................... 219
Understanding Data Files ............................................................... 221 Click a
Correlating Statements .................................................................. 223 page
Working with Correlated Scripts ..................................................... 224
Determining Character Offsets for Parameterization...................... 229

Creating Vuser Scripts vii


Table of Contents

PART VI: A PPC VU SER SCRIPTS


In

Chapter 13: Developing APPC Vuser Scripts ........................... 234


About Recording APPC Vuser Scripts............................................ 235
Getting Started with APPC Vuser Scripts....................................... 236
Using LRA Functions...................................................................... 238
Understanding APPC Vuser Scripts ............................................... 241
Viewing APPC Data........................................................................ 242
Using APPC Data Buffers............................................................... 243
Understanding Data Files ............................................................... 245 Find

PART VII: RTE VU SER SCRIPTS ?


Chapter 14: Introducing RTE Vuser Scripts.............................. 248
About Developing RTE Vuser Scripts............................................. 249
Introducing RTE Vusers ................................................................. 250
Understanding RTE Vuser Technology .......................................... 251
Getting Started with RTE Vuser Scripts ......................................... 252
Using TE Functions ........................................................................ 254
Mapping Terminal Keys to PC Keyboard Keys .............................. 256 Click a
page

Creating Vuser Scripts viii


Table of Contents

Chapter 15: Recording RTE Vuser Scripts................................ 259


About Recording RTE Vuser Scripts .............................................. 260
Creating a New RTE Vuser Script .................................................. 261
Recording the Terminal Setup and Connection Procedure ............ 263
Recording Typical User Actions ..................................................... 268
Recording the Log Off Procedure................................................... 269
Setting the Recording Options........................................................ 270
Typing Input into a Terminal Emulator............................................ 274
Using the APPC Protocol in RTE Vuser Scripts ............................. 279
Find
Generating Unique Device Names ................................................. 280
Setting the Field Demarcation Characters...................................... 282 ?
Chapter 16: Synchronizing RTE Vuser Scripts......................... 284
About Synchronizing Vuser Scripts ................................................ 285
Synchronizing Block-Mode (IBM) Terminals .................................. 287
Synchronizing Character-Mode (VT) Terminals ............................. 293
Chapter 17: Reading Text from the Terminal Screen............... 302
About Reading Text from the Terminal Screen .............................. 303
Searching for Text on the Screen................................................... 304 Click a
Reading Text from the Screen........................................................ 305 page

Creating Vuser Scripts ix


Table of Contents

P A R T VIII: WE B VUSE R SCRIPTS


In

Chapter 18: Introducing Web Vuser Scripts ............................. 307


About Developing Web Vuser Scripts ............................................ 308
Introducing Web Vusers ................................................................. 311
Understanding Web Vuser Technology.......................................... 312
Getting Started with Web Vuser Scripts ......................................... 313
Using the Graphical Representation of a Web Vuser Script........... 315
Using Text-Based Web Vuser Scripts ............................................ 320
Find
Chapter 19: Recording Web Vuser Scripts ............................... 326
About Recording Web Vuser Scripts .............................................. 327 ?
Recording a Browser Session ........................................................ 328
Inserting Transactions .................................................................... 331
Inserting Rendezvous Points.......................................................... 334
Chapter 20: Configuring Web Run-Time Settings .................... 336
About Configuring Web Run-Time Settings.................................... 337
Performance Settings ..................................................................... 339
HTTP Settings ................................................................................ 342
Timing Settings............................................................................... 344 Click a
Server Settings ............................................................................... 347 page

Creating Vuser Scripts x


Table of Contents

Chapter 21: Running Web Vuser Scripts .................................. 349


About Running Web Vuser Scripts ................................................. 350
Running a Web Vuser Script Using QuickTest............................... 351
Displaying a Run-Time Browser during Script Execution ............... 354
Chapter 22: Modifying Web Vuser Scripts ................................ 355
About Modifying a Web Vuser Script.............................................. 356
Modifying Step Properties .............................................................. 357
Adding a Step to a Vuser Script ..................................................... 376
Renaming a Step in a Vuser Script ................................................ 381 Find
Deleting a Step from a Vuser Script ............................................... 382
?
Chapter 23: Parameterizing a Web Vuser Script ...................... 383
About Parameterizing a Script........................................................ 384
Introducing Data-table Parameterization ........................................ 386
Specifying the Arguments to Parameterize .................................... 388
Replacing Parameterized Arguments with Constants .................... 391
Automatically Specifying Parameterized Arguments...................... 393
Editing Information in the Data Table ............................................. 395
Click a
page

Creating Vuser Scripts xi


Table of Contents

PART IX: B AAN VU SER SCRIPTS


In

Chapter 24: Creating Baan Vuser Scripts ................................. 397


About Developing Baan Vuser Scripts ........................................... 398
Getting Started with Baan Vusers .................................................. 399
Baan Functions............................................................................... 400
Creating a Baan Vuser Script ......................................................... 405
Understanding Baan Vuser Scripts ................................................ 407
Customizing Baan Vuser Scripts .................................................... 409
Find
PART X: JAVA VUSER SCRIPT S
?
Chapter 25: Creating Java Vuser Scripts .................................. 414
About Developing Java Vuser Scripts ............................................ 415
Getting Started with Java Vusers ................................................... 416
Java Functions ............................................................................... 418
Creating a Java Vuser Script.......................................................... 424
Understanding Java Vuser Scripts ................................................. 426
Replaying Java Vuser Scripts......................................................... 427
Understanding the GUI Map........................................................... 429 Click a
page

Creating Vuser Scripts xii


Table of Contents

PART XI: GUI VUSER SCRIPTS


Chapter 26: Developing GUI Vuser Scripts............................... 432
About Developing GUI Vuser Scripts ............................................. 433
Introducing GUI Vusers .................................................................. 434
Understanding GUI Vuser Technology........................................... 435
Getting Started with GUI Vusers .................................................... 441
Using WinRunner and VXRunner to Create GUI Vuser Scripts .... 443
Measuring Server Performance: Transactions ............................... 445
Generating Heavy User Load: Rendezvous Points ........................ 447 Find
Understanding GUI Vuser Scripts .................................................. 448
Using LoadRunner Functions in GUI Vuser Scripts ....................... 450 ?
Sending Messages to the Controller .............................................. 451
Obtaining Information about Vusers and Hosts.............................. 453

P A R T XI I : A P P EN D IX E S
Appendix A: Configuring VuGen ............................................... 456
Appendix B: Calling External Functions .................................... 463
Loading a DLL—Locally ................................................................. 464 Click a
Loading a DLL—Globally................................................................ 466 page

Creating Vuser Scripts xiii


Table of Contents

Appendix C: Programming Scripts on UNIX Platforms ............ 468


Generating Templates ................................................................... 470 In

Programming Vuser Actions into a Script....................................... 471


Configuring Vuser Run-Time Settings ............................................ 474
Defining Transactions and Rendezvous Points.............................. 482
Compiling Scripts............................................................................ 483

Index .............................................................................................. 485


Find

Click a
page

Creating Vuser Scripts xiv


Welcome to LoadRunner

0
Welcome to LoadRunner

Welcome to LoadRunner, Mercury Interactive’s tool for testing the performance of


client/server systems. LoadRunner stresses your entire client/server system to
isolate and identify potential client, network, and server bottlenecks.

LoadRunner enables you to test your system under controlled and peak load
conditions. To generate load, LoadRunner runs thousands of Virtual Users that are Find
distributed over a network. Using a minimum of hardware resources, these Virtual
Users provide consistent, repeatable, and measurable load to exercise your ?
client/server system just as real users would. LoadRunner’s in-depth reports and
graphs provide the information that you need to evaluate the performance of your
client/server system.

xv
Welcome to LoadRunner

Online Resources
LoadRunner includes the following online tools:

Read Me First provides last-minute news and information about LoadRunner.

Books Online displays the complete documentation set in PDF format. Online
books can be read and printed using Adobe Acrobat Reader 3.01, which is
included in the installation package. Check Mercury Interactive’s Customer
Support web site for updates to LoadRunner online books. Find

LoadRunner Online Function Reference gives you online access to all of ?


LoadRunner’s functions that you can use when creating Vuser scripts, including
examples of how to use the functions. Check Mercury Interactive’s Customer
Support site for updates to the LoadRunner Online Function Reference.

LoadRunner Context Sensitive Help provides immediate answers to questions


that arise as you work with LoadRunner. It describes dialog boxes, and shows you
how to perform LoadRunner tasks. Check Mercury Interactive’s Customer Support
web site for updates to LoadRunner help files.

Technical Support Online uses your default web browser to open Mercury
Interactive’s Customer Support web site.

Creating Vuser Scripts xvi


Welcome to LoadRunner

Support Information presents the locations of Mercury Interactive’s Customer


Support web site and home page, the e-mail address for sending information
requests, the name of the relevant news group, the location of Mercury Interactive’s
public FTP site, and a list of Mercury Interactive’s offices around the world.

Mercury Interactive on the Web uses your default web browser to open Mercury
Interactive’s home page.

Find

Creating Vuser Scripts xvii


Welcome to LoadRunner

LoadRunner Documentation Set


LoadRunner is supplied with a set of documentation that describes how to:

• install LoadRunner
• create Virtual User scripts
• use the LoadRunner Controllers

Find

Creating Vuser Scripts xviii


Welcome to LoadRunner
The following diagram shows the structure of the LoadRunner documentation set:

Controller Controller
User’s Guide User’s Guide
(Windows) (UNIX)

You Find
are here
Creating ?
Vuser
Scripts

Creating Creating
WinRunner
GUI RTE
User’s
Vuser Scripts Vuser Scripts
Guide
(UNIX) (UNIX)

Creating Vuser Scripts xix


Welcome to LoadRunner

Using the LoadRunner Documentation Set


The LoadRunner documentation set consists of one installation guide, two
Controller user’s guides, and four guides for creating Virtual User scripts.

Installation Guide
For instructions on installing LoadRunner, refer to the Installing LoadRunner
guide. The installation guide explains how to install:

• the LoadRunner Controller—either on a Windows-based or on a UNIX-based Find


machine
• Virtual User components—for both Windows and UNIX platforms
?

Note: The installation process that you follow depends on the type of LoadRunner
Controller that you install. The Controller can be either Windows-based or UNIX-
based. Refer to the Installing LoadRunner guide for details.

Creating Vuser Scripts xx


Welcome to LoadRunner

Controller User’s Guides


The LoadRunner documentation pack includes two Controller user’s guides:

The LoadRunner Controller User’s Guide (Windows) describes how to create


and run LoadRunner scenarios using the LoadRunner Controller in a Windows
environment. The Vusers can run on both UNIX and Windows-based platforms.

The LoadRunner Controller User’s Guide (UNIX) describes how to create and
run LoadRunner scenarios using the LoadRunner Controller in a UNIX
Find
environment. The Vusers can run on both UNIX and Windows-based platforms.

Both of the Controller user’s guides present overviews of the LoadRunner testing ?
process. Note that if you are using a Windows-based Controller, always refer to the
LoadRunner Controller User’s Guide (Windows); if you are using a UNIX-based
Controller, always refer to the LoadRunner Controller User’s Guide (UNIX).

Creating Vuser Scripts xxi


Welcome to LoadRunner

Guides for Creating Vuser Scripts


The LoadRunner documentation pack has four guides that describe how to create
Vuser scripts:

The Creating Vuser Scripts guide describes how to create all types of Vuser
scripts. When necessary, use the following three guides and the TSL Online
Reference in conjunction with this document.

• The WinRunner User’s Guide describes in detail how to use WinRunner to


Find
create GUI Vuser scripts. The resulting Vuser scripts run on Windows
platforms. The TSL Online Reference should be used in conjunction with this
document.
?
• The Creating GUI Virtual User Scripts (UNIX) guide describes how to create
GUI Vuser scripts using VXRunner, the enhanced version of XRunner. The
resulting Vuser scripts run on UNIX platforms. The TSL Online Reference
should be used in conjunction with this document.
• The Creating RTE Virtual User Scripts (UNIX) guide describes how to create
RTE Vuser scripts that run on UNIX platforms.

Creating Vuser Scripts xxii


Welcome to LoadRunner

For information on Look here...

Installing LoadRunner Installing LoadRunner guide


LoadRunner Controller User’s Guide
The LoadRunner testing (Windows)
process LoadRunner Controller User’s Guide
(UNIX)
Creating Vuser scripts Creating Vuser Scripts guide
Find
Creating and running scenarios, and analyzing results using a:

Windows-based Controller
LoadRunner Controller User’s Guide ?
(Windows)
LoadRunner Controller User’s Guide
UNIX-based Controller
(UNIX)

Creating Vuser Scripts xxiii


Welcome to LoadRunner

Typographical Conventions
This book uses the following typographical conventions:

Bold Bold text indicates function names and the elements of the
functions that are to be typed in literally.
Italics Italic text indicates variable names and book names.
Helvetica The Helvetica font is used for examples and statements
that are to be typed in literally.
Find
[ ] Square brackets enclose optional parameters.
{} Curly brackets indicate that one of the enclosed values
?
must be assigned to the current parameter.
... In a line of syntax, three dots indicate that more items of
the same format may be included. In a program example,
three dots are used to indicate lines of a program that have
been intentionally omitted.
| A vertical bar indicates that either of the two options
separated by the bar should be selected.

Creating Vuser Scripts xxiv


Part I

Introducing Vuser Scripts

Find

Creating Vuser Scripts Chapter , page 1


Introducing Vuser Scripts
Developing Vuser Scripts
1
Developing Vuser Scripts
LoadRunner emulates an environment in which thousands of users work with a
In

client/server system concurrently. To do this, LoadRunner replaces the human user


with a virtual user (Vuser). The actions that a Vuser performs are described in a
Vuser script. LoadRunner supplies a variety of tools to help you develop your Vuser
scripts.

This chapter includes:


Find
• Introducing Vusers
• Looking at Vuser Types ?
• Developing Vuser Scripts
• Using This Guide

Creating Vuser Scripts Chapter 1, page 2


Introducing Vuser Scripts • Developing Vuser Scripts

Introducing Vusers
LoadRunner replaces human users with virtual users or Vusers. Vusers emulate
the actions of human users by performing typical business processes. Each action
that a Vuser performs submits input to the client/server system. By increasing the
number of Vusers, you increase the load on the system. While a workstation
accommodates only a single human user, many Vusers can run concurrently on a
single workstation.
Find
To emulate conditions of heavy user load, you create a large number of Vusers that
perform a series of tasks. For example, you can observe how a server behaves ?
when one hundred Vusers simultaneously withdraw cash from a bank’s ATMs.

Using LoadRunner, you divide your client/server performance testing requirements


into scenarios. A scenario defines the events that occur during each testing
session. Thus, for example, a scenario defines and controls the number of users
to emulate, the actions that they perform, and the machines on which they run their
emulations.

Creating Vuser Scripts Chapter 1, page 3


Introducing Vuser Scripts • Developing Vuser Scripts

LoadRunner has a variety of Vuser types, each type suited to a particular load
testing environment. This enables you to use Vusers to accurately model and
emulate real world situations. The actions that a Vuser performs during the
In

scenario are described in a Vuser script. The Vuser scripts include functions that
measure and record the performance of the server during the scenario. Each Vuser
type requires a particular type of Vuser script. Creating the Vuser scripts required
for a scenario is part of the LoadRunner testing process.

The chart below shows the five steps of the LoadRunner testing process. This
guide describes Step II, “Creating Vuser Scripts.” For details about the other steps,
refer to your LoadRunner Controller User’s Guide.
Find

?
St ep I Plan n in g t h e Test

St ep II Cr eat in g Vuser Scr i p t s

St ep III Cr eat in g t h e Scen ar io

St ep IV Run n i n g t h e Scen ar i o

St ep V An al yzi n g Test Result s

Creating Vuser Scripts Chapter 1, page 4


Introducing Vuser Scripts • Developing Vuser Scripts

Looking at Vuser Types


LoadRunner provides a variety of Vuser technologies that enable you to generate
server load when using different types of client/server architectures. Each Vuser
technology is suited to a particular architecture, and results in a specific type of
Vuser. For example, you use RTE Vusers to operate terminal emulators; TUXEDO
Vusers to emulate TUXEDO clients communicating with a TUXEDO application
server; Web Vusers to emulate users operating Web browsers. The various Vuser
technologies can be used alone or together, to create effective load testing
scenarios. Find

The following table summarizes the use of the various Vuser types: ?
Vuser Type Used to Emulate ...

a database (CtLib, DbLib, Informix, Oracle, and ODBC)


Database application accessing a server. Database Vusers use
API calls to directly access a server.

a TUXEDO client communicating with a TUXEDO


TUXEDO application server. TUXEDO Vusers use API calls to
directly access a server.

a client application communicating with a server using


the Advanced Program to Program Communication
APPC
(APPC) protocol. APPC Vusers use API calls to directly
access the server.

Creating Vuser Scripts Chapter 1, page 5


Introducing Vuser Scripts • Developing Vuser Scripts

In

Vuser Type Used to Emulate ...

a client application communicating with a server using


Windows Sockets the Windows Sockets protocol. Windows Sockets
Vusers use API calls to directly access a server.

a Baan session, together with it’s graphical user


Baan
interface.

a user operating a Java applet or application, together


Java Find
with its graphical user interface.

RTE (Windows) a Windows-based terminal emulator application. ?


RTE (UNIX) a UNIX-based terminal emulator application.

Web a Web browsing session.

a Windows-based application, together with its


GUI (Windows)
graphical user interface.

a UNIX-based application, together with its graphical


GUI (UNIX)
user interface.

Creating Vuser Scripts Chapter 1, page 6


Introducing Vuser Scripts • Developing Vuser Scripts

Developing Vuser Scripts


The structure and content of a Vuser script differ from one Vuser type to another.
For example, Database Vuser scripts always have three sections, are written in a
code that resembles C, and include SQL calls to a database server. In contrast,
GUI Vuser scripts have only one section, and are written in TSL (test script
language).

The following diagram outlines the process of developing a Vuser script.


Find

Recor d a b asic Vuser scr ip t


?
En h an ce/ ed i t t h e Vuser
scr ip t

Con f i g ur e Run -Ti m e set t in g s

Run t h e Vuser scr i p t in


st an d -alon e m od e

In cor p or at e t h e Vuser scr ip t


in t o a Load Run n er scen ar io

Creating Vuser Scripts Chapter 1, page 7


Introducing Vuser Scripts • Developing Vuser Scripts

You begin the process of developing a Vuser script by recording a basic script. In

LoadRunner provides you with a number of tools for recording Vuser scripts (see
the table below for a list of the tools). You enhance the basic script by adding
control-flow structures, and by inserting transactions and rendezvous points into
the script. You then configure the run-time settings. The run-time settings include
loop, log, and timing information, and define how the Vuser will behave when it
executes the Vuser script. To verify that the script runs correctly, you run it in
stand-alone mode. When your script runs correctly, you incorporate it into a
LoadRunner scenario. Find

Creating Vuser Scripts Chapter 1, page 8


Introducing Vuser Scripts • Developing Vuser Scripts

You use the following LoadRunner tools to develop Vuser scripts:

LoadRunner’s primary tool for developing Vuser scripts. The


Vuser Script Generator, also known as VuGen, is a Windows-
based application which enables you to develop a wide variety of
Vuser scripts. VuGen not only records scripts, but can also run
VuGen
them. Many of the scripts generated by VuGen can be run on
both Windows and UNIX platforms.
VuGen creates Database, Tuxedo, Windows Sockets, APPC,
Baan, Java and RTE (Windows) Vuser scripts.
Find
A UNIX-based application used to develop only (Remote
RTEGen Terminal Emulator) RTE Vuser scripts that run on UNIX
platforms. ?
Mercury Interactive’s tool for automated testing of Windows-
based GUI applications. You enhance the test scripts that
WinRunner
WinRunner generates to produce GUI Vuser scripts that run on
Windows platforms.

An enhanced version of XRunner, Mercury Interactive’s tool for


automated testing of UNIX-based GUI applications. You
VXRunner
enhance the test scripts that VXRunner generates to produce
GUI Vuser scripts that run on UNIX platforms.

An extension of SiteManager, Mercury Interactive's


comprehensive web site management tool. QuickTest enables
QuickTest
you to quickly and easily create Web Vuser scripts while
navigating your web site.

Creating Vuser Scripts Chapter 1, page 9


Introducing Vuser Scripts • Developing Vuser Scripts

Using This Guide


In

This guide is divided into three sections:

• Part I, “Introducing Vuser Scripts,” is applicable to all types of Vuser scripts.


• Part II, “Working with VuGen,” is applicable only to those Vuser scripts that are
recorded and/or run using VuGen. Part II is not applicable when developing RTE
(UNIX) and GUI (both Windows and UNIX) Vuser scripts.
• Parts III to IX apply to specific Vuser script types (as shown below).
Find

Creating Vuser Scripts Chapter 1, page 10


Introducing Vuser Scripts • Developing Vuser Scripts

The table below summarizes the parts applicable to each Vuser type:

Vuser Type Read the following...

Database
Part I, Part II, & Part III
(CtLib, DbLib, Informix, Oracle, and ODBC)

TUXEDO Part I, Part II, & Part IV

Windows Sockets Part I, Part II, & Part V

APPC Part I, Part II, Part VI

RTE (Windows) Part I, Part II, & Part VII Find


RTE (UNIX) Part I & Chapter 13

Web Part I, Part II, & Part VIII


?
Baan Part I, Part II, Part IX

Java Part I, Part II, Part X

GUI (Windows) Part I & Part XI

GUI (UNIX) Part I & Part XI

Note that to develop RTE (UNIX) and GUI Vuser scripts, you need to refer to
additional guides:

GUI (Windows): WinRunner User’s Guide


GUI (UNIX): Creating GUI Virtual User Scripts (UNIX) guide
RTE (UNIX): Creating RTE Virtual User Scripts (UNIX) guide

Creating Vuser Scripts Chapter 1, page 11


Part II

In

Working with VuGen

Find

Creating Vuser Scripts Chapter , page 12


Working with VuGen
Introducing VuGen
2
Introducing VuGen
The Vuser Script Generator, VuGen, enables you to record and run Vuser scripts
In

for a variety of application types and communication protocols.

This chapter describes:

• Recording Vuser Scripts with VuGen


• Running Vuser Scripts with VuGen

Find
Understanding VuGen Code
• Using General Vuser Functions ?
This chapter applies to APPC, Baan, Database, RTE (Windows), Java,
TUXEDO, Web, and Windows Sockets Vuser scripts only.

Creating Vuser Scripts Chapter 2, page 13


Working with VuGen • Introducing VuGen

About VuGen
In

The Vuser Script Generator, also known as VuGen, is LoadRunner’s primary tool
for developing Vuser scripts. VuGen is a Windows-based application that not only
records scripts, but also runs them. Running scripts from VuGen is useful when
debugging. It enables you to emulate how a Vuser script will run when executed in
a LoadRunner scenario from the Controller.

Note: VuGen records sessions on Windows platforms only. However, a recorded Find
Vuser script can run on either a Windows or a UNIX platform.
?
When you record a Vuser script, VuGen generates and inserts various functions
into the script. These functions include general Vuser functions and protocol-
specific functions. The general Vuser functions, also known as LR functions, allow
you to obtain information about Vusers running in a scenario. The protocol-specific
functions are specific to the Vuser type. For example, VuGen inserts LRT functions
into a TUXEDO script, and LRS functions into a Windows Sockets script.

The general Vuser functions and the protocol-specific functions together form the
LoadRunner API and enable Vusers to communicate directly with a server.

Creating Vuser Scripts Chapter 2, page 14


Working with VuGen • Introducing VuGen

Recording Vuser Scripts with VuGen


You use VuGen to develop a Vuser script by recording a user performing typical
business processes on a client application. VuGen creates the script by recording
the activity between the client and the server. For example, in database
applications, VuGen monitors the client end of the database and traces all the
requests sent to, and received from, the database server.

o Find

?
client running
an application
VuGen Server

Instead of manually creating a Vuser script by programming the application’s API


function calls to the server, you use VuGen to:

• monitor the communication between the application and the server


• generate the required function calls
• insert the generated function calls into a Vuser script

Creating Vuser Scripts Chapter 2, page 15


Working with VuGen • Introducing VuGen

VuGen greatly simplifies the task of creating Vuser scripts by reducing the need
for manual programming. In

Each Vuser script that you create with VuGen can communicate directly with a
server by executing calls to the server API—without relying on client software. You
can therefore use Vusers to check server performance even before the user
interface of the client software has been fully developed.

Find

?
client running
Server
an application

In addition, when a Vuser communicates directly with a server, system resources


are not used on a user interface. This lets you run a large number of Vusers
simultaneously on a single workstation. This in turn allows you to use only a few
testing machines to emulate large server loads.

Creating Vuser Scripts Chapter 2, page 16


Working with VuGen • Introducing VuGen

Running Vuser Scripts with VuGen


In order to perform load testing with your Vuser script, you need to incorporate the
script into a LoadRunner scenario. Before integrating the script into a scenario, you
can check the script’s functionality by running it from VuGen. If the script execution
is successful, you can then incorporate it into a scenario. For more information on
LoadRunner scenarios, refer to your LoadRunner Controller User’s Guide.

Before you run a Vuser script, you set the run-time settings. These settings include
the number of loops, the pacing, and the think time that will be applied to the Vuser Find
when the script is run. The run-time settings enable VuGen to run a script the same
way as the Controller does. For more information on configuring run-time settings, ?
see Chapter 6, Configuring Run-Time Settings.

When you run a recorded script, the script is processed by an interpreter and then
executed. You do not need to compile a script. If you modify a script, any syntax
errors introduced into the script are noted by the interpreter. You can also call
external functions from your script that can be recognized and executed by the
interpreter. For more information, see Appendix B, Calling External Functions.

Advanced users can compile a recorded script to create an executable program.


For more information, see Appendix A, Configuring VuGen.

Creating Vuser Scripts Chapter 2, page 17


Working with VuGen • Introducing VuGen

Understanding VuGen Code


In

When you record a script, VuGen generates Vuser functions and inserts them into
a Vuser script. There are two types of Vuser functions: general Vuser functions and
Vuser specific functions.

General Vuser Functions


The general Vuser functions are also called LR functions because they always have
an lr prefix. These functions can be used in any type of Vuser script. They enable Find
you to get run-time information about a Vuser, its Vuser Group, and its host. For
example, the lr_start_transaction function marks the beginning of a transaction. ?
You can also use these functions to send messages to the output, indicating an
error or a warning.

Online See Using General Vuser Functions on page 21 for a list of LR functions, and for
Function details refer to the LoadRunner Online Function Reference (available from the
Reference VuGen Help menu).

Creating Vuser Scripts Chapter 2, page 18


Working with VuGen • Introducing VuGen

Protocol-Specific Functions
In addition to the general Vuser functions, VuGen also generates and inserts
protocol-specific functions into a Vuser script while you record. The protocol-
specific functions are particular to the type of Vuser that you are recording: VuGen
inserts LRT functions into a TUXEDO script; LRS functions into a Windows
Sockets script; LRD functions into a Database script; WEB functions into a Web
script; LRA functions into an APPC script.
Online Find
Function Refer to the LoadRunner Online Function Reference for details of the protocol-
Reference specific functions. ?

Creating Vuser Scripts Chapter 2, page 19


Working with VuGen • Introducing VuGen

The following segment from a Database Vuser script uses a number of


LRD functions:

In

/*
* Code generated from recorded SQL by DB Virtual User Generator
* Session was recorded on: Wed Feb 19 09:06:23 1998
*/
#include "vdf.h"
#include "print.inl"
int LR_FUNC vuser_init(LR_PARAM p)
{
lrd_init(&InitInfo, DBTypeVersion); Find
lrd_open_connection(&Con1, LRD_DBTYPE_CTLIB, "s1",
"tiger", "hp1", "", 0, 0, 0);
lrd_open_cursor(&Csr1, Con1, 0);
?
lrd_open_cursor(&Csr2, Con1, 0);
lrd_stmt(Csr2, "select parameter, value from v$nls_parameters
" " where .. . .);. . .

VuGen generates Vuser scripts in C. All standard C conventions apply to the


scripts, including control flow and syntax. You can add comments and conditional
statements to the script just as you do in other C programs. You declare and
define variables using regular C conventions.

Note: The C Interpreter used by LoadRunner accepts the ANSI C language. No


Microsoft extensions to ANSI C are supported. For more information about using
C functions in your scripts, refer to Chapter 4, Enhancing Vuser Scripts.

Creating Vuser Scripts Chapter 2, page 20


Working with VuGen • Introducing VuGen

Using General Vuser Functions


You can enhance a Vuser script by adding general Vuser functions. Only a few of
the general Vuser functions are generated while you record with VuGen—the
remaining functions must be manually programmed into a script. Each general
Vuser function has an lr prefix.

Transaction and Rendezvous Functions


Find
When you record a script with VuGen, you can use the Recording toolbar to insert
transaction and rendezvous functions into your script: ?
lr_start_transaction Marks the beginning of a LoadRunner
transaction.
lr_end_transaction Marks the end of a LoadRunner transaction.
lr_rendezvous Sets a rendezvous point in a Vuser script.

Creating Vuser Scripts Chapter 2, page 21


Working with VuGen • Introducing VuGen

Vuser Think Time Functions

While you record a Vuser script, VuGen inserts a Think Time statement each time In

you pause between actions:

lr_think_time Pauses script execution to emulate think time—


the time a real user pauses to think between
actions.

Command Line Parsing Functions


Find
lr_get_attrib_double Retrieves a double type variable used on the
LoadRunner command line.
?
lr_get_attrib_long Retrieves a long type variable used on the
LoadRunner command line.
lr_get_attrib_string Retrieves a string used on the command line.

Informational Functions
lr_user_data_point Records a user-defined data sample.
lr_whoami Returns information about a Vuser to the Vuser
script.
lr_get_host_name Returns the name of the host executing the Vuser
script.
lr_get_master_host_name Returns the name of the machine running the
LoadRunner Controller.

Creating Vuser Scripts Chapter 2, page 22


Working with VuGen • Introducing VuGen

String Functions
lr_eval_string Replaces a parameter with its current value.
lr_save_string Saves a null-terminated string to a parameter.
lr_save_var Saves a variable length string to a parameter.
lr_save_datetime Saves the current date and time to a parameter.

Message Functions
Find
lr_log_message Sends a message to a log file.
lr_output_message Sends a message to the Output window. ?
lr_set_debug_message Sets a debug message class.
lr_error_message Sends an error message to the Output window.

Run-Time Functions
lr_peek_events Indicates a point to search for LoadRunner
events.

Creating Vuser Scripts Chapter 2, page 23


Working with VuGen
Recording with VuGen
3
Recording with VuGen
VuGen creates a Vuser script by recording the communication between a client
In

application and a server.

This chapter describes:

• Creating a Vuser Script


• Vuser Script Sections

Find
Recording Vuser Scripts

This chapter applies to APPC, Database, RTE (Windows), TUXEDO, Baan,


?
Java, and Windows Sockets Vuser scripts only.

Creating Vuser Scripts Chapter 3, page 24


Working with VuGen • Recording with VuGen

About Recording with VuGen


VuGen enables you to create a Vuser script by recording actions from an
application. When you run the recorded script, it emulates activity between the
client and server. VuGen eliminates the need to manually program Vuser scripts.

Each Vuser script that you create using VuGen contains three sections: vuser_init,
Actions, and vuser_end. During recording, you can select the section of the script
into which VuGen will insert the recorded functions. In general, you record a log in
to a server into the vuser_init section; client activity into the Actions section; and Find
the logoff procedure into the vuser_end section.

While recording, you can insert transactions and rendezvous points. For details,
?
see Chapter 4, Enhancing Vuser Scripts.

Creating Vuser Scripts Chapter 3, page 25


Working with VuGen • Recording with VuGen

Creating a Vuser Script


In

Before you begin recording, you must create a Vuser script. If you are recording a
Java, Baan, or RTE application, you can also record into an existing script.

To create a new Vuser script:


1 Start VuGen. Select Start > Programs > LoadRunner > Virtual User Generator.
The VuGen window opens.

Find

Creating Vuser Scripts Chapter 3, page 26


Working with VuGen • Recording with VuGen

2 Click the New button. The New Virtual User dialog box opens with a list of the
supported Vuser script types.

Find

3 Select a Vuser script type and then click OK. ?

Creating Vuser Scripts Chapter 3, page 27


Working with VuGen • Recording with VuGen

Vuser Script Sections


In

Each Vuser script that you create using VuGen contains three sections: vuser_init,
Actions, and vuser_end. Before and during recording, you can select the section of
the script into which VuGen will insert the recorded functions. The following table
shows when to record into each section, and when each section is executed.

Script Section Used when recording... Is played back when...

vuser_init a login to a server the Vuser is initialized (loaded) Find


Actions client activity the Vuser is in “Running” status

vuser_end a log off procedure the Vuser finishes or is stopped


?

Note that the vuser_init and vuser_end sections are not repeated when you run
multiple iterations of a Vuser script—only the Actions is repeated. For more
information on the iteration settings, see Chapter 6, Configuring Run-Time
Settings.

Creating Vuser Scripts Chapter 3, page 28


Working with VuGen • Recording with VuGen

Recording Vuser Scripts


The recording procedure differs slightly between protocols. For Baan and Java
Vusers, see page 35. For RTE Vusers, see Chapter 15, Recording RTE Vuser
Scripts. For all other Vusers types, see the section below.

To record for APPC, Database, TUXEDO, or Windows Socket Vusers:


1 If the Start Recording dialog box is not open, click the Start Recording button. The
Start Recording dialog box opens.
Find

2 Specify an application to record. To locate your application, click Browse to the


right of the Program to Record box.

Creating Vuser Scripts Chapter 3, page 29


Working with VuGen • Recording with VuGen

Note that you can add command line parameters to your application by filling them
in manually in the Program to Record box, to the right of the application name. For In

example:

f:\orant\bin\plus32.exe peter@neptune

starts plus32.exe, and connects the user Peter to the server Neptune.
3 Specify a working directory for your application.
4 In the Start Recording into Section box, select the section in which you want to Find
begin recording. The available sections are vuser_init, Actions, and vuser_end.
?
5 Click OK to begin recording. VuGen starts your application and the Recording
toolbar appears.

Perform typical actions within your application. To switch sections during


recording, use the floating toolbar.

Creating Vuser Scripts Chapter 3, page 30


Working with VuGen • Recording with VuGen

6 After recording typical user actions, select the vuser_end section from the floating
toolbar.

7 Perform the log off procedure. VuGen records the procedure into the vuser_end
section of the script. Find

Creating Vuser Scripts Chapter 3, page 31


Working with VuGen • Recording with VuGen

8 Click Stop Recording on the Recording toolbar. The main VuGen window displays
all the recorded statements.
In

Find

9 Click Save to save the recorded session. The Save As dialog box opens (for new
Vuser scripts only). Specify a script name.

Note: Do not name the script init, run or end, since these names are used by
VuGen.

Creating Vuser Scripts Chapter 3, page 32


Working with VuGen • Recording with VuGen

After recording a script, you can manually edit the script in VuGen’s main window.
VuGen creates a series of configuration, data, and source code files during
recording. These files are used to execute the Vuser actions.

You can display the contents of each of these sections in the main VuGen window.
You can display the contents of only a single section at a time. To display a
section, highlight its name in the Sections box.

Find

Creating Vuser Scripts Chapter 3, page 33


Working with VuGen • Recording with VuGen

In the following example, the Actions section of a Database Vuser script is


displayed. In

Find

Recording for Baan and Java Vusers


The procedure for recording Baan and Java Vusers differ slightly from other Vusers.
Refer to Chapter 24, Creating Baan Vuser Scripts or Chapter 25, Creating Java
Vuser Scripts for additional information about recording these Vusers.

Creating Vuser Scripts Chapter 3, page 34


Working with VuGen • Recording with VuGen

After creating a new Baan or Java script, perform the following procedure:

To record for Baan and Java Vusers:


1 In the Sections box, select the section into which you want to record. The available
sections are vuser_init, Actions, and vuser_end.

Find

Creating Vuser Scripts Chapter 3, page 35


Working with VuGen • Recording with VuGen

2 Click the Start Recording button. The Start Recording dialog box opens.
In

Find

3 Specify an application to record. To locate your application, click Browse to the ?


right of the Program to Record box.
Note that you can add command line parameters to your application by manually
entering them in the Program to Record box, to the right of the application name.
For example:

"C:\jdk115\bin\javac.exe D:\AWT-Demo\Periodic.java”

starts the Periodic.java application.


4 Specify a working directory for your application.
5 Click OK to close the dialog box and begin recording.

Creating Vuser Scripts Chapter 3, page 36


Working with VuGen • Recording with VuGen

6 Perform all of the desired user actions. When you complete all of the actions,
select the vuser_end section and perform the log off procedure.
7 Click Stop Recording on the Recording toolbar. The main VuGen window displays
all the recorded statements.
8 Click Save to save the recorded session. The Save As dialog box opens (for new
Vuser scripts only). Specify a script name.

Note: Do not name the script init, run or end, since these names are used by Find
VuGen.
?
After recording a script, you can manually edit the script in VuGen’s main window.
VuGen creates a series of configuration, data, and source code files during
recording. These files are used to execute the Vuser actions.

After recording, you can view the contents of each of the vuser_init, Actions, and
vuser_end sections in the main VuGen window. To display a section, highlight its
name in the Sections box.

Creating Vuser Scripts Chapter 3, page 37


Working with VuGen
Enhancing Vuser Scripts
4
Enhancing Vuser Scripts
You can enhance a Vuser script—either during and after recording—by adding
In

Vuser functions. The Vuser functions can help measure server performance,
control server load, provide more information about a Vuser, about the scenario,
and can help you detect problems during script execution. This chapter describes:

• Inserting Transactions
• Inserting Rendezvous Points
Find
• Inserting Comments
• Obtaining Vuser Information
?
• Sending Messages to Output
• Handling Command Line Arguments
• Using C Functions in Your Script

This chapter applies to APPC, Baan, Java, Database, RTE (Windows),


TUXEDO, Web, and Windows Sockets Vuser scripts only.

Creating Vuser Scripts Chapter 4, page 38


Working with VuGen • Enhancing Vuser Scripts

About Enhancing Scripts


When you create a Vuser script, you can enhance its capabilities by adding Vuser
functions. For example, you can add debugging code, or functions that retrieve run-
time information about the Vusers participating in the scenario. VuGen helps you
generate most of the Vuser functions by recording from your application—other
Online functions you must manually type into the Vuser script. For the syntax of all the
Function functions, refer to the LoadRunner Online Function Reference (available from
Reference the VuGen Help menu).
Find
LoadRunner provides several libraries whose functions enhance a script. You can
use general Vuser functions or functions from the library specific to your ?
application—such as Oracle, CtLib, ODBC, TUXEDO, Web, or Windows Sockets.
In addition, you can enhance your Vuser script with standard ANSI C functions.

Online This chapter discusses the use of only the most common Vuser functions. For
Function additional information about Vuser functions, refer to the LoadRunner Online
Reference Function Reference (available from the VuGen Help menu).

Creating Vuser Scripts Chapter 4, page 39


Working with VuGen • Enhancing Vuser Scripts

Inserting Transactions In

You define transactions to measure the performance of the server. Each


transaction measures the time it takes for the server to respond to specified Vuser
requests. These requests can be simple tasks such as waiting for a response for a
single query, or complex tasks, such as submitting several queries and generating
a report.

To measure a transaction, you insert Vuser functions to mark the beginning and
end of a task. Within a script, you can mark an unlimited number of transactions for Find
analysis, each with a different name.
?
During scenario execution, the Controller measures the time that it takes to perform
each transaction. After the scenario run, you analyze the server’s performance per
transaction using LoadRunner’s graphs and reports.

Creating Vuser Scripts Chapter 4, page 40


Working with VuGen • Enhancing Vuser Scripts

To mark the start of a LoadRunner transaction:


1 While recording a Vuser script, click the Start Transaction button on the Recording
toolbar. The Start Transaction dialog box opens.

2 Type a transaction name in the Name box. Find

Click OK to accept the transaction name. LoadRunner inserts an ?


lr_start_transaction statement into the Vuser script. For example, the following
function indicates the start of the trans1 transaction:

lr_start_transaction(“trans1”);

Note: You can insert transactions into your script after you complete a recording
session by selecting Insert > Start Transaction from the VuGen menu.

Creating Vuser Scripts Chapter 4, page 41


Working with VuGen • Enhancing Vuser Scripts

To mark the end of a transaction: In

1 While recording a script, click the End Transaction button on the Recording
toolbar. The End Transaction dialog box opens.

Find

2 Click the arrow for a list of open transactions. Select the transaction to close.
?
Click OK to accept the transaction name. LoadRunner inserts an
lr_end_transaction statement into the Vuser script. For example, the following
function indicates the end of the trans1 transaction:

lr_end_transaction(“trans1”, LR_AUTO);

Creating Vuser Scripts Chapter 4, page 42


Working with VuGen • Enhancing Vuser Scripts

Inserting Rendezvous Points


To emulate heavy user load on your client/server system, you synchronize Vusers
to perform a task at exactly the same moment. You ensure that multiple Vusers act
simultaneously by creating a rendezvous point. When a Vuser arrives at the
rendezvous point, it is held by the Controller until all Vusers participating in the
rendezvous arrive. When the rendezvous conditions are met, the Vusers are
released by the Controller.

You designate the meeting place by inserting a rendezvous point into your Vuser Find
script. When a Vuser executes a script and encounters the rendezvous point, script
execution is paused and the Vuser waits for permission from the Controller to ?
continue. After the Vuser is released from the rendezvous, it performs the next task
in the script.

Creating Vuser Scripts Chapter 4, page 43


Working with VuGen • Enhancing Vuser Scripts

To insert a rendezvous point:


1 While recording a Vuser script, click the Rendezvous button on the Recording
In

toolbar. The Rendezvous dialog box opens.

Find
2 Type a name for the rendezvous point in the Name box.
Click OK to accept the rendezvous name. VuGen inserts an lr_rendezvous ?
statement into the Vuser script. For example, the following function defines a
rendezvous point named rendezvous1:

lr_rendezvous(“rendezvous1”);

Note: You can insert rendezvous points into your script even after you complete a
recording session, by selecting Insert > Rendezvous from the VuGen menu.

Creating Vuser Scripts Chapter 4, page 44


Working with VuGen • Enhancing Vuser Scripts

Inserting Comments
VuGen allows you to insert comments between Vuser activities. You can insert a
comment to describe an activity or to provide information about a specific
operation. For example, if you are recording database actions, you could insert a
comment to mark the first query, such as “This is the first query.”

To insert a comment:
1 While recording a script, click the Comment button on the Recording tool bar. The
Find
Insert Comment dialog box opens.
?

2 Type the comment into the text box.

Creating Vuser Scripts Chapter 4, page 45


Working with VuGen • Enhancing Vuser Scripts

3 Click OK to insert the comment and close the dialog box. The text is placed at the
current point in the script, enclosed by comment markers. The following script In

segment shows how a comment appears in a Vuser script:

/*
* This is the first query
*/

Find
Note: You can insert comments into your script even after you complete a
recording session, by selecting Insert > Comment from the VuGen menu. ?

Creating Vuser Scripts Chapter 4, page 46


Working with VuGen • Enhancing Vuser Scripts

Obtaining Vuser Information


You can add the following functions to your Vuser scripts to retrieve Vuser
information:

lr_whoami Returns the Vuser ID, Group, and scenario ID for


a Vuser.
lr_get_host_name Returns the name of the host for this Vuser.
lr_get_master_host_name Returns the name of the LoadRunner Controller
Find
host.
lr_get_attrib_string Returns a string containing command line ?
argument values or run-time information such as
the Vuser ID or the host name (as an alternate to
the above functions).

Online For more information about each of these functions, refer to the LoadRunner
Function Online Function Reference (available from the VuGen Help menu).
Reference

Creating Vuser Scripts Chapter 4, page 47


Working with VuGen • Enhancing Vuser Scripts

Sending Messages to Output


In

When you run a scenario, the Controller’s Output window displays valuable
information about script execution. You can include statements in each script to
send error and notification messages to the Controller—which the Controller will
display in the Output window. For example, you could insert a message that
displays the current state of the client application. You can also save these
messages to a file.

Find
Note: Do not to send messages from within a transaction. Doing so lengthens the
transaction execution time and may skew the actual transaction results. ?

You can use the following message functions in your Vuser scripts:

lr_error_message Sends an error message to the output window.


lr_output_message Sends a special notification to the output window.
lr_log_message Sends an output message directly to a file,
output.txt, located in the Vuser script directory.
This function is useful in preventing output
messages from interfering with TCP/IP traffic.
lr_vuser_status_message Generates and prints formatted output to the
Controller Vuser status area.

Creating Vuser Scripts Chapter 4, page 48


Working with VuGen • Enhancing Vuser Scripts

You can insert lr_output_message functions by using VuGen. For example, if you
are recording database actions, you could insert a message to indicate the first
query, “This is the first query.”

To insert an lr_output_message function:


1 Choose Insert > Message. The Insert Message dialog box opens.

Find

?
2 Type the message into the Message box.
3 Click OK to insert the message and close the dialog box. An lr_output_message
function is inserted at the current point in the script.

Online For more information about the message functions, refer to the LoadRunner
Function Online Function Reference (available from the VuGen Help menu).
Reference

Creating Vuser Scripts Chapter 4, page 49


Working with VuGen • Enhancing Vuser Scripts

Handling Command Line Arguments


In

You can pass values to a Vuser script at run-time by specifying command line
arguments when you run the script. LoadRunner has three lr_get_attrib_
functions that allow you to read the command line arguments, and then pass the
values into a Vuser script. The following lr_get_attrib_ functions exist:

lr_get_attrib_double to retrieve double precision floating point type


arguments
lr_get_attrib_long to retrieve long integer type arguments Find

lr_get_attrib_string to retrieve character strings


?

Creating Vuser Scripts Chapter 4, page 50


Working with VuGen • Enhancing Vuser Scripts

Your command line should have one of the following formats:

test_name -argument argument_value -argument argument_value

test_name /argument argument_value /argument argument_value

where the arguments and their values are listed in pairs, after the test name.

For example, Find

test1 -host pc4 -loop 5 ?


shows the command line string used to repeat test1 five times on the host pc4.

For more information on the command line parsing functions, refer to the
Online LoadRunner Online Function Reference (available from the VuGen Help
Function menu). For details on including arguments on a command line, refer to your
Reference LoadRunner Controller User’s Guide.

Creating Vuser Scripts Chapter 4, page 51


Working with VuGen • Enhancing Vuser Scripts

Using C Functions in Your Script


In

VuGen generates Vuser scripts in C. All standard C conventions apply to the


scripts, including control flow and syntax. You can add comments and conditional
statements to the script just as you do in other C programs. You declare and
define variables using regular C conventions.

The C Interpreter used by LoadRunner accepts the standard ANSI C language. It


does not support any Microsoft extensions to ANSI C.
Find
Before you add any C functions to your script, note the following limitations:

• A Vuser script cannot pass the address of one of its functions as a callback to a
?
library function
• stdargs, longjmp and alloca are not supported.
• No structure arguments or return types. (Pointer to structures are OK).
• string literals are read-only. Any attempt to write to a string literal will generate an
access violation.

Creating Vuser Scripts Chapter 4, page 52


Working with VuGen • Enhancing Vuser Scripts

Calling libc Functions


You can call libc functions, but since the interpreter used by LoadRunner does not
support any Microsoft extensions to ANSI C, you cannot use Microsoft's include
files.

You can either write your own prototypes when necessary, or ask Mercury
Customer Support to send you ANSI-compatible include files containing prototypes
for libc functions.

Find
Linking Mode
The C interpreter used by LoadRunner uses a “lazy” linking mode in the sense that ?
a function need not be defined at the start of a run, as long as it is defined before
it is used. For example:

lr_load_dll("mydll.dll");
myfun(); /* defined in mydll.dll -- can be called directly,
immediately after myfun.dll is loaded. */

Creating Vuser Scripts Chapter 4, page 53


Working with VuGen
Defining Parameters
5
Defining Parameters
When you record a process, VuGen generates a script containing the actual values
In

entered during recording. Suppose you want to perform the script’s actions (query,
submit, etc.) using different values than those recorded. To do this, you replace the
recorded values with parameters, or you parameterize your script.

This chapter describes:

• Defining Parameters Find


• Understanding Parameter Types

?
Updating Parameter Values for Files
• Updating Parameter Values for Internal Data Types
• Maintaining Parameters

This chapter applies to APPC, Baan, Database, Java, RTE (Windows),


TUXEDO, Web, and Windows Sockets Vuser scripts only.

Creating Vuser Scripts Chapter 5, page 54


Working with VuGen • Defining Parameters

About Defining Parameters


When you record a business process with VuGen, it records the actual values that
you entered during the recording session.

For example, in following database application, VuGen recorded a statement that


populated the employees table with the id of 121 and the name “Tom”.

lrd_stmt(Csr1, "insert into employees (id, name) values (121,'Tom')", ...);


Find

When you replay the script using multiple Vusers and loops, you do not want to ?
repeatedly use the same values, 121 and Tom. Instead, you replace the constant
values with parameters.

lrd_stmt(Csr1,"insert into employees (id,name) values (<id>,<f_name>)". );

In subsequent runs, the Vuser substitutes the parameter with values from a source
that you specify. The data source can be a file or other internally generated
variables. For more information about data sources, see Understanding
Parameter Types on page 61.

Creating Vuser Scripts Chapter 5, page 55


Working with VuGen • Defining Parameters

By parameterizing a script, you reduce the size of the scripts. Another advantage
In

of parameterization is the ability to input unique values. For example, certain


database applications will not let the same user logon twice. If several Vusers try
to log on using the same username, only one will succeed. If you parameterize the
login information and assign unique values to each Vuser, all of them will be able
to log on.

To enable parameterization, you must:

• Define parameters in a parameter list. Find

• Replace the constant values with parameters. ?

Creating Vuser Scripts Chapter 5, page 56


Working with VuGen • Defining Parameters

Defining Parameters
To utilize parameterization, you must first define a parameter. You define a
parameter in the Parameter List dialog box and you specify its name, source, and
description. There is no limit to the number of parameters you can define for your
script.

To define and use a parameter:


1 Place the cursor on the text to parameterize and perform a right mouse click.
Find
2 Select Replace with a New Parameter. The New Parameter dialog box opens.
?

3 Type a name for the parameter in the Parameter Name box.


4 Select a parameter type from the menu list (File, Group Name, Host Name, Vuser
ID, Date/Time, Random, Unique Number, or Iteration Number). For information on
the data types and their properties, see Understanding Parameter Types on
page 61.

Creating Vuser Scripts Chapter 5, page 57


Working with VuGen • Defining Parameters

5 Click Properties. The Parameter List dialog box opens with the properties relevant
for the parameter type. In

Find

6 Enter the properties of the parameter. For more information, see Understanding
Parameter Types on page 61.

Creating Vuser Scripts Chapter 5, page 58


Working with VuGen • Defining Parameters

7 Click OK to close the Parameter List dialog box. VuGen replaces the text selected
in your script with the parameter.
8 To replace a constant with a previously defined parameter, perform a right-click
and select Replace with a Parameter. Choose a parameter from the pull-down list
of parameters. Note that if you use this method to define a parameter, you cannot
restore it to its original value.
9 For multiple occurrences of a constant value, place the cursor on the parameter
and perform a right-click. Choose Replace More Occurrences. The Search and
Replace dialog box opens. In the Find What box, enter the fixed value you want to Find
replace. In the Replace with box, enter the parameter name in angle brackets.
Check the appropriate boxes for matching whole words or case. Click Replace or ?
Replace All.

Use caution when using Replace All, especially when replacing number strings.
VuGen changes all occurrences of the string.

Creating Vuser Scripts Chapter 5, page 59


Working with VuGen • Defining Parameters

10 To restore a parameter to its original value, perform a right-click on the parameter


and choose Restore Original Value. In

11 To create a new parameter at any time, click the New Parameter button. The
VuGen creates a parameter, but does not automatically replace any selected text.
12 To change the parameter’s properties at any time, click the Parameter List button.
The Parameter List dialog box opens.

To test your script using different parameter values, configure VuGen to perform
multiple iterations. The script uses a different value for each iteration (if the Find
Advance row each iteration option is enabled). You set the number of iterations in
the run-time settings. ?

Creating Vuser Scripts Chapter 5, page 60


Working with VuGen • Defining Parameters

Understanding Parameter Types


When you define parameters you select a data type. The data type indicates the
source of data. You can use data from a file (an existing file or one you create with
VuGen) or data generated internally by VuGen.

Data can be stored in local or global files. You can specify an existing file or create
a new one with VuGen. LoadRunner retrieves data from the file during the scenario
run. For more information about data files, see Data Files on page 72.

Internal data is data that is generated automatically during scenario execution. The
available internal data types are: group name, host name, Vuser ID, iteration Find
number, date/time, random number, or unique number.
?
For internal data types, you specify a format for the parameter. You can choose an
existing format or specify a new one.

Creating Vuser Scripts Chapter 5, page 61


Working with VuGen • Defining Parameters

The formats indicate the length of parameter string and the text accompanying the
parameter. During the scenario, LoadRunner displays the parameter in the In

specified format, always maintaining the specified length for the parameter. For
example if you specified a format of %5d, (five digits to the left of the decimal point),
a Vuser ID of 5 is displayed as 00005, padding the single digit with zeros.

You can also specify a text string before and after the actual data. This text appears
together with the parameter during the scenario execution.

You can create your own format using a combination of string formats (for example Find
%4d) and text. For example, you could create the following format for the Date/Time
type: ?
Month: %m Day:%d Year: %Y

Once you create a format, you can save it to the list for future use. You can also edit
or remove formats from the list.

Creating Vuser Scripts Chapter 5, page 62


Working with VuGen • Defining Parameters

Group Name
Group Name replaces the parameter with the Group name of the Vuser. You set a
Group name when you create a scenario from the LoadRunner Controller. When
you run a script from VuGen, the Group name is always None.

When you select the Group Name type, the Format Properties tab opens.

Find

To set the format properties for the Group Name:


1 Select one of the available formats.
2 To specify text before or after the actual data, enter the text in the Text Format box.

Creating Vuser Scripts Chapter 5, page 63


Working with VuGen • Defining Parameters

Host Name
Host Name replaces the parameter with the name of the Vuser’s host. You assign
In

a host to Vusers through the Controller.

When you select the Host Name type, the Format Properties tab opens.

Find

To set the format properties for the Host Name:


1 Select one of the available formats.
2 To specify text before or after the actual data, enter the text in the Text Format box.

Creating Vuser Scripts Chapter 5, page 64


Working with VuGen • Defining Parameters

Vuser ID
Vuser ID replaces the parameter with the ID assigned to the Vuser by the Controller
during the scenario run. When you run a script from VuGen, the Vuser ID is always
1. When you select the Vuser ID type, the Format Properties tab opens.

Find

To set the format properties for the Vuser ID:


1 Select one of the available formats.
2 To specify text before or after the actual data, enter the text in the Text Format box.

Creating Vuser Scripts Chapter 5, page 65


Working with VuGen • Defining Parameters

Iteration
Iteration replaces the parameter with the current iteration number.
In

When you select the Iteration type, the Format Properties tab opens.

Find

To set the format properties for the Iterations:


1 Select one of the available formats.
2 To specify text before or after the actual data, enter the text in the Text Format box.

Creating Vuser Scripts Chapter 5, page 66


Working with VuGen • Defining Parameters

Date/Time
Date/Time replaces the parameter with the current date and/or time. To specify a
date/time format, you can select a format from the menu list or specify your own
format. You should select the format of the date and time as it appears in your
script.

When you select the Date/Time type, the Date/Time Properties tab opens
To set the Date/Time format:
1 Select one of the available formats or specify a new one. The format should
correspond to the date/time format recorded in your script.
Find

2 To specify text before or after the actual data, enter the text in the Date/Time
Format box.
3 Select an update method for the values. For more information on update methods
for internal values, see Updating Parameter Values for Internal Data Types on
page 81.

Creating Vuser Scripts Chapter 5, page 67


Working with VuGen • Defining Parameters

Random Number
Random Number replaces the parameter with a random number. You set a range
In

of random numbers by specifying minimum and maximum values.

You can use a Random Number value to sample your system’s behavior within the
possible range of values. For example, to run a query for 50 employees, where
employee ID numbers range from 1 through 1000, create 50 Vusers and set the
minimum to 1 and maximum to 1000. Each Vuser receives a random number, from
within the range of 1 and 100.
Find
When you select the Random type, the Random Number properties tab opens:
?

Creating Vuser Scripts Chapter 5, page 68


Working with VuGen • Defining Parameters

To set the properties for Random Number data:


1 Specify minimum and maximum values for the random number.
2 Select one of the available formats or create a new one.
3 To specify text before or after the actual data, enter the text in the Number Format
box.
4 Select an update method for the values. For more information on update methods
for internal values, see Updating Parameter Values for Internal Data Types on
page 81. Find

Creating Vuser Scripts Chapter 5, page 69


Working with VuGen • Defining Parameters

Unique Number
Unique Number replaces the parameter with a unique number. You specify a start
In

number and a block. The block indicates a block of numbers assigned to each
Vuser. Each Vuser begins at the bottom of its range and increments the ID for each
iteration. For example, if you set the Start number at 1 with a block of 500, the first
Vuser uses the value 1 and the next Vuser uses the value 501, in their first
iterations.

Find
Note: You need to make the block large enough so that all iterations can be
completed without running out of numbers. ?

The number of digits in the unique ID and the block size determine the number of
iterations and Vusers. For example, if you are limited to five digits using a block size
of 500, only 100,000 numbers are available. To run 1000 Vusers, each Vuser can
run 100 iterations.

You can use the Unique ID value to check your system’s behavior for all possible
values of the parameter. For example, to perform a query for all employees, with ID
numbers ranging from 1 through 90, create 90 Vusers and set the start number to
1 and block size to 1. Each Vuser receives a unique number, beginning with 1 and
ending with 90.

Creating Vuser Scripts Chapter 5, page 70


Working with VuGen • Defining Parameters

When you select the Unique type, the Unique Number properties tab opens:

Find

To set the properties for Unique Number data:


1 Specify a start value and a block size.
2 Select one of the available formats or create a new one.
3 To specify text before or after the actual data, enter the text in the Number Format
box.
4 Select an update method for the values. For more information on update methods
for internal values, see Updating Parameter Values for Internal Data Types on
page 81.

Creating Vuser Scripts Chapter 5, page 71


Working with VuGen • Defining Parameters

Data Files In

You define your own data in the form of a table. This data is stored in a file and
accessed by the Vuser during script execution. One file can contain values for many
parameters—the columns breaks are marked by delimiters.

Data files are useful if you have many known values for your parameter. In the
following example, the data file contains ID numbers and first names.

Find
id, first_name
120, John
121, Bill
?
122, Tom

You can create a data file from within VuGen or you can use an existing file in ASCII
format.

Creating Vuser Scripts Chapter 5, page 72


Working with VuGen • Defining Parameters

When using a data file, you must specify the following:

• the file path


• the column containing the data
• the column delimiter
• an assignment method

File: Specify a file path for new or existing files. By default, VuGen saves a newly
Find
created data file in the script’s directory. You can also specify a global directory.
Make sure that the global directory is available to all machines running the script.
?
Column: Specify the column for the selected parameter. You can specify a column
number or name.

Delimiter: Specify the column delimiter, the character used to separate the table’s
columns. You can specify a comma, tab, space, or any other character. Note that a
new row of data is indicated by a new line.

Update Method: Choose an update method for the table data to instruct
LoadRunner how to select parameters during test execution. For more information,
see Updating Parameter Values for Files on page 76.

Creating Vuser Scripts Chapter 5, page 73


Working with VuGen • Defining Parameters

When you select the File type, the File properties tab opens:
In

Find

To set the file properties:


1 Click Browse to set the file location. By default, all new data files are stored in the
script’s directory using the script_name.dat. Existing tables must have a .txt or .dat
extension.
2 Click Create to create a new data file. VuGen prompts you to create the data file.
Click OK. The Create button is replaced by the Edit button, and the parameter and
its original value appear in the File Preview section.
3 Click Edit. Notepad opens with the parameter’s original value. Enter parameter
values into the file in the form of a table. Use a delimiter such as a comma or tab
to indicate a column break. Begin a new line for each new table row.

Creating Vuser Scripts Chapter 5, page 74


Working with VuGen • Defining Parameters

4 In the Select Column section, specify the column containing data for the current
parameter. You can specify a column number or name.
5 In the File Format section, enter the column delimiter, the character used to
separate the columns in the table.
6 In the File Format section, indicate the starting line for the data. The header is line
0. To begin with the first line after the header, specify 1. If there is no header,
specify 0.
7 Select an assignment method from the Select Next row list: Sequential, Random,
Unique, or Same Line As. For more information, see Updating Parameter Values Find
for Files on page 76.
?

Creating Vuser Scripts Chapter 5, page 75


Working with VuGen • Defining Parameters

Updating Parameter Values for Files


In

When using values from a file, VuGen lets you specify the way in which you assign
values to the parameters. The available methods are:

• Sequential
• Random
• Unique
• Same Line As Find

Creating Vuser Scripts Chapter 5, page 76


Working with VuGen • Defining Parameters

Sequential
The Sequential method assigns parameter values to Vusers, sequentially. As a
running Vuser accesses the data table, it takes the next available row for each
iteration. For example, if your table has the following values,

First Name

Max

David

Michael
Find
John

Ron
?
Alex

Ken

Tom

the first Vuser takes Max in its first iteration, David in the second iteration, Michael
in the third iteration, etc. The second Vuser takes the same values: Max in the first
iteration, etc.

You can instruct your Vusers to advance one row for each iteration. If you disable
this option, all Vusers use the next available value for all iterations.

Note that if you call a parameter several times within a single iteration, the Vuser
uses the same value for all references to that parameter.

Creating Vuser Scripts Chapter 5, page 77


Working with VuGen • Defining Parameters

Random
The Random method assigns a random value from the data table to each Vuser at In

the start of each iteration.

Find

Creating Vuser Scripts Chapter 5, page 78


Working with VuGen • Defining Parameters

Unique
The Unique method assigns a unique sequential value to the parameter for each
Vuser. For example, if you have fifty Vusers in the scenario, and fifty values in your
data table, each Vuser is assigned a unique value during script execution. VuGen
assigns these values in sequential order.

Note that the Controller assigns table values to the parameters before the scenario
run, based on the number of iterations. For example, if your table has the values,

First Name Find


Max
?
David

Michael

John

Ron

Alex

Ken

and the Vusers are set to run three iterations, then the first Vuser takes Max,
David, and Michael. The second Vuser takes John, Ron, and Alex, etc. Make sure
there is enough data in the table for all the Vusers and their iterations. If you have
20 Vusers and you want to perform 5 iterations, your table must contain 100
unique values. If data is not available for a Vuser, the Controller returns an error.

Creating Vuser Scripts Chapter 5, page 79


Working with VuGen • Defining Parameters

Same Line As <parameter>


The Same line as <parameter> method assigns data from the same line as a
In

previously defined parameter. You must specify the column containing the data. A
list of all the defined parameters appears in the pull-down menu.

Note that at least one of the parameters must be assigned Sequential, Random, or
Unique. In the following example the table has three columns, and three
parameters are defined in the list: id1, name1, and title1.

Find
ID Name Title

132 Max Manager ?


187 David Engineer

189 Michael Clerk

193 John VP

238 Ron Salesman

You could instruct LoadRunner to assign Random for id1, while specifying that the
name1 and title1 parameters use a parameter from the Same Line as id1. When
an ID of 132 is used, the Name Jim and the Title Manager are also used.

Creating Vuser Scripts Chapter 5, page 80


Working with VuGen • Defining Parameters

Updating Parameter Values for Internal Data Types


When using internally generated values, VuGen lets you specify the update method
for parameters. You set the update method from the Properties tab of the
Date/Time, Random, Unique types. The available methods are: each occurrence,
each iteration, and once.

The each occurrence method instructs LoadRunner to use a new value for each
occurrence of the parameter. This is useful where the statements using the
parameters are unrelated. For example, for random data, it may be useful to use a
new value for each iteration. Find

The each iteration method instructs LoadRunner to use a new value for each ?
script iteration. If a parameter appears in a script several times, LoadRunner uses
the same value for the entire iteration. This is useful when statements using a
parameter are related. For example, if you have a parameter type Vuser ID, and you
want to perform several tests for each ID, you do not want LoadRunner to use a
new value for each occurrence of the parameter. Specify the each iteration method
to use the same value throughout the iteration.

The once method instructs LoadRunner to update the parameter value only once
during the scenario run. LoadRunner uses the same parameter value for all
occurrences and all iterations of the parameter. This type may be useful when
working with dates and times. If you use a new value for each occurrence,
LoadRunner will put a new time at each occurrence of the parameter. To avoid this,
specify the once update method.

Creating Vuser Scripts Chapter 5, page 81


Working with VuGen • Defining Parameters

Maintaining Parameters
In

You can edit a parameter’s properties or values at any time.

To edit a parameter:
1 Click the Parameter button. The Parameter List dialog box displays all of the
parameters for the current script.
2 Select the parameter you want to modify, and edit its properties.
Find
If you mistakenly replaced a constant with a parameter, you can restore it to its
original value. ?
To restore a parameter to its original value:
1 Perform a right-click on the parameter.
2 Choose Restore Original Value.

Creating Vuser Scripts Chapter 5, page 82


Working with VuGen • Defining Parameters

Parameterization Options
You can set up VuGen’s parameterization options in the following areas:

• Parameter Braces
• Global Directory

Find

Creating Vuser Scripts Chapter 5, page 83


Working with VuGen • Defining Parameters

Parameter Braces
The parameter braces are placed on either side of the parameter name when you
In

parameterize your script. The default braces are angle brackets. (<prm>)

lrd_stmt(Csr1, "insert into emp_j3(id,name)values (<ID>,'<Name>',),1,1...);

You can change the style of parameter braces by specifying a string of one or more
characters. All characters are valid with the exception of spaces.
Find
To change the parameter brace style:
1 Choose Tools > Options in VuGen. The General Options dialog box opens. ?
2 Select the Parameterization tab and enter the desired brace.
3 Click OK to accept the settings and close the dialog box.

Creating Vuser Scripts Chapter 5, page 84


Working with VuGen • Defining Parameters

Global Directory
This option is provided only for backward compatibility for earlier versions. In earlier
versions of LoadRunner (4.51 and below), when you created a new data table, you
specified local or global. A local table is saved in the current Vuser script directory
and is only available to Vusers running that script. A global table is available to all
Vusers scripts. The global directory can be on a local or network drive. Using the
General Options dialog box, you can change the location of the global tables at any
time.
Find
In newer versions of LoadRunner, you specify the location of the data table in the
Parameter List dialog box. LoadRunner, using its new No-NFS capabilities, is able
to retrieve the data from any location—the default script directory or another
?
directory on the network. For more information, see Data Files on page 72.

To set the global directory:


1 Choose Tools > Options in VuGen. The General Options dialog box opens.
2 Select the Parameterization tab.
3 In the Global Directory section, specify the directory containing your global data
tables.
4 Click OK to accept the settings and close the dialog box.

Creating Vuser Scripts Chapter 5, page 85


Working with VuGen
Configuring Run-Time Settings
6
Configuring Run-Time Settings
After you record a Vuser script, you configure the run-time settings for the script.
In

These settings specify how the script behaves when it runs.

This chapter describes:

• Setting the Think Time Settings


• Setting the Iteration Settings

Find
Setting the Log Run-Time Settings
• Setting the General Run-Time Settings ?
• Setting the RTE Run-Time Settings

This chapter applies to APPC, Baan, Database, Java, RTE (Windows),


TUXEDO, Web, and Windows Sockets Vuser scripts only.

Creating Vuser Scripts Chapter 6, page 86


Working with VuGen • Configuring Run-Time Settings

About Run-Time Settings


After you record a Vuser script, you can customize the way that the script runs by
configuring its run-time settings. These settings are stored in the file
<test_name>.cfg, located in the Vuser script directory. Run-time settings are
applied to Vusers when you run a script using VuGen, QuickTest, or the Controller.

Configuring run-time settings allows you to emulate different kinds of Vuser activity.
For example you could emulate a Vuser who runs quickly, or a Vuser who stops and Find
thinks before each new action. You can also specify how many times the Vuser
should repeat an action. ?
You configure the settings from the Run-Time Settings dialog box. To display the
Run-Time Settings dialog box, click the Settings button from the main VuGen
window. You can also modify the run-time settings from the LoadRunner Controller.
For more information, refer to the LoadRunner Controller User’s Guide
(Windows).

Creating Vuser Scripts Chapter 6, page 87


Working with VuGen • Configuring Run-Time Settings

The run-time settings can be set in the following areas: In

• Think Time
• Iterations
• Log
• Error Handling
• Multithread Process
Find
• Web settings (See Chapter 20, Configuring Web Run-Time Settings. )
• Baan (See Chapter 24, Creating Baan Vuser Scripts. )
?
• Java (See Chapter 25, Creating Java Vuser Scripts. )

This chapter describes only the Think Time, Iterations, Log, and General settings.
For details on other run-time settings, see the appropriate chapters.

Creating Vuser Scripts Chapter 6, page 88


Working with VuGen • Configuring Run-Time Settings

Setting the Think Time Settings


Vuser think time emulates the time that a real user waits between actions. For
example, when a user receives data from a server, he waits several seconds before
submitting another request. This delay, known as think time, is recorded in your
Vuser script (using lr_think_time functions). Using the Think Time run-time
settings, you can influence how the recorded delay periods are used during script
execution.

Click the Settings button from the main VuGen window. Click the Think Time tab to Find
display the Think Time options:
?

Creating Vuser Scripts Chapter 6, page 89


Working with VuGen • Configuring Run-Time Settings

By default, when you run a Vuser script, LoadRunner applies the think time values
that were recorded into the script during the recording session. To modify the In

execution behavior of the script, you can specify that LoadRunner use a multiple of
the recorded think time. This can increase or decrease the think time applied during
playback. For example, if a think time of four seconds was recorded, you can
instruct your Vuser to multiply that value by two, for a total of eight seconds. To
reduce the think time to two seconds, multiply the recorded time by 0.5. You can
also disable think time or limit it to a maximum value.

Think time delays appear in a Vuser script as lr_think_time functions. These Find
function can appear at any point in a Vuser script. For more information about the
Online lr_think_time function and how to modify it manually, refer to the LoadRunner ?
Function Online Function Reference (available from the VuGen Help menu).
Reference

Creating Vuser Scripts Chapter 6, page 90


Working with VuGen • Configuring Run-Time Settings

Setting the Iteration Settings


Vuser scripts contains three sections: vuser_init, Actions, and vuser_end. You can
instruct VuGen to repeat the Actions section when you run the script. These
repetitions, also known as iterations, represent the number of loops performed by
the Vuser.

Note: The vuser_init and vuser_end sections of a Vuser script are not repeated
when you run multiple iterations.
Find

Click the Settings button from the main VuGen window. Click the Iterations tab to ?
display the Iteration options.

Creating Vuser Scripts Chapter 6, page 91


Working with VuGen • Configuring Run-Time Settings

You specify the number of iterations in the Iteration Count section of the dialog box.
You can also set an iteration pace for your script. The iteration pace tells the Vuser In

how long to wait between iterations. The pacing options are:

• Start a new iteration as soon as possible.


• Start a new iteration every n seconds.
• Start a new iteration at random intervals (you specify a range for the intervals).

Choosing the second option instructs the Vuser to wait a minimum of n seconds Find
before beginning the next iteration. The actual idle time may vary from iteration to
iteration, depending on the duration of the previous iteration. ?
For example, if you specify “Start a new iteration every 4 seconds” and the first
iteration took three seconds, the idle time will be one second. If the next iteration
took two seconds to complete, the idle time will be two seconds. The idle time
appears in the Vuser Viewer window during playback.

Creating Vuser Scripts Chapter 6, page 92


Working with VuGen • Configuring Run-Time Settings

Setting the Log Run-Time Settings


During execution, LoadRunner logs information about Vusers and their
communication with the server. In a Windows environment, this information is
stored in a file called output.txt in the script directory. In UNIX environments, the
information is directed to the standard output.

The Log run-time settings let you determine how much information is logged to the
output. You can select Brief or Extended log, or you can disable logging completely.
Disabling the log is useful when working with many Vusers. If you have tens or Find
hundreds of Vusers logging their run-time information to disk, the system may work
slower than normal. You should only disable logging after verifying that the script is ?
functional.

Note: You can program a Vuser script to send messages to the output by using
the lr_error_message and lr_output_message functions.

Creating Vuser Scripts Chapter 6, page 93


Working with VuGen • Configuring Run-Time Settings

To display the Log options, choose Vuser > Run Time Settings, or click the Settings In

button. Ensure that the Log tab is visible.

Find

Creating Vuser Scripts Chapter 6, page 94


Working with VuGen • Configuring Run-Time Settings

Log Options
You can specify the type of information that is logged, or you can disable logging
altogether.

Note: When you disable logging, the Controller still logs error messages.

Standard Log Option Find


When you select Standard Log, LoadRunner logs data concerning only a subset of
the functions that appear in a Vuser script, including all transactions, rendezvous ?
and output messages. The functions that are logged vary from one Vuser type to
another.

Creating Vuser Scripts Chapter 6, page 95


Working with VuGen • Configuring Run-Time Settings

Extended Log Options


In

Select Extended Log to create an extended log, including warnings and other
messages. You can specify which additional information should be added to the
extended log using the Extended log options:

• Parameter: Select this option to log all parameters assigned to the script along
with their values. For more information on parameters, see Chapter 5, Defining
Parameters.
• Data returned by server: Select this option to log all of the data returned by the Find
server.
• Advanced trace: Select this option to log all of the functions and messages sent ?
by the Vuser during the session This option is useful when you debug a Vuser
script.

The degree to which VuGen logs events (Standard, Parameter substitution, etc.)
is also known as the message class. There are five message classes: Brief,
Extended, Parameters, Result Data, and Full Trace.

You can manually set the message class within your script using the
lr_set_debug_message function. This is useful if you to want to receive debug
information about a small section of the script only.

Creating Vuser Scripts Chapter 6, page 96


Working with VuGen • Configuring Run-Time Settings

For example, suppose you set Log run-time settings to Brief and you want to get
an extended log for a specific section of the script. You would then use the
lr_set_debug_message function to set the Extended message class at the
desired point in your script. You must call the function again to specify what type of
extended mode (Parameter, Result Data, or Full Trace). Return to the Brief Log
mode by calling lr_set_debug_message, specifying Brief mode. For more
Online information about setting the message class, refer to the LoadRunner Online
Function Function Reference (available from the VuGen Help menu).
Reference
Find
Disable Logging
Once you verify that your script is functional, you can use this setting to disable ?
logging and avoid unnecessary resource usage.

Creating Vuser Scripts Chapter 6, page 97


Working with VuGen • Configuring Run-Time Settings

Logging CtLib Server Messages


When you run a CtLib script, all messages generated by the CtLib client are logged
in the Brief log and in the output file. By default, server messages are not logged. In

To enable logging of server messages (for debugging purposes), insert the


following line into your Vuser script:

LRD_CTLIB_DB_SERVER_MSG_LOG;

VuGen logs all server messages in the Brief log.

To send the server messages to the LoadRunner Controller output window, (in Find
addition to the Brief log), type:
?
LRD_CTLIB_DB_SERVER_MSG_ERR;

To return to the default mode of terminating the script execution, type the following
line into your script:

LRD_CTLIB_DB_SERVER_MSG_NONE;

Note: Activate server message logging for only a specific block of code within your
script, since the generated server messages are long and the logging can slow
down your system.

Creating Vuser Scripts Chapter 6, page 98


Working with VuGen • Configuring Run-Time Settings

Setting the General Run-Time Settings


You can set general run-time settings for your script in the following areas:

• Error Handling
• Multithread Processes

Find

These settings apply to all Vuser script types.

Creating Vuser Scripts Chapter 6, page 99


Working with VuGen • Configuring Run-Time Settings

Error Handling
You can specify how LoadRunner handles errors during script execution. By
In

default, when the script detects an error, it exits. You can instruct LoadRunner to
continue script execution, even when errors occur by specifying Continue on Error.

To specify “Continue on Error,” select the Continue on Error check box in the
General run-time settings.

Error Handling for Database Vusers


When working with database protocols (LRD), you can control error handling for a Find
specific segment of a script. To mark a segment, enclose it with
LRD_ON_ERROR_CONTINUE and LRD_ON_ERROR_EXIT statements.
?
LoadRunner applies the new error setting to the whole segment.

For example, if you enable the Continue on Error feature and LoadRunner
encounters an error during replay of the following script segment, it continues
executing the script.

lrd_stmt(Csr1, "select…"…);
lrd_exec(…);

Creating Vuser Scripts Chapter 6, page 100


Working with VuGen • Configuring Run-Time Settings

To instruct LoadRunner to continue on error for the entire script, except for the
following segment, enclose the segment with LRD_ON_ERROR_EXIT. and
LRD_ON_ERROR_CONTINUE statements:

LRD_ON_ERROR_EXIT;
lrd_stmt(Csr1, "select…"…);
lrd_exec(…);
LRD_ON_ERROR_CONTINUE;

In addition to the LRD_ON_ERROR statements, you can control error handling


Find
using severity levels. LRD_ON_ERROR statements detect all types of errors—
database related, invalid parameters, etc. If you want LoadRunner to terminate the
Vuser only when a database operation error occurs (Error Code 2009), you can set
?
a function’s severity level. All functions that perform a database operation use
severity levels, indicated by the function's final parameter, miDBErrorSeverity.

VuGen supports the following severity levels:

Definition Meaning Value

Terminate script execution


LRD_DB_ERROR_SEVERITY_ERROR upon database access errors. 0
(default)

Continue script execution upon


LRD_DB_ERROR_SEVERITY_WARNIN
database access errors, but 1
G
issue a warning.

Creating Vuser Scripts Chapter 6, page 101


Working with VuGen • Configuring Run-Time Settings

For example, if the following database statement fails (e.g. the table does not exist),
the script execution terminates. In

lrd_stmt(Csr1, "insert into EMP values ('Smith',301)\n", -1, 1 , 1 , 0);

To instruct VuGen to continue script execution, even when a database operation


error occurs, change the statement's severity level from a 0 to a 1.

lrd_stmt(Csr1, "insert into EMP values ('Smith',301)\n", -1, 1 , 1 , 1); Find

?
Note: When you enable Continue on Error, it overrides the “0” severity level; script
execution continues even when database errors occur. However, if you disable
Continue on Error, but you specify a severity level of “1”, script execution
continues when database errors occur.

Creating Vuser Scripts Chapter 6, page 102


Working with VuGen • Configuring Run-Time Settings

Error Handling for RTE Vusers


When working with RTE Vusers, you can control error handling for specific
functions. You insert an CONTINUE_ON_ERROR=value statement before the
functions whose behavior you want to change. LoadRunner uses the new setting
until the end of the script execution or until another CONTINUE_ON_ERROR
statement is issued.

For example, if you enable the Continue on Error feature and LoadRunner
encounters an error during replay of the following script segment, it continues
executing the script. Find

TE_wait_sync();
?
TE_type(...);

To instruct LoadRunner to continue on error for the entire script, except for the
following segment, enclose the segment with CONTINUE_ON_ERROR.
statements:

CONTINUE_ON_ERROR=OFF
TE_wait_sync();
CONTINUE_ON_ERROR=ON
....

Creating Vuser Scripts Chapter 6, page 103


Working with VuGen • Configuring Run-Time Settings

Multithreading
LoadRunner supports multithread environments. The primary advantage of a In

multithread environment is the ability to run more Vusers per machine.

To enable multithreading, select the Run Vuser as a Thread check box.

To disable multithreading and run a Vuser as a complete process, select the Run
Vuser as a Process check box.

Find

Creating Vuser Scripts Chapter 6, page 104


Working with VuGen • Configuring Run-Time Settings

Setting the RTE Run-Time Settings


When you open an RTE Vuser script in VuGen, you can set RTE-specific run-time
settings for the script.

Connection Attempts
The TE_connect function is generated by VuGen when you record a connection to
a host. When you replay an RTE Vuser script, the TE_connect function connects
the terminal emulator to the specified host. If the first attempt to connect is not Find
successful, LoadRunner retries a number of times to connect successfully. Details
of each connection are recorded in the report file output.txt. ?
To set the maximum number of times that a Vuser will try to connect, enter a
number in the “Maximum number of connection attempts” box on the RTE tab of
the Run-Time settings dialog box.

By default, a Vuser will try to connect 5 times.

Online For details about the TE_connect function, see the LoadRunner Online Function
Function Reference (available from the VuGen Help menu).
Reference

Creating Vuser Scripts Chapter 6, page 105


Working with VuGen • Configuring Run-Time Settings

Original Device Name


In certain environments, each session (Vuser) requires a unique device name. The
In

TE_connect function generates a unique 8-character device name for each Vuser,
and connects using this name. To connect using the device name (that is contained
within the com_string parameter of the TE_connect function), select the “Use
original device name” check box on the RTE tab of the Run-Time settings dialog
box.

Find
Note: The original device name setting applies to IBM block-mode terminals only.
?
By default, Vusers use original device names to connect.

Online For details about the TE_connect function, see the LoadRunner Online
Function Function Reference (available from the VuGen Help menu).
Reference

Creating Vuser Scripts Chapter 6, page 106


Working with VuGen • Configuring Run-Time Settings

Delay
The delay setting determines how Vusers execute TE_type functions:

To specify the amount of time that a Vuser waits before entering the first character
in a string, enter a value in the First key box, in milliseconds.

To specify the amount of time that a Vuser waits between submitting successive
characters, enter a value in the Subsequent keys box, in milliseconds.

If you enter zero for both the first key and the subsequent key delays, the Vuser will Find
send characters as a single string, with no delay between characters.

You can use the TE_typing_style function to over ride the Delay settings for a
?
portion of a Vuser script.

Online For details about the TE_type and TE_typing_style functions, see the
Function LoadRunner Online Function Reference (available from the VuGen Help menu).
Reference

Creating Vuser Scripts Chapter 6, page 107


Working with VuGen • Configuring Run-Time Settings

X-System Synchronization
RTE Vuser scripts use the TE_wait_sync function for synchronization. You can set
In

a timeout value and a stable-time value that VuGen applies to all TE_wait_sync
Online functions. For details about the TE_wait_sync function, see the LoadRunner
Function Online Function Reference (available from the VuGen Help menu).
Reference
Timeout
When you replay a TE_wait_sync function, if the system does not stabilize before
the synchronization timeout expires, the TE_wait_sync function returns an error
code. To set the synchronization timeout, enter a value (in seconds) in the Timeout Find
box of the RTE Run-Time settings tab.

The default timeout value is 60 seconds.


?
Stable Time
After a Vuser executes a TE_wait_sync function, the Vuser waits until the terminal
is no longer in the X-SYSTEM mode. After the terminal returns from the X-
SYSTEM mode, LoadRunner still monitors the system for a short while longer to
ensure that the terminal is fully stable i.e. that the system has nor returned to the
X-SYSTEM mode. Only then does the TE_wait_sync function terminate.

To set the time that LoadRunner continues to monitor the system after the system
has returned from the X-SYSTEM mode, enter a value (in milliseconds) in the
Stable time box of the RTE Run-Time settings tab.

The default stable time is 1000 milliseconds.

Creating Vuser Scripts Chapter 6, page 108


Working with VuGen
Running Vuser Scripts in Stand-Alone Mode
7
Running Vuser Scripts in Stand-Alone Mode
After you develop a Vuser script and set its run-time settings, you test the script by
In

running it in stand-alone mode.

This chapter describes:

• Running a Vuser Script in VuGen


• Running a Vuser Script from a UNIX Command Line

Find
Integrating a Vuser Script into a LoadRunner Scenario

This chapter applies to APPC, Baan, Database, Java, RTE (Windows),


?
TUXEDO, Web, and Windows Sockets Vuser scripts only.

Creating Vuser Scripts Chapter 7, page 109


Working with VuGen • Running Vuser Scripts in Stand-Alone Mode

About Running Vuser Scripts in Stand-Alone Mode


In

In order to perform load testing with a Vuser script, you need to incorporate the
script into a LoadRunner scenario. Before integrating the script into a scenario, you
should check its functionality by running the script in stand-alone mode.

stand-alone mode Running a script in stand-alone mode means running the


script without using a LoadRunner Controller. This is done
to establish how the script will execute when run from the
Controller. If the script is Windows-based, you use VuGen
Find
to run it in stand-alone mode. If the script is UNIX-based,
you must run it from a UNIX command line.
?
If the stand-alone execution is successful, then incorporate the script into a
LoadRunner scenario. For more information on scenarios, refer to your
LoadRunner Controller User’s Guide.

Creating Vuser Scripts Chapter 7, page 110


Working with VuGen • Running Vuser Scripts in Stand-Alone Mode

Before you run a script in stand-alone mode, you can:

• enhance the script with LoadRunner functions (see Chapter 4, Enhancing Vuser
Scripts)
• parameterize the script (see Chapter 5, Defining Parameters)
• correlate queries in the script (see Chapter 10, Correlating Database
Statements)

The above steps are optional and may not apply to all scripts.
Find

?
Note: You use QuickTest to run Web Vusers in stand-alone mode. For details, see
Chapter 21, Running Web Vuser Scripts. To run GUI Vusers in stand-alone
mode, use WinRunner (Windows) or VXRunner (UNIX). For details, see
Chapter 26, Developing GUI Vuser Scripts.

Creating Vuser Scripts Chapter 7, page 111


Working with VuGen • Running Vuser Scripts in Stand-Alone Mode

Running a Vuser Script in VuGen


After developing a Vuser script, run it using VuGen to ensure that it runs correctly. In

Note: VuGen runs Vuser scripts on Windows platforms only. To run UNIX-based
Vuser scripts, see Running a Vuser Script from a UNIX Command Line on
page 117.

Find
You can run a script in animated mode or non-animated mode. When you run in
animated mode, the cursor indicates the line of the script being executed at the
current time. When you run in non-animated mode, VuGen executes the script
?
faster, but does not indicate the line being executed.

To run a script using VuGen:


1 Choose View >Animated Run to run in animated mode. To set the delay for the
animated run, choose Tools > Options and select the Replay tab in the General
Options dialog box. Specify a time in milliseconds indicating the delay between
commands.
2 Choose Vuser > Run, or click the Run button on the VuGen toolbar. VuGen begins
executing the Vuser script. The actions of the Vuser are displayed in the Execution
log at the bottom of the VuGen window. The information in the Execution log
shows you how the script will run when executed in a LoadRunner scenario.

Creating Vuser Scripts Chapter 7, page 112


Working with VuGen • Running Vuser Scripts in Stand-Alone Mode

The following example shows the Execution log for a Web Vuser.

Find

Creating Vuser Scripts Chapter 7, page 113


Working with VuGen • Running Vuser Scripts in Stand-Alone Mode

Using the Debugging Features


VuGen contains two options to help debug Vuser scripts:
In

• The Run Step by Step command runs the script one line at a time. This enables
you to follow the script execution.
• You can insert Breakpoints to pause execution at specific points in the script. This
enables you to examine the effects of the test on your application at pre-
determined points during execution.
Find

Creating Vuser Scripts Chapter 7, page 114


Working with VuGen • Running Vuser Scripts in Stand-Alone Mode

To run the test step by step:


1 Select Vuser > Run Step by Step or click the Step button.
VuGen executes the first line of the test.
2 Continue test execution by clicking the Step icon until the test run completes.
To set breakpoints:
Use the Run command to restart the test run.

1 Place the cursor on the line in the test script at which you want test execution to Find
stop.
2 Click the Breakpoint button. The breakpoint symbol appears in the left margin of ?
the script.
3 To remove the breakpoint, place the cursor on the line with the breakpoint symbol
and click the breakpoint button.
To run the test with breakpoints:
1 Begin running the test as you normally would.
VuGen pauses test execution when it reaches a breakpoint. You can examine the
effects of the test run up to the breakpoint, make any necessary changes, and
then restart the test from the breakpoint.
2 To resume execution, select Vuser > Run.
Once restarted, the test continues until the next breakpoint is encountered or the
test is completed.

Creating Vuser Scripts Chapter 7, page 115


Working with VuGen • Running Vuser Scripts in Stand-Alone Mode

Working with VuGen Windows


When you create scripts, you may need to view several scripts and windows. Use
In

the following VuGen features:

• Show/Hide the Execution Log


Press Ctrl+F6 to show and hide the Execution Log beneath the main window.
• Display Grids
Select View > Data Grids to display or hide the grids containing the result data.
Find
• Close All Windows
Select Windows > Close All to close all of the open windows.
?

Creating Vuser Scripts Chapter 7, page 116


Working with VuGen • Running Vuser Scripts in Stand-Alone Mode

Running a Vuser Script from a UNIX Command Line


When using VuGen to develop UNIX-based Vusers, you must check that the
recorded script runs on the UNIX platform. To ensure that your script runs correctly,
follow these steps:

1 Test the recorded script from VuGen.


Run the recorded script from VuGen to ensure that the script runs correctly on a
Windows-based system.
Find

Note: If you are using a UNIX-based LoadRunner Controller, do not add


?
parameterization and correlated queries to the Vuser script, and do not modify the
run-time settings. These features are not supported by the UNIX-based
Controller.

Creating Vuser Scripts Chapter 7, page 117


Working with VuGen • Running Vuser Scripts in Stand-Alone Mode

2 Copy the Vuser script files to a UNIX drive.


Transfer the files to a local UNIX drive.
In

Note: If you have not already done so, check the Vuser setup on the UNIX
machine by using vu_verify. For more information about the UNIX Vuser settings,
refer to the Installing LoadRunner guide.

Find
3 Test the script from the UNIX command line.
Run the script in stand-alone mode from the Vuser script directory, using the ?
run_db_vuser shell script:

run_db_vuser.sh script_name.usr

Creating Vuser Scripts Chapter 7, page 118


Working with VuGen • Running Vuser Scripts in Stand-Alone Mode

Command Line Options: run_db_vuser Shell Script


The run_db_vuser shell script has the following command line options:

--help
Display the available options. (This option must be preceded by two dashes.)

-cpp_only
Run cpp only (pre-processing) on the script.

-cci_only
Run cci only (pre-compiling) on the script to create a file with a .ci extension. You
can run cci only after a successful cpp. Find

-driver driver_path ?
Use a specific driver program. Each database has its own driver program located
in the /bin directory. For example, the driver for CtLib located in the /bin directory,
is mdrv. This option lets you specify an external driver.

-exec_only
Execute the Vuser .ci file. This option is available only when a valid .ci file exists.

-ci ci_file_name
Execute a specific .ci file.

-no_verbose
Do not run in verbose mode (the default mode is verbose).

-out output_path
Place the results in a specific directory.

Creating Vuser Scripts Chapter 7, page 119


Working with VuGen • Running Vuser Scripts in Stand-Alone Mode

By default, run_db_vuser.sh runs cpp, cci, and execute in verbose mode. It uses
the driver in the LoadRunner installation/bin directory, and saves the results to an In

output file in the Vuser script directory. You must always specify a .usr file. If you
are not in the script directory, specify the full path of the .usr file.

For example, the following command line executes a Vuser script called test1, and
places the output file in a directory called results1. The results directory must be
an existing directory—it will not be created automatically:

run_db_vuser.sh -out /u/joe/results1 test1.usr Find

Creating Vuser Scripts Chapter 7, page 120


Working with VuGen • Running Vuser Scripts in Stand-Alone Mode

Integrating a Vuser Script into a LoadRunner Scenario


Once you have successfully run a script in stand-alone mode to verify that it is
functional, you incorporate the script into a LoadRunner scenario. This process
differs depending on the type of Controller that you are using, and the platform on
which the Vuser runs.

Using a Windows-based Controller


To integrate a Vuser script into a scenario when using a Windows-based Find
Controller:
1 Add the script to the script list, and assign the script to a host. ?
2 If you configured LoadRunner to save the script on a shared network drive, you
may need to perform path translation. For more information, refer to the
LoadRunner Controller User’s Guide (Windows).

Creating Vuser Scripts Chapter 7, page 121


Working with VuGen • Running Vuser Scripts in Stand-Alone Mode

Using a UNIX-based Controller


When using the UNIX-based LoadRunner Controller, you assign scripts to Vusers
In

through a Scenario script. Designate the Vuser’s .usr file as your Vuser test for the
individual Vuser or the entire group.

vuser_set( group_name, 0, "vuser_type",DB );


vuser_set( group_name, 0, "test","path_name/file_name.usr" );

sgroup_set( group_name, "vuser",DB );


sgroup_set( group_name, "test","path_name/file_name.usr" ); Find

?
For more information about Scenario scripts, refer to the LoadRunner Controller
User’s Guide (UNIX).

Creating Vuser Scripts Chapter 7, page 122


Working with VuGen
Managing Scripts Using TestDirector
8
Managing Scripts Using TestDirector
LoadRunner integration with TestDirector lets you manage LoadRunner Vuser
In

scripts using TestDirector. TestDirector helps you organize and manage all scripts,
scenarios, and results using a repository.

This chapter describes:

• Opening a Connection to a TestDirector Project


• Opening a Script using TestDirector Find

• Saving Scripts to the TestDirector Project ?


• Managing your Script in TestDirector

This chapter applies to APPC, Baan, Database, Java, RTE (Windows),


TUXEDO, Web, and Windows Sockets Vuser scripts only.

For detailed information on using TestDirector to manage your scripts, refer to the
TestDirector User’s Guide.

Creating Vuser Scripts Chapter 8, page 123


Working with VuGen • Managing Scripts Using TestDirector

Working with TestDirector


TestDirector is a powerful test management tool that lets you manage and control
all phases of software testing. It provides a comprehensive view of the testing In

process so you can make strategic decisions about the human and material
resources needed to test the application and repair defects.

TestDirector divides testing into three modes of operation: planning tests, running
tests, and tracking defects. In test planning mode, you begin the testing process by
dividing your application into test subjects and building a test plan tree. This is a
graphical representation of your test plan, displaying your tests according to the
Find
hierarchical relationship of their functions.

Creating Vuser Scripts Chapter 8, page 124


Working with VuGen • Managing Scripts Using TestDirector

After you build the test plan tree, you plan tests for each subject. You then use
VuGen to record business processes and create scripts to save under the test
plan tree.

In defect tracking mode, you report defects that were detected in the application
under test. Information about defects is stored in a defect database. The defects
are assigned to developers to be fixed, and then they are tracked until they are
corrected.

In all stages of test management, you can create detailed reports and graphs to
Find
help you analyze testing data and review the progress of testing on your
application. ?
For more information on working with TestDirector, refer to the TestDirector User’s
Guide.

Creating Vuser Scripts Chapter 8, page 125


Working with VuGen • Managing Scripts Using TestDirector

About Managing Scripts Using TestDirector


In

TestDirector and LoadRunner work together to integrate all aspects of the testing
process. In LoadRunner, you can create scripts and save them in your TestDirector
project database. After a test has been run, the results are viewed and analyzed in
TestDirector.

When LoadRunner is connected to TestDirector, you can save a test by associating


it with a subject in the test plan tree, instead of assigning the test to a folder in the
file system. This makes it easy to organize tests by subject for your application. Find
When you open a test, you search for it according to its position in the test plan tree.
You can also save Scenarios from the LoadRunner Controller in your TestDirector ?
project. After you run a scenario from the Controller, results are sent directly to your
TestDirector project.

The following sections describe how to:

• connect to the TestDirector project


• open scripts from the TestDirector repository
• save scripts to the TestDirector repository

Creating Vuser Scripts Chapter 8, page 126


Working with VuGen • Managing Scripts Using TestDirector

Opening a Connection to a TestDirector Project


Before you can work with a TestDirector project, you must open a connection to the
server hosting the project.

To open a connection to a TestDirector project:


1 Choose Tools > TestDirector from VuGen’s main window.

Find

Creating Vuser Scripts Chapter 8, page 127


Working with VuGen • Managing Scripts Using TestDirector

2 In the Server box, type the name of the TestDirector server and then click
Connect. A message appears indicating that LoadRunner is connecting to the In

server, and the Project list is filled with available projects on the server.
3 In the Project Connection box, select a project.

Find

4 Provide the user login and password.


5 Select the Reconnect on Startup check box to automatically open the connection
to the TestDirector server and project when you start LoadRunner.

Creating Vuser Scripts Chapter 8, page 128


Working with VuGen • Managing Scripts Using TestDirector

6 If you select Reconnect on Startup, you can save the specified password to the
vugen.ini file to automate the login process. Select the Save Password for
Reconnection on Startup check box.
7 Click Connect. A message appears indicating that LoadRunner is connecting to
the project.
8 Click Close to close the Connection to TestDirector dialog box.

Find

Creating Vuser Scripts Chapter 8, page 129


Working with VuGen • Managing Scripts Using TestDirector

Opening a Script using TestDirector


In

You can open a script through the standard file system or the TestDirector
repository. Before opening a script through TestDirector, make sure you have
opened a connection to the project.

To open a script from the TestDirector repository:


1 Choose File > Open or click the File Open button. The Open from Test Director
Project dialog box opens.
Find

2 Select a Vuser script from the project.


3 Click OK. VuGen loads the script. The name of the script appears in the VuGen’s
banner.

Creating Vuser Scripts Chapter 8, page 130


Working with VuGen • Managing Scripts Using TestDirector

4 To select a script file from the standard file system, click the File System button in
the upper right corner of the dialog box. The Open Test dialog box opens.

Find

5 To return to the TestDirector repository, click the TestDirector button in the bottom
right corner of the dialog box.

Creating Vuser Scripts Chapter 8, page 131


Working with VuGen • Managing Scripts Using TestDirector

Saving Scripts to the TestDirector Project


When VuGen is connected to TestDirector, you can create new scripts in VuGen
and save them directly to your project. To save a script, you give it a descriptive In

name and associate it with the relevant subject in the test plan tree. This helps you
to keep track of the scripts created for each subject and to quickly view the progress
of test planning and creation.

To save a script to the TestDirector project:


1 Connect to the TestDirector server (see Opening a Connection to a
TestDirector Project on page 127.)
Find
2 Choose File > Save As. The Save Test to TestDirector Project dialog box opens.
?

3 Type a script name, select a folder and click OK.


4 To save the script to disk, click File System and save the file as you would on a
standard file system.

Creating Vuser Scripts Chapter 8, page 132


Working with VuGen • Managing Scripts Using TestDirector

Managing your Script in TestDirector


You can further utilize TestDirector to manage script and test information. After you
save a script to the TestDirector project, you can enter details about the script and
its status.

To enter script details, start TestDirector and select a script.

Find

Creating Vuser Scripts Chapter 8, page 133


Working with VuGen • Managing Scripts Using TestDirector

You can enter information about the test level, version, owner, and designer.
In

TestDirector enables you to manage the user access to a Test project. By creating
a list of authorized users and assigning each user a password and user type, you
control the kinds of additions and modifications each user makes to the project.
The user type determines the privileges that the user has within TestDirector.

For more information on using TestDirector to manage your scripts, refer to the
TestDirector User’s Guide.
Find

Creating Vuser Scripts Chapter 8, page 134


Part III

Database Vuser Scripts

Find

Creating Vuser Scripts 135


Database Vuser Scripts
Developing Database Vuser Scripts
9
Developing Database Vuser Scripts
You use VuGen to record communication between a database client application
In

and a server. The resulting script is called a Database Vuser script.

This chapter describes:

• Introducing Database Vusers


• Understanding Database Vuser Technology

Find
Getting Started with Database Vuser Scripts
• Using LRD Functions ?
• Understanding Database Vuser Scripts
• Evaluating Error Codes
• Handling Errors

This chapter applies to Database (CtLib, DbLib, Informix, Oracle, and ODBC)
Vuser scripts only.

Creating Vuser Scripts Chapter 9, page 136


Database Vuser Scripts • Developing Database Vuser Scripts

About Recording Database Vuser Scripts


When you record a database application communicating with a server, VuGen
generates a Database Vuser script. VuGen supports the following database types:
CtLib, DbLib, Informix, Oracle, and ODBC. The resulting Vuser script contains LRD
functions that describe the database activity. Each LRD function has and lrd prefix,
and represents one or more database functions. For example, the lrd_fetch
function represents a fetch operation.

Using VuGen, you can parameterize a script, replacing recorded constants with Find
parameters. For more information, see Chapter 5, Defining Parameters.

When you run a recorded session, the Vuser script communicates directly with the
?
database server, performing the same operations as the original user. You can set
the Vuser behavior (run-time settings) to indicate the number of times to repeat the
operation and the interval between the repetitions. For more information, see
Chapter 6, Configuring Run-Time Settings.

In addition, you can correlate queries or other database statements in a script,


linking the results of one query with another. For more information, see Chapter 10,
Correlating Database Statements.

Creating Vuser Scripts Chapter 9, page 137


Database Vuser Scripts • Developing Database Vuser Scripts

Introducing Database Vusers


In

Suppose that you have a database of customer information that is accessed by


customer service personnel located throughout the country. You use Database
Vusers to emulate this scenario in which the database server services many
requests for information. A Database Vuser could:

• connect to the server


• submit an SQL query

Find
retrieve and process the information
• disconnect from the server ?
You distribute several hundred Database Vusers among the available hosts, each
Vuser accessing the database by using the server API. This enables you to
measure the performance of your server under the load of many users.

The program that contains the calls to the server API is called a Database Vuser
script. It emulates the client application and all of the actions performed by it. Using
the LoadRunner Controller, you assign the script to multiple Vusers. The Vusers
execute the script and emulate user load on the client/server system. LoadRunner
generates performance data which you can analyze in report and graph format.

Creating Vuser Scripts Chapter 9, page 138


Database Vuser Scripts • Developing Database Vuser Scripts

Understanding Database Vuser Technology


VuGen creates Database Vuser scripts by recording all the activity between a
database client and a server. VuGen monitors the client end of the database and
traces all the requests sent to and received from the database server.

Find

?
Client running VuGen Server
an application

Like all other Vusers created using VuGen, Database Vusers communicate with the
server without relying on client software. Instead, each Database Vuser executes
a script that executes calls directly to server API functions.

Vuser script Server

Creating Vuser Scripts Chapter 9, page 139


Database Vuser Scripts • Developing Database Vuser Scripts

You create Database Vuser scripts in a Windows environment using VuGen. Once
you create a script, you can assign it to Vusers in both Windows and UNIX In

environments. For information about recording scripts, see Chapter 3, Recording


with VuGen.

Users working in a UNIX only environment can create Database Vuser scripts
through programming using LoadRunner templates as the basis for a script. For
information about programming Database Vuser scripts on UNIX, see Appendix C,
Programming Scripts on UNIX Platforms.
Find

Creating Vuser Scripts Chapter 9, page 140


Database Vuser Scripts • Developing Database Vuser Scripts

Getting Started with Database Vuser Scripts


This section provides an overview of the process of developing Database Vuser
scripts using VuGen.

To develop a Database Vuser script:


1 Record the basic script using VuGen.
Invoke VuGen and create a new Vuser script. Specify the type of Vuser (CtLib,
DbLib, Informix, Oracle, and ODBC). Choose an application to record. Record
Find
typical operations on your application.
For details, see Chapter 3, Recording with VuGen. ?
2 Enhance the script.
Enhance the Vuser script by inserting transactions, rendezvous points, and
control-flow structures into the script.
For details, see Chapter 4, Enhancing Vuser Scripts.
3 Define parameters (optional).
Define parameters for the fixed-values recorded into your script. By substituting
fixed-values with parameters, you can repeat the same query many times using
different values.
For details, see Chapter 5, Defining Parameters.

Creating Vuser Scripts Chapter 9, page 141


Database Vuser Scripts • Developing Database Vuser Scripts

4 Correlate queries (optional).


Correlating database statements allows you to use the result of a query in a
In

subsequent one. This feature is useful when working on a database with user
constraints.
For details, see Chapter 10, Correlating Database Statements.
5 Configure the run-time settings.
The run-time settings control the Vuser behavior during script execution. These
settings include loop, log, and timing information. Find
For details, see Chapter 6, Configuring Run-Time Settings.
6 Run the script from VuGen.
?
Save and run the script from VuGen to verify that it runs correctly.
For details, see Chapter 7, Running Vuser Scripts in Stand-Alone Mode.

After you create a Database Vuser script, you integrate it into a LoadRunner
scenario on either a Windows or UNIX platform. For more information on
integrating Vuser scripts in a scenario, refer to your LoadRunner Controller
User’s Guide.

Creating Vuser Scripts Chapter 9, page 142


Database Vuser Scripts • Developing Database Vuser Scripts

Using LRD Functions


The functions developed to emulate communication between a database client and
a server are called LRD Vuser functions. Each LRD Vuser function has an lrd
prefix. This section lists the LRD functions that VuGen records during a database
session (CtLib, DbLib, Informix, Oracle, and ODBC). For syntax and examples of
Online the LRD functions, see the LoadRunner Online Function Reference (available
Function from the VuGen Help menu).
Reference
Find
LRD Environment Functions
lrd_msg Issues an output message.
?
lrd_option Sets an LRD option.
lrd_end Closes the lrd environment.
lrd_init Initializes the lrd environment.

Retrieval Handling Functions


lrd_col_data Sets a pointer indicating the location of data.
lrd_fetch Fetches the next row in the result set.
lrd_fetchx Fetches the next row in the result set using an
extended fetch (ODBC).
lrd_result_set Prepares the next result set.

Creating Vuser Scripts Chapter 9, page 143


Database Vuser Scripts • Developing Database Vuser Scripts

Access Management Functions


In

lrd_alloc_connection Allocates a connection structure.


lrd_close_all_cursors Closes all open cursors.
lrd_close_connection Disconnects (logs out) from the database.
lrd_close_context Closes a context.
lrd_close_cursor Closes a database cursor.
lrd_ctlib_cursor Specifies a CtLib cursor command. Find

lrd_commit Commits the current transaction.


?
lrd_db_option Sets an option for the current database.
lrd_free_connection Frees a connection structure.
lrd_rollback Rolls back the current transaction.
lrd_open_connection Connects (logs on) to the database.
lrd_open_context Opens a context.
lrd_open_cursor Opens a database cursor.

Creating Vuser Scripts Chapter 9, page 144


Database Vuser Scripts • Developing Database Vuser Scripts

Statement Handling Functions


lrd_bind_col Binds a host variable to an output column.
lrd_bind_cols Binds a host variable array to columns.
lrd_bind_cursor Binds a cursor to a place holder.
lrd_bind_placeholder Binds a host variable or array to a place holder.
lrd_cancel Cancels the previous statement.
lrd_data_info Gets I/O information. (CtLib only)
Find
lrd_dynamic Specifies a dynamic SQL statement to be
processed (CtLib only). ?
lrd_exec Executes the previously specified SQL
statement.
lrd_send_data Sends data to the server.
lrd_stmt Specifies an SQL statement to be processed.

Statement Correlating Functions


lrd_save_col Saves the value of a table cell to a parameter.
lrd_save_value Saves a place holder descriptor value to a
parameter.
lrd_save_ret_param Saves the value of a return-parameter to a
parameter (CtLib only).

Creating Vuser Scripts Chapter 9, page 145


Database Vuser Scripts • Developing Database Vuser Scripts

Variable Handling Functions


lrd_assign Assigns a null-terminated string to a variable.
In

lrd_assign_ext Assigns a storage area to a variable.


lrd_assign_literal Assigns a literal string (containing null-
characters) to a variable.
lrd_assign_bind Assigns a null-terminated string to a variable and
binds it to a place holder.
lrd_assign_bind_ext Assigns a storage area value to a variable and Find
binds it to a place holder.
lrd_assign_bind_literal Assigns a literal string (containing null-
?
characters) to a variable and binds it to a place
holder.
lrd_to_printable Converts a variable to a printable string.

Creating Vuser Scripts Chapter 9, page 146


Database Vuser Scripts • Developing Database Vuser Scripts

Understanding Database Vuser Scripts


After you record a database session, you can view the recorded code in VuGen’s
built-in editor. You can scroll through the script, see the SQL statements that were
generated by your application, and examine the data returned by the server. The
VuGen window provides you with the following information about the recorded
database session:

• the sequence of functions recorded


• grids displaying the data returned by database queries Find

• the number of rows fetched during a query ?

Creating Vuser Scripts Chapter 9, page 147


Database Vuser Scripts • Developing Database Vuser Scripts

Function Sequence
When you view a Vuser script in the VuGen window, you see the sequence in which
In

VuGen recorded your activities. For example, the following sequence of functions
is recorded during a typical Oracle database session:

lrd_init Initializes the environment.


lrd_open_connection Connects to the database server.
lrd_open_cursor Opens a database cursor.
Find
lrd_stmt Associates an SQL statement with a cursor.
lrd_bind_col Binds a host variable to a column. ?
lrd_exec Executes an SQL statement.
lrd_fetch Fetches the next record in the result set.
lr_commit Commits a database transaction.
lr_close_cursor Closes a cursor.
lrd_close_connection Disconnects from the database server.
lrd_end Cleans up the environment.

Creating Vuser Scripts Chapter 9, page 148


Database Vuser Scripts • Developing Database Vuser Scripts

In the following script, VuGen recorded the actions of an operator who opened a
connection to an Oracle server and then performed a query requesting the local
settings.

lrd_init(&InitInfo, DBTypeVersion);
lrd_open_connection(&Con1, LRD_DBTYPE_ORACLE, "s1", "tiger", "hp1",
"", 0, 0, 0);
lrd_open_cursor(&Csr1, Con1, 0);
lrd_stmt(Csr1, "select parameter, value from v$nls_parameters " Find
" where (upper(parameter) in ('NLS_SORT','NLS_CURRENCY',"
"'NLS_ISO_CURRENCY', 'NLS_DATE_LANGUAGE',"
"'NLS_TERRITORY'))", -1, 0 /*Non deferred*/, 1 /*Dflt Ora Ver*/, 0);
?
lrd_bind_col(Csr1, 1, &D1, 0, 0);
lrd_bind_col(Csr1, 2, &D2, 0, 0);
lrd_exec(Csr1, 0, 0, 0, 0, 0);
lrd_fetch(Csr1, 7, 7, 0, PrintRow2, 0);
...
lrd_close_cursor(&Csr1, 0);
lrd_commit(0, Con1, 0);
lrd_close_connection(&Con1, 0, 0);
lrd_end(0);

Creating Vuser Scripts Chapter 9, page 149


Database Vuser Scripts • Developing Database Vuser Scripts

Grids
The data returned by a database query during a recording session is displayed in
a grid. By viewing the grid you can determine how your application generates SQL In

statements and the efficiency of your client/server system.

In the following example, VuGen displays a grid for a query executed on an


employee database. The query retrieves the last name, first name, ID number and
department for all employees in the Accounting department.

Find

Creating Vuser Scripts Chapter 9, page 150


Database Vuser Scripts • Developing Database Vuser Scripts

The grid columns are adjustable in width. You can scroll up to 100 rows using the
scroll bar.

To show or hide the grid select View > Data Grids.

Find

Creating Vuser Scripts Chapter 9, page 151


Database Vuser Scripts • Developing Database Vuser Scripts

Row Information
VuGen generates an lrd_fetch function for each SQL query.
In

lrd_fetch(Csr1, -4, 1, 0, PrintRow7, 0);

The second parameter of the function indicates the number of rows fetched. This
number can be positive or negative.

Positive Row Values Find


A positive value shows the number of rows fetched during recording, and indicates
that not all rows were fetched. (For example, if the operator cancelled the query ?
before it was completed.)

In the following example, four rows were retrieved during the database query, but
not all of the data was fetched.

lrd_fetch(Csr1, 4, 1, 0, PrintRow7, 0);

During execution, the script always retrieves the number of rows indicated by the
positive value (provided the rows exist.)

Creating Vuser Scripts Chapter 9, page 152


Database Vuser Scripts • Developing Database Vuser Scripts

Negative Row Values


A negative row value indicates that all available rows were fetched during
recording. The absolute value of the negative number is the number of rows
fetched.

In the following example, all four rows of the result set were retrieved:

lrd_fetch(Csr1, -4, 1, 0, PrintRow7, 0);

Find
When you execute an lrd_fetch statement containing a negative row value, it
retrieves all of the available rows in the table at the time of the run—not necessarily ?
the number at the time of recording. In the above example, all four rows of the table
were retrieved during the recording session. However, if more rows are available
during script execution, they are all retrieved.

Online For more information about lrd_fetch, refer to the LoadRunner Online Function
Function Reference (available from the VuGen Help menu).
Reference

Creating Vuser Scripts Chapter 9, page 153


Database Vuser Scripts • Developing Database Vuser Scripts

Evaluating Error Codes In

When LoadRunner executes an LRD function, the function always generates a


return code. A return code of 0 indicates that the function succeeded. For example,
a return code of 0 indicates that another row is available from the result set. If an
error occurs, the return code indicates the type of error. For example, a return code
of 2014 indicates that an error occurred in the initialization.

There are four types of return codes, each represented by a numerical range:
Find

Type of Return Code Range


?
Informational 0 to 999

Warning 1000 to 1999

Error 2000 to 2999

Internal Error 5000 to 5999

Online For more detailed information on the return codes, refer to the LoadRunner Online
Function Function Reference (available from the VuGen Help menu).
Reference

Creating Vuser Scripts Chapter 9, page 154


Database Vuser Scripts • Developing Database Vuser Scripts

You can evaluate the return code of an LRD function to determine if the function
succeeded. The following script segment evaluates the return code of an lrd_fetch
function:

static int rc;


rc=lrd_fetch(Csr15, -13, 0, 0, PrintRow4, 0);
if (rc==0)
lr_output_message("The function succeeded");
else
lr_output_message("The function returned an error code:%d",rc); Find

Creating Vuser Scripts Chapter 9, page 155


Database Vuser Scripts • Developing Database Vuser Scripts

Handling Errors
In

You can control how the Controller and VuGen handle errors when you run a
database Vuser script. By default, if an error occurs during script execution, the
script execution is terminated. To change the default behavior, you can instruct
LoadRunner to continue when an error occurs. You can apply this behavior:

• globally—to the entire script, or to a segment of the script


• locally—to a specific function only
Find

Creating Vuser Scripts Chapter 9, page 156


Database Vuser Scripts • Developing Database Vuser Scripts

Modifying Error Handling Globally


You can change the way that LoadRunner handles errors by issuing an
LRD_ON_ERROR_CONTINUE or LRD_ON_ERROR_EXIT statement. By default,
LoadRunner aborts the script execution upon any type of error—database,
parameter related, etc. To change the default behavior, insert the following line into
your script:

LRD_ON_ERROR_CONTINUE;
Find
From this point on, LoadRunner continues script execution, even when an error
occurs. ?
You can also specify that LoadRunner continues script execution when an error
occurs only within a segment of the script. For example, the following code tells
LoadRunner to continue script execution even if an error occurs in the lrd_stmt or
lrd_exec functions:

LRD_ON_ERROR_CONTINUE;
lrd_stmt(Csr1, "select…"…);
lrd_exec(…);
LRD_ON_ERROR_EXIT;

Use the LRD_ON_ERROR_CONTINUE statement with caution, as significant and


severe errors may be missed.

Creating Vuser Scripts Chapter 9, page 157


Database Vuser Scripts • Developing Database Vuser Scripts

Modifying Error Handling Locally


You can set error handling for a specific function by modifying the severity level.
In

Functions such as lrd_stmt and lrd_exec, which perform database operations,


use severity levels. The severity level is indicated by the function's final parameter,
miDBErrorSeverity. This parameter tells LoadRunner whether or not to continue
script execution when a database error occurs (error code 2009). The default, 0,
indicates that LoadRunner should abort the script when an error occurs.

For example, if the following database statement fails (e.g., the table does not
Find
exist), then the script execution terminates.

lrd_stmt(Csr1, "insert into EMP values ('Smith',301)\n", -1, 1 /*Deferred*/,


?
1 /*Dflt Ora Ver*/, 0);

To tell LoadRunner to continue script execution, even when a database operation


error occurs for that function, change the statement's severity parameter from 0 to
1.

lrd_stmt(Csr1, "insert into EMP values ('Smith',301)\n", -1, 1 /*Deferred*/,


1 /*Dflt Ora Ver*/, 1);

When the severity is set to 1 and a database error occurs, a warning is issued. Note
that the severity level set for a particular function applies only to that function.

Creating Vuser Scripts Chapter 9, page 158


Database Vuser Scripts • Developing Database Vuser Scripts

CtLib Result Set Errors


In CtLib recording, the application retrieves all of the available result sets after
executing a statement. If the returned result set contains fetchable data, the
application performs bind and fetch operations on the data as indicated in the
following example:

lrd_stmt(Csr15, "select * from all_types", -1, 148, -99999, 0);


lrd_exec(Csr15, 0, 0, 0, 0, 0);
lrd_result_set(Csr15, 1 /*Succeed*/, 4040 /*Row*/, 0);
Find
lrd_bind_col(Csr15, 1, &tinyint_D41, 0, 0);
lrd_bind_col(Csr15, 4, &numeric_D42, 0, 0);
... ?
lrd_fetch(Csr15, -9, 0, 0, PrintRow3, 0);

If a result set does not contain fetchable data, bind and fetch operations cannot be
performed.

When you parametrize your script, result data may become unfetchable
(depending on the parameters). Therefore, a CtLib session that recorded bind and
fetch operations for a particular statement, may not be able to run, if the new data
is unfetchable. If you try to execute an lrd_bind_col or an lrd_fetch operation, an
error will occur (LRDRET_E_NO_FETCHABLE_DATA — error code 2064) and
LoadRunner will terminate the script execution.

Creating Vuser Scripts Chapter 9, page 159


Database Vuser Scripts • Developing Database Vuser Scripts

You can override the error by telling LoadRunner to continue script execution when
this type of error occurs. Insert the following line into your script: In

LRD_ON_FETCHABLE_SET_ERR_CONT;

To return to the default mode of terminating the script execution, type the following
line into your script:

LRD_ON_FETCHABLE_SET_ERR_EXIT; Find

Use this option with caution, as significant and severe errors may be missed. ?

Creating Vuser Scripts Chapter 9, page 160


Database Vuser Scripts
Correlating Database Statements
10
Correlating Database Statements
You can optimize and simplify Database Vuser scripts by correlating database
In

queries. LoadRunner’s Correlated Query feature allows you to link database


statements by using the results of one statement as input to another.

This chapter describes:

• Using Correlated Query Functions


• Correlating a Query Automatically Find

• Correlating Queries to Optimize a Script ?


• Correlating Queries for Tables with Constraints

This chapter applies to Database Vuser scripts only.

Creating Vuser Scripts Chapter 10, page 161


Database Vuser Scripts • Correlating Database Statements

About Correlating Database Statements


In

There are two main reasons for linking (correlating) database queries:

• To simplify or optimize your code


For example, if you perform a series of dependent queries one after another, your
code may become very long. In order to reduce the size of the code, you can nest
the queries, but then you lose preciseness and the code becomes complex and
difficult to understand. Correlating the queries allows you to link queries without
nesting. Find
• To successfully run the script
?
For example, suppose you record the process of opening a new bank account.
Each new account is assigned a unique number which is unknown to the user and
this account number is inserted into a table with a unique key constraint during
recording. If you try to run the script as recorded, it will try to create an account
with the recorded number, rather than a new unique number. You will get a
database error because the account number already exists.
If you encounter an error when running your script, examine the script at the point
where the error occurred. In many cases, a correlated query will solve the problem,
by allowing you to use the results of one statement as input to another.

Creating Vuser Scripts Chapter 10, page 162


Database Vuser Scripts • Correlating Database Statements

VuGen guides you through the steps of correlating queries. The main steps are:

1 Decide which value to correlate.


VuGen helps you decide what to correlate. You can double-click an error message
in the execution log to jump to the problematic statement in your script and search
for possible values to correlate. You can also select a specific value to correlate
directly from the script if you know where you can optimize your script or handle a
unique constraint error.
2 Save the results.
Find
When VuGen scans your script for values to correlate, it provides a list of all
matching values from the results of previous queries. You save the value of a ?
query to a variable using the lrd_save_col function. You save the result of a
database procedure using the lrd_save_value function.
3 Reference the saved values.
VuGen replaces the constants in the query or database statement with the saved
variables.

Creating Vuser Scripts Chapter 10, page 163


Database Vuser Scripts • Correlating Database Statements

Using Correlated Query Functions In

To correlate statements, you modify your recorded script in the VuGen editor using
one or more of the following LRD functions. VuGen inserts these functions for you
when you use the automatic correlation process:

• lrd_save_col saves the result value of a query which appears in a grid (the
specified row and column) to a parameter. Use lrd_save_col when working with
lrd_fetch.
Find
Place the lrd_save_col function before the fetching of the data. It assigns the value
retrieved by the subsequent lrd_fetch to the specified parameter.
?

Note: In general, you see which statement is problematic, and then the correlated
query tool searches previous statements to find all possible values to correlate.
You could also go straight to the results value of a query (grid) and select the
value to save, even if you don’t intend to use it until much later on in your script.
For example, suppose the server assigns a session-ID to the client, and you will
not need the session-ID until later. You can automatically insert an lrd_save_col
statement to save it by highlighting the value in the grid and pressing F8.

Creating Vuser Scripts Chapter 10, page 164


Database Vuser Scripts • Correlating Database Statements

• lrd_save_value saves the current value of a placeholder descriptor to a


parameter. Use lrd_save_value when working with database functions that set
output placeholders (such as certain stored procedures under Oracle).
The lrd_save_value function assigns the current, existing value of the placeholder
to a specified parameter.

• lrd_save_ret_param saves a stored-procedure’s return parameter to a


parameter. Use lrd_save_ret_param when working with database stored
procedures in DbLib that generate return parameters.
Find
To generate an lrd_save_ret_param function, highlight the parameter in the grid
and press F8. VuGen prompts you for a parameter name and places the function
before the grid.
?

Creating Vuser Scripts Chapter 10, page 165


Database Vuser Scripts • Correlating Database Statements

The correlation functions have the following syntax:


In

lrd_save_col (cursor, col_number, row_number, option, "parameter_name");


lrd_save_value (&descriptor, index, 0, "parameter_name");
lrd_save_ret_param (cursor, return_param, option, "parameter_name");

If you specify a row number that does not exist, lrd_save_col retrieves the last
row in the result set. To automatically retrieve the final row in the result set, specify
0 for the row_number parameter.

The option parameter for lrd_save_col specifies whether to set the specified Find
parameter by the immediately following lrd_fetch only, or by all subsequent calls to
lrd_fetch: ?
0 Following: Set the parameter by the immediately following
lrd_fetch only (default).
1 Any: Set the parameter by all lrd_fetch calls for the current
statement (advanced users).

Creating Vuser Scripts Chapter 10, page 166


Database Vuser Scripts • Correlating Database Statements

When using the second option, Any, follow these guidelines:

• lrd_save_col is repeated before every lrd_fetch until it is reset by one of the


following functions: lrd_close_cursor, lrd_exec, lrd_stmt.
• lrd_save_col assigns a new value to the parameter based on the most recent
fetch. If lrd_fetch is called several times for the same statement (for the same row
and column), lrd_save_col sets the parameter with the values from the latest
fetch.
• Use caution when using the Any option, since subsequent calls to lrd_save_col
Find
(for the same row and column), supersede previous ones. If the final fetch
retrieves invalid data or no data, the correlation fails.
?
Note: Correlated statements are not supported if the saved value is invalid or
NULL (no rows returned).

Creating Vuser Scripts Chapter 10, page 167


Database Vuser Scripts • Correlating Database Statements

Correlating a Query Automatically


In

When you use the automatic correlation process, VuGen:

• scans for potential correlations


• inserts the appropriate lrd_save_value or lrd_save_col statement to save the
results to a parameter
• replaces the statement value with the parameter

Find

Creating Vuser Scripts Chapter 10, page 168


Database Vuser Scripts • Correlating Database Statements

To correlate a statement using the automatic correlation process:


This procedure correlates an entire statement or the entire script. If you already
know which value you want to correlate, proceed to the next section for instructions
on correlating a specific value.

1 View the execution output to check for errors.


Select View > Output to display the output folders at the bottom of the window.
Check for errors in the Execution Log folder.
2 To scan a particular statement, place the cursor on the script statement for
correlation. Find

?
Note: You can double-click an output message to jump to the corresponding
statement in the script.

3 Select either Vuser > Scan for Correlations (at cursor) (shortcut: Alt+F8), or Vuser
> Scan for Correlations (entire script) (shortcut: Ctrl+F8).
VuGen scans the script and lists all possible values to correlate in the selected
statement, or the entire script, along with the matching results from previous
statements.
The correlation values are listed in the Correlated Query folder. The possible
values for correlation are graded, based on heuristics, so you can select the best
candidate for correlation.

Creating Vuser Scripts Chapter 10, page 169


Database Vuser Scripts • Correlating Database Statements
In the following example, VuGen found many possible values to correlate for the
lrd_stmt (Csr6, 1 “UPDATE...) statement.

In

Find

Creating Vuser Scripts Chapter 10, page 170


Database Vuser Scripts • Correlating Database Statements

4 Begin Automatic Correlation.


In the Correlated Query folder, double-click the result value to correlate to the
statement value. Select Vuser > Create Correlation (shortcut: F8).
VuGen prompts you to enter a name for the parameter to save the result value.
5 Specify a name for the parameter, or accept the default name and click OK to
continue.
VuGen inserts a statement (lrd_save_value, lrd_save_col, or
lrd_save_ret_param) to save the result value to a parameter. Find
6 Click Yes to confirm the correlation.
A message appears asking if you want to replace all occurrences of the value in
?
the script.
7 Click No to replace only the value in the selected statement.
8 To search for additional occurrences click Yes.
A Search and Replace dialog box opens. Confirm any replacements, including
your original statement.
VuGen replaces the statement value with a reference to the parameter. Note that if
you choose to cancel the correlation, VuGen also erases the statement created in
the previous step.

Creating Vuser Scripts Chapter 10, page 171


Database Vuser Scripts • Correlating Database Statements

To correlate a specific value using the automatic correlation process:


Follow these instructions if you already know which value you want to correlate.
In

1 View the execution output to check for errors.


Select View > Output to display the output folders at the bottom of the window.
Check for errors in the Execution Log folder.
2 In the Vuser script, highlight a specific value to correlate.
You can double-click an output message to jump to the corresponding statement
Find
in the script.
3 Select Vuser > Scan for Correlations (at cursor) (shortcut: Alt+F8) or select Scan ?
for Correlations from the right-click menu.
VuGen scans the script and list all results from previous statements which match
this value. The correlation values are listed in the Correlated Query folder. The
possible values for correlation are graded, based on heuristics, so you can select
the best candidate for correlation.

Creating Vuser Scripts Chapter 10, page 172


Database Vuser Scripts • Correlating Database Statements

In the following example, VuGen found three possible matching result values to
correlate to “31”.

Find

Creating Vuser Scripts Chapter 10, page 173


Database Vuser Scripts • Correlating Database Statements

4 Begin Automatic Correlation.


In the Correlated Query folder, double-click the result value that you want to
correlate to the statement value. Select Vuser > Create Correlation (shortcut: F8). In

VuGen prompts you to enter a name for the parameter to save the result value.
5 Specify a name for the parameter, or accept the default name and click OK to
continue.
VuGen inserts a statement (lrd_save_value, lrd_save_col, or
lrd_save_ret_param) to save the result value to a parameter.
6 Click Yes to confirm the correlation. Find
A message appears asking if you want to replace all occurrences of the value in
the script. ?
7 Click No to replace only the value in the selected statement.
8 To search for additional occurrences click Yes.
A Search and Replace dialog box opens. Confirm any replacements, including
your original statement.
VuGen replaces the statement value with a reference to the parameter. Note that if
you choose to cancel the correlation, VuGen also erases the statement created in
the previous step.

Note: When referencing a correlated parameter within an lrd_stmt function, the


date, time, and binary (RAW, VARRAW) data types are not supported.

Creating Vuser Scripts Chapter 10, page 174


Database Vuser Scripts • Correlating Database Statements

Correlating Queries to Optimize a Script


When performing multiple, dependent queries, you can use correlated queries to
optimize your script. Instead of waiting for the result of one query before performing
the second, you can link between two queries. This feature is particularly useful in
load testing, where you perform similar queries several times, using different
parameters. The following sections illustrate linked queries for:

• simple queries (without binding)


• queries with binding Find

• queries using binding with output placeholders ?

Creating Vuser Scripts Chapter 10, page 175


Database Vuser Scripts • Correlating Database Statements

Simple Correlated Queries — Examples


The following examples use two tables in a database, employees and payment. In

Employees Payment:

id name id year salary

777 John 777 1996 15,000

778 Bill 778 1995 18,000


Find
779 Mike 779 1996 25,000

... ... ... ... ... ?


In the first example, a clerk in a company’s personnel department wants to perform
a query to retrieve the salary for an employee named John. However, the table that
contains the salaries only lists the salaries by employee ID. The clerk does not
know John’s ID, therefore, he will have to wait for the result of the first query before
performing the second query. The clerk can perform both queries with a single
operation by nesting the queries.

Creating Vuser Scripts Chapter 10, page 176


Database Vuser Scripts • Correlating Database Statements

The script below illustrates a simple correlated query. The user performed a query
to retrieve John's ID of 777. A second query on a different table, retrieved the salary
of the employee with the above ID. The user waited for the results of the first query,
before performing the second query.

lrd_stmt(Csr1, "select id from employees where name='John'", ...);


lrd_bind_col(Csr1,1,&ID_D1,...);
lrd_exec(Csr1, ...);
lrd_fetch(Csr1, 1, ...);
Find

lrd_stmt(Csr1, "select salary from payment where id= '777'",...);


lrd_exec(Csr1, ...);
?

You can perform an identical operation by nesting the queries. However, the
database statements become complex and difficult to understand.

lr_think_time(17);
lrd_stmt(Csr1, "select salary from sal_j1 where id = (select id from "
"emp_j1 where name='John')\n", -1, 1, 1, 0);
lrd_bind_col(Csr1, 1, &SALARY_D11, 0, 0);
lrd_exec(Csr1, 0, 0, 0, 0, 1);
lrd_fetch(Csr1, -1, 1, 0, PrintRow7, 0);

Creating Vuser Scripts Chapter 10, page 177


Database Vuser Scripts • Correlating Database Statements

To correlate the queries, you save the value of a query with the lrd_save_col
function. In this example, lrd_save_col saves the value of the first column and first In

row in the returned table (John’s ID of 777) and assigns it to a newly defined
parameter, emp_id. This value is used in the second query.

lrd_stmt(Csr1, "select id from employees where name='John'", ...);


lrd_bind_col(Csr1,1,&ID_D1,...);
lrd_exec(Csr1, ...);
lrd_save_col(Csr1, 1, 1, 0, "emp_id");
lrd_fetch(Csr1, 1, ...); Find

lrd_stmt(Csr1,"select salary from payment where id ='<emp_id>'",...);


?
lrd_exec(Csr1, ...);

Creating Vuser Scripts Chapter 10, page 178


Database Vuser Scripts • Correlating Database Statements

Correlating Queries with Binding—Example


The following example illustrates a correlated query that uses binding. The user
performs the same query as above, but instead of using a constant, he specifies a
placeholder name, id. The lrd_assign_bind statement assigns the retrieved value
to a host variable.

lrd_stmt(Csr1, "select id from employees where name='John'", ...);


lrd_bind_col(Csr1,...);
lrd_exec(Csr1, ...); Find
lrd_fetch(Csr1, 1,...);
?
lrd_stmt(Csr1, "select salary from payment where year='1996' and
id=:id",...);
lrd_assign_bind(Csr1, "id", "777", &id_D4, ...);
lrd_exec(Csr1, ...);

Creating Vuser Scripts Chapter 10, page 179


Database Vuser Scripts • Correlating Database Statements

To correlate the queries, you save the result of the first query to a new variable,
emp_id using lrd_save_col. You replace the constant 777 with the new variable In

name. The saved value is assigned to the placeholder by lrd_assign_bind.

lrd_stmt(Csr1, "select id from employees where name='John'", ...);


lrd_bind_col(Csr1,...);
lrd_exec(Csr1, ...);
lrd_save_col(Csr1, 1, 1, 0, "emp_id");
lrd_fetch(Csr1, 1, ...);
Find

lrd_stmt(Csr1, "select salary from payment where year='1996' and


id=:id",...);
?
lrd_assign_bind(Csr1, "id", "<emp_id>", &id_D4...);
lrd_exec(Csr1, ...);

Creating Vuser Scripts Chapter 10, page 180


Database Vuser Scripts • Correlating Database Statements

Correlating Queries with Output Placeholders—Example


The following example illustrates a correlated query using binding with output
placeholders set by a stored procedure. A stored procedure, get_emp_id,
retrieves John’s id. The lrd_assign_bind function assigns the retrieved value, 777,
to a host variable.

lrd_stmt(Csr1, "begin :id=get_emp_id('john') end",...);


lrd_bind_placeholder(Csr1, "id", &ID_D1, 0, 0);
lrd_exec(Csr1, ...);
Find
lrd_stmt(Csr1, "select salary from payment where year='1996' and
id=:id",...);
lrd_assign_bind(Csr1, "id", "777", &id_D2, ...); ?
lrd_exec(Csr1, ...);

To correlate the queries, use the lrd_save_value function to save the value of the
placeholder descriptor representing John's ID. Use this value in the second query.

lrd_stmt(Csr1, "begin :id=get_emp_id('john') end", ...);


lrd_bind_placeholder(Csr1, "id", &ID_D1, 0, 0);
lrd_exec(Csr1, ...);-
lrd_save_value(&ID_D1, 0, 0, "emp_id");
lrd_stmt(Csr1, "select salary from payment where year='1996' and
id=:id",...);
lrd_assign_bind(Csr1, "id", "<emp_id>",&id_D2, ...);
lrd_exec(Csr1, ...);

Creating Vuser Scripts Chapter 10, page 181


Database Vuser Scripts • Correlating Database Statements

Correlating Queries for Tables with Constraints


In

In instances where table columns have constraints such as Unique, correlating


your script’s queries may be the only way to run the script. For example, if during
recording, you inserted a value into a table with a Unique key constraint, you will
be unable to insert the same value again. If you try to run the script as recorded,
you will get a database error.

The following example illustrates a query with a Unique constraint using


lrd_save_col and lrd_save_value described in the above section. A company’s Find
personnel department wants to insert a new record into the employee database.
The new employee is assigned the next available ID number. In order to insert a ?
complete record for an employee, the operator must know the next available ID
number. Two employees cannot have the same ID number—ID numbers must be
unique. Therefore, the operator performs a query for the number of records in the
employees table. Based on that result, the operator inserts a new employee with

Creating Vuser Scripts Chapter 10, page 182


Database Vuser Scripts • Correlating Database Statements

the next available number, or count + 1. In the example below, the query returned
a count of 4 records and therefore assigned the new employee an ID of 5, or
newemp=5. The table’s columns are Name, ID, DOB, Dept, and DeptNo.

lrd_stmt(Csr2, "select count(*) from employees", -1, 1 /*Deferred*/,


2 /*Ora V7*/, 0);
lrd_bind_col(Csr2, 1, &COUNT_D1, 0, 0);
lrd_exec(Csr2, 0, 0, 0, 0, 0);
lrd_fetch(Csr2, 1, 1, 0, PrintRow2, 0);
Find

?
lrd_stmt(Csr2, "\t\tdeclare\n \tPROCEDURE new_emp (empno in integer, "
"newemp out integer) is\n\t\tbegin\n\t\t\tnewemp:=empno+1;\n\t\tend "
"new_emp;\n\t begin\n\t\t\tnew_emp(:empno,:newemp);\n\t\tend;", -
1, -1
/*Deferred*/, 2 /*Ora V7*/, 0);
lrd_assign_bind(Csr2, "empno", "4", &empno_D2, 0, 0, 0);
lrd_assign_bind(Csr2, "newemp", "0", &newemp_D3, 0, 0, 0);
lrd_exec(Csr2, 0, 0, 0, 0, 0);
lrd_stmt(Csr2, "insert into employees values ('TOM JONES',5,"
"'1-JAN-97','R&D',22)", -1, 0 /*Non deferred*/, 2 /*Ora V7*/, 0);
lrd_assign_bind(Csr2, "newemp", "5", &newemp_D4, 0, 0, 0);
lrd_exec(Csr2, 0, 0, 0, 0, 0);

Creating Vuser Scripts Chapter 10, page 183


Database Vuser Scripts • Correlating Database Statements

If you repeat the recorded query in its current form, the script would attempt to
insert the new employee with the same employee number, 5. The script would fail, In

since the empno column has a Unique constraint.

To enable the script to run, you need to replace the constant with a variable. This
variable, saved dynamically during script execution, is used for the next query. Now,
when you get the row count during execution, using select count(*), the current row
count is returned, not the count generated during execution. You save the variable
dynamically by adding lrd_save_col before the fetch statement.
Find
The following changes, indicated in bold, were made to the sample script:
?
/* Retrieve the number of records in the employees table */
lrd_stmt(Csr1, "select count(*) from employees", -1, 1 /*Deferred*/, 2 /*Ora
V7*/, 0);
lrd_bind_col(Csr1, 1, &COUNT_D1, 0, 0);
lrd_exec(Csr1, 0, 0, 0, 0, 0);
lrd_save_col(Csr1, 1, 1, 0, "row_cnt");
lrd_fetch(Csr1, 1, 1, 0, PrintRow2, 0);

Creating Vuser Scripts Chapter 10, page 184


Database Vuser Scripts • Correlating Database Statements

After saving the count value from the first fetch, the script derives the next value
with a stored procedure, using the formula newemp=empno+1. The placeholder
descriptor, newemp, receives this new value when the stored procedure is
executed.

To use the newly assigned value of the placeholder, you save it to a variable using
the lrd_save_value function. The script below saves the placeholder descriptor to
the new_no variable and binds its value to a host variable. The new, dynamically
saved value, is inserted into the table with the rest of the elements of the employee
record. Find

/* Define next employee's number: newemp = empno +1 */ ?


lrd_stmt(Csr1, "\t\tdeclare\n \tPROCEDURE new_emp (empno in integer, "
"newemp out integer) is\n\t\tbegin\n\t\t\tnewemp:=empno+1;\n\t\tend "
"new_emp;\n\t begin\n\t\t\tnew_emp(:empno,:newemp);\n\t\tend;", -1, -1
/*Deferred*/, 2 /*Ora V7*/, 0);
/* Bind the placeholder values to the variables. */
lrd_assign_bind(Csr1, "empno", "<row_cnt>", &empno_D2, 0, 0, 0);
lrd_assign_bind(Csr1, "newemp", "0", &newemp_D3, 0, 0, 0);
lrd_exec(Csr1, 0, 0, 0, 0, 0);
lrd_save_value(&newemp_D3, 0, 0, "new_no");
lrd_stmt(Csr2, "insert into employees values ('TOM JONES',:newemp,"
"'1-JAN-97','R&D',22)", -1, 0 /*Non deferred*/, 2 /*Ora V7*/, 0);
lrd_assign_bind(Csr2, "newemp", "<new_no>", &newemp_D4, 0, 0, 0);
lrd_exec(Csr2, 0, 0, 0, 0, 0);

Creating Vuser Scripts Chapter 10, page 185


Part IV

Tuxedo Vuser Scripts

Find

Creating Vuser Scripts 186


Tuxedo Vuser Scripts
Developing TUXEDO Vuser Scripts
11
Developing TUXEDO Vuser Scripts
You use VuGen to record communication between a TUXEDO client application
In

and a TUXEDO application server. The resulting script is called a TUXEDO Vuser
script.

This chapter describes:

• Getting Started with TUXEDO Vuser Scripts


• Using LRT Functions Find

• Understanding Tuxedo Vuser Scripts ?


• Correlating Queries
• Defining Environment Settings for TUXEDO Vusers

This chapter applies to Tuxedo Vuser scripts only.

Creating Vuser Scripts Chapter 11, page 187


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

About TUXEDO Vuser Scripts


When you record a TUXEDO application, VuGen generates LRT functions that
describe the recorded actions. These functions emulate communication between a In

TUXEDO client and a server. Each LRT function begins with an lrt prefix.

In addition to the lrt prefix, certain functions use an additional prefix of tp, tx or F.
These sub-prefixes indicate the function type, similar to the actual TUXEDO
functions. The tp sub-prefix indicates a TUXEDO client tp session. For example,
lrt_tpcall sends a service request and awaits its reply. The tx sub-prefix indicates
a global tx session. For example, lrt_tx_begin begins a global transaction. The F
Find
sub-prefix indicates an FML buffer related function. For example, lrt_Finitialize
initializes an existing buffer.
?
Functions without an additional prefix emulate standard C functions. For example,
lrt_strcpy copies a string, similar to the C function strcpy.

You can view and edit the recorded script from VuGen’s main window. The LRT
functions that are recorded during the session are displayed in the VuGen window,
allowing you to visually track your network activities.

Before You Record


If the environment variables have changed since the last time you restarted VuGen,
LoadRunner may record the original variable value rather than the current value.

To avoid any inconsistencies, you should restart VuGen before recording TUXEDO
applications.

Creating Vuser Scripts Chapter 11, page 188


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

Getting Started with TUXEDO Vuser Scripts


This section provides an overview of the process of developing TUXEDO Vuser
scripts using VuGen.

To develop a TUXEDO Vuser script:


1 Record the basic script using VuGen.
Invoke VuGen and create a new Vuser script. Specify TUXEDO or TUXEDO63 (for
recording TUXEDO Version 6.3) as the type of Vuser. Choose an application to
Find
record. Record typical operations on your application.
For details, see Chapter 3, Recording with VuGen. ?
2 Enhance the script.
Enhance the Vuser script by inserting transactions, rendezvous points, and
control-flow structures into the script.
For details, see Chapter 4, Enhancing Vuser Scripts.
3 Define parameters (optional).
Define parameters for the fixed-values recorded into your script. By substituting
fixed-values with parameters, you can repeat the same business process many
times using different values.
For details, see Chapter 5, Defining Parameters.

Creating Vuser Scripts Chapter 11, page 189


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

4 Correlate statements (optional).


Correlating statements enables you to use the result of one business process in a
In

subsequent one.
For details, see Correlating Queries on page 201.
5 Configure the run-time settings.
The run-time settings control the Vuser behavior during script execution. These
settings include loop, log, and timing information.
For details, see Chapter 6, Configuring Run-Time Settings. Find

6 Run the script from VuGen.


?
Save and run the script from VuGen to verify that it runs correctly.
For details, see Chapter 7, Running Vuser Scripts in Stand-Alone Mode.

After you create a TUXEDO Vuser script, you integrate it into a LoadRunner
scenario on either a Windows or UNIX platform. For more information on
integrating Vuser scripts in a scenario, refer to your LoadRunner Controller
User’s Guide.

Creating Vuser Scripts Chapter 11, page 190


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

Using LRT Functions


The functions developed to emulate a TUXEDO client communications with
a server are called LRT functions. Each LRT Vuser function has an lrt prefix.
Online This section lists the LRT functions that VuGen records during a TUXEDO
Function session. For more information about the LRT functions, refer to the LoadRunner
Reference Online Function Reference (available from the VuGen Help menu).

Note: Some of the FML buffer functions indicate an optional “32” in the function Find
name. These are the FML32 versions of the functions.
?

Creating Vuser Scripts Chapter 11, page 191


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

Buffer Manipulation Functions


lrt_Fadd[32]_fld Adds a new field to an FML buffer.
In

lrt_Finitialize[32] Initializes an existing FML buffer fbfr.


lrt_Fldid[32] Maps a field name to a field identifier.
lrt_Fname[32] Provides a map field identifier to field name.
lrt_Fidnm_unload[32] Recovers space allocated for a field identifier to
field name.
Find
lrt_CFgetalloc[32] Gets a specified field from a buffer, allocates
space, converts the field to the type specified by
the user and returns a pointer to its location.
?
lrt_memcpy Copies the specified amount of bytes from the
source to the destination.
lrt_tpalloc Returns a pointer to a buffer of type type.
lrt_tprealloc Changes the size of a typed buffer.
lrt_strcpy Copies a string like the C function strcpy.
lrt_tpfree Frees a typed buffer.
lrt_tptype Determines information about a typed buffer.

Creating Vuser Scripts Chapter 11, page 192


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

Environment Variable Functions


lrt_AEWgetenv Retrieves the return values for an environment
name.
lrt_AEWputenv Changes or adds a value to an environment.
lrt_set_env_list Sets a list of environment variables.
lrt_tuxgetenv Returns a value corresponding to an environment
name.
lrt_tuxputenv Modifies an existing environment value or adds a
value to the environment. Find

lrt_tuxreadenv Adds a variable to the environment from a file. ?


Error Processing Functions
lrt_abort_on_error Aborts the current transaction, if the previous
TUXEDO function call resulted in an error.
lrt_Fstrerror[32] Retrieves error message string for FML error.
lrt_getFerror[32] Retrieves the error status code for the last FML
operation that failed.
lrt_gettperrno Retrieves the error status code for the last
TUXEDO transaction monitor function.
lrt_gettpurcode Retrieves the application return code.
lrt_tpstrerror Retrieves error message string for System/T
error.

Creating Vuser Scripts Chapter 11, page 193


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

Client/Server Session Functions


lrt_tpchkauth Checks if authentication is required by the
application.
In

lrt_tpinitialize Enables a client to join a System/T application.


lrt_tpterm Removes a client from a System/T application.

Blocking Call Handling Functions


lrt_AEWisblocked Enables a Windows task to determine if it is
executing while waiting for a previous blocking Find
call to complete.
lrt_AEWsetblockinghook ?
Establishes an application-specific blocking hook
function.

Correlating Statement Function


lrt_save[32]_fld_val Saves the current value of an FML buffer to a
parameter.
lrt_save_parm Saves a character from a STRING or CARRAY
buffer to a parameter.
lrt_save_searched_string Searches for an occurence of a string in a
STRING or CARRAY buffer and saves the
specified number of characters from the specified
string offset to a parameter.

Creating Vuser Scripts Chapter 11, page 194


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

Communication Functions
lrt_tpacall Sends a service request.
lrt_tpbroadcast Broadcasts notification by name.
lrt_tpcall Sends a service request and awaits its reply.
lrt_tpcancel Cancels a call descriptor.
lrt_tpchkunsol Checks for an unsolicited message.
lrt_tpconnect Establishes a conversational service connection.
lrt_tpdiscon Terminates a conversational service connection.
Find
lrt_tpenqueue Stores a message in the queue.
lrt_tpgetrply Returns a reply from a previously sent request. ?
lrt_tpgprio Returns the priority for the last request sent or
received.
lrt_tpnotify Sends notification to a client.
lrt_tprecv Receives a message in a conversational
connection.
lrt_tpsend Sends a message in a conversational connection.
lrt_tpsetunsol Sets the method for handling unsolicited
messages.
lrt_tpsprio Sets the priority for the next request sent or
forwarded.
lrt_tpunsubscribe Unsubscribes to an event.

Creating Vuser Scripts Chapter 11, page 195


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

Transaction Handling Functions


lrt_tpabort Aborts the current transaction.
In

lrt_tpbegin Begins a transaction.


lrt_tpcommit Commits the current transaction.
lrt_tpgetlev Checks if a transaction is in progress.
lrt_tpresume Resumes a global transaction.
lrt_tpscmt Sets when lrt_tpcommit should return.
lrt_tpsuspend Suspends a global transaction. Find

lrt_tx_begin Begins a global transaction. ?


lrt_tx_close Closes a set of resource managers.
lrt_tx_commit Commits a global transaction.
lrt_tx_info Returns global transaction information.
lrt_tx_open Opens a set of resource managers.
lrt_tx_rollback Rolls back a global transaction.
lrt_tx_set_commit_return Sets the commit_return characteristic to the
value specified in when_return.
lrt_tx_set_transaction_control Sets the transaction_control characteristic to the
value specified in control.
lrt_tx_set_transaction_timeout Sets the transaction_timeout characteristic to the
value specified in timeout.

Creating Vuser Scripts Chapter 11, page 196


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

Understanding Tuxedo Vuser Scripts


After you record a session, VuGen’s built-in editor lets you view the recorded code.
You can scroll through the script, see TUXEDO statements that were generated by
your application, and examine the data that was returned by the server. The VuGen
window provides you with valuable information about the recorded TUXEDO
session. When you view the script in the main window, you see the sequence in
which VuGen recorded your activities.

In the following example, VuGen recorded a client’s actions in a TUXEDO bank Find
application. The client performed an action of opening a bank account and
specifying all the necessary details. The session was aborted when the client ?
specified a zero opening balance.

lrt_abort_on_error();
lr_think_time(65);
tpresult_int = lrt_tpbegin(30, 0);
data_0 = lrt_tpalloc("FML", "", 512);
lrt_Finitialize((FBFR*)data_0);

Creating Vuser Scripts Chapter 11, page 197


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

/* Fill the data buffer data_0 with new account information */


lrt_Fadd_fld((FBFR*)data_0, "name=BRANCH_ID", "value=8",
LRT_END_OF_PARMS); In

lrt_Fadd_fld((FBFR*)data_0, "name=ACCT_TYPE", "value=C",


LRT_END_OF_PARMS);
lrt_Fadd_fld((FBFR*)data_0, "name=MID_INIT", "value=Q",
LRT_END_OF_PARMS);
lrt_Fadd_fld((FBFR*)data_0,"name=PHONE","value=123-456-7890",
LRT_END_OF_PARMS);

lrt_Fadd_fld((FBFR*)data_0, "name=ADDRESS", "value=1 Broadway


New York, NY 10000", LRT_END_OF_PARMS); Find
lrt_Fadd_fld((FBFR*)data_0,"name=SSN","value=111111111",
LRT_END_OF_PARMS);
?
lrt_Fadd_fld((FBFR*)data_0,"name=LAST_NAME",
"value=Doe",LRT_END_OF_PARMS);

lrt_Fadd_fld((FBFR*)data_0,"name=FIRST_NAME",
"value=BJ",LRT_END_OF_PARMS);

lrt_Fadd_fld((FBFR*)data_0, "name=SAMOUNT",
"value=0.00",LRT_END_OF_PARMS);

/* Open a new account */


tpresult_int = lrt_tpcall("OPEN_ACCT", data_0, 0, &data_0, &olen_2, 0);
lrt_tpabort(0);
lrt_tpcommit(0);
lrt_tpfree(data_0);
lrt_tpterm();

Creating Vuser Scripts Chapter 11, page 198


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

Using Parameters in TUXEDO Scripts


You can define parameters in TUXEDO scripts, as described in Chapter 5,
Defining Parameters. Note that TUXEDO scripts contain strings of type
“name=...” or “value=...”. You can only define parameters for the portion of the
string following the equal sign (=). For example:

lrt_Fadd_fld((FBFR*)data_0,"name=PHONE","value=<parameter_1>",
LRT_END_OF_PARMS);
Find

Creating Vuser Scripts Chapter 11, page 199


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

Running TUXEDO Scripts


If you encounter problems recording or running TUXEDO applications, check that
In

the TUXEDO application runs without LoadRunner, and that the environment
variables have been defined correctly. For more information, see Defining
Environment Settings for TUXEDO Vusers on page 206. Note that after you set
or modify the TUXEDO variables, you must reboot the machine in order for the
changes to take effect.

If you experience problems during execution, check the TUXEDO log file on the
Find
side of the server for error messages. By default, this file is found in the directory
indicated by the environment variable APPDIR. The file name has the form
ULOG.mmddyy, where mmddyy indicates the current month, day, and year. The file
?
for March 12, 1997 would be ULOG.031297. The default location of this file can be
changed by setting the environment variable ULOGPFX on the server. A log file
can also be found on the client side, in the current directory, unless the ULOGPFX
variable changes its location.

Creating Vuser Scripts Chapter 11, page 200


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

Correlating Queries
LoadRunner supports correlated queries (and other TUXEDO statements) for
Vuser scripts recorded with TUXEDO applications. Correlated queries allow you to
link statements by using the output of one statement for another.

For example, suppose you record a script where you open a new bank account and
deposit money. When you run the script, it will create another new account, but you
will not be able to deposit money into the new account because you won’t know the
new account number. To solve this, use a correlated query to save the new account Find
number and then use the number as a parameter in the deposit statement.
?

Creating Vuser Scripts Chapter 11, page 201


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

To correlate statements, you modify your recorded script within the VuGen editor
using one of the following LRT functions: In

• lrt_save_fld_val saves the current value of an FML buffer (a string in the form
“name=<NAME>” or “id=<ID>”) to a parameter
• lrt_save32_fld_val saves the current value of an FML32 buffer (a string in the
form “name=<NAME>” or “id=<ID>”) to a parameter
These functions have the following syntax:

int lrt_save_fld_val(FBFR* fbfr, char* name, FLDOCC occ, char* paramName) Find
int lrt_save32_fld_val(FBFR32* fbfr, char* name, FLDOCC32 occ,
char* paramName) ?
The two functions are equivalent, except for the type of FML buffer (FML or
FML32).

You can use the saved buffer contents in subsequent statements by referencing the
parameter name (defined in paramName) in angle brackets.

Creating Vuser Scripts Chapter 11, page 202


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

To correlate statements using lrt_save_fld_val:


1 Insert the lrt_save_fld_val statement in your script where you want to save the
contents of the current FML (or FML32) buffer.
Set the function arguments:
fbfr Specify the FML buffer whose contents you want to save.
name Reference the name of the FML buffer, in the form
"name=<NAME>" or "id=<ID>".
occ Use this id to reference the buffer by occurrence, rather Find
than by name (0 for 1st occurrence, 1 for 2nd, etc.).
paramName Define the parameter name to be used in subsequent lrt
?
statements to reference to the saved information. Enclose
the name in double-quotes.
2 Reference the parameter.
Locate the lrt statements with the recorded values that you want to replace with
the contents of the saved buffer. Replace all instances of the recorded values with
the parameter name in angle brackets.

Creating Vuser Scripts Chapter 11, page 203


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

Sample Correlated Query


In

/* Fill the data_0 buffer with new account information*/


data_0 = lrt_tpalloc("FML", "", 512);
lrt_Finitialize((FBFR*)data_0);
lrt_Fadd_fld((FBFR*)data_0, "name=BRANCH_ID", "value=1",
LRT_END_OF_PARMS);
lrt_Fadd_fld((FBFR*)data_0, "name=ACCT_TYPE", "value=S",
LRT_END_OF_PARMS);
lrt_Fadd_fld((FBFR*)data_0, "name=PHONE", "value=111-111-1111",
Find
LRT_END_OF_PARMS);

lrt_Fadd_fld((FBFR*)data_0, "name=ADDRESS", "value=1 Broadway New ?


York, NY 11111", LRT_END_OF_PARMS);
lrt_Fadd_fld((FBFR*)data_0, "name=SSN", "value=111-11-1111",
LRT_END_OF_PARMS);
lrt_Fadd_fld((FBFR*)data_0, "name=LAST_NAME", "value=Doe",
LRT_END_OF_PARMS);
lrt_Fadd_fld((FBFR*)data_0, "name=FIRST_NAME", "value=John",
LRT_END_OF_PARMS);
lrt_Fadd_fld((FBFR*)data_0, "name=SAMOUNT", "value=234.12",
LRT_END_OF_PARMS);

/* Open a new account and save the new account number*/


tpresult_int = lrt_tpcall("OPEN_ACCT", data_0, 0,&data_0, &olen_2, 0);
lrt_abort_on_error();
lrt_save_fld_val((FBFR*)data_0,"name=ACCOUNT_ID",0,"account_id");

Creating Vuser Scripts Chapter 11, page 204


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

/* Use result from first query to fill buffer for the deposit*/
lrt_Finitialize((FBFR*)data_0);
lrt_Fadd_fld((FBFR*)data_0, "name=ACCOUNT_ID",
"value=<account_id>", LRT_END_OF_PARMS);
lrt_Fadd_fld((FBFR*)data_0, "name=SAMOUNT", "value=200.11",
LRT_END_OF_PARMS);

/* Deposit money into the new account */


tpresult_int = lrt_tpcall("DEPOSIT", data_0, 0, &data_0, &olen_7, 0);
lrt_abort_on_error();
Find

Some systems represent a field by an id number rather than a field name during
recording. You can correlate by field id as follows:
?
lrt_save_fld_val((FBFR*)data_0, "id=8302", 0, "account_id");

Creating Vuser Scripts Chapter 11, page 205


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

Defining Environment Settings for TUXEDO Vusers


In

The following section describes the system variable settings for TUXEDO Vusers
running on Windows and UNIX platforms. You define the system variables in your
autoexec.bat (for Windows 3.1), Control Panel/System dialog box (NT), or .cshrc
or .login file (UNIX).
ROOTDIR the root directory for TUXEDO 4.2 sources.
TUXDIR the root directory for TUXEDO 5.x and higher sources.
FLDTBLDIR list of directories containing FML buffer information. In Find
Windows, separate the names of directories with semi-
colons. On UNIX platforms, separate the names of the ?
directories with a colon.
FIELDTBLS list of files containing FML buffer information. On both
Windows and UNIX platforms, separate the file names with
commas.

Creating Vuser Scripts Chapter 11, page 206


Tuxedo Vuser Scripts • Developing TUXEDO Vuser Scripts

For example:

SET FLDTBLDIR=%TUXDIR%\udataobj;%TUXDIR%\APPS\WS (PC)


SET FIELDTBLS=bankflds,usysflds (PC)
setenv FLDTBLDIR $TUXDIR/udataobj:$TUXDIR/apps/bankapp (Unix)
setenv FIELDTBLS bank.flds,Usysflds (Unix)

You must define the following system variables for TUXEDO clients using
TUXEDO/WS workstation extensions during execution: Find
WSNADDR specifies the network address of the workstation listener
process. This enables the client application to access ?
TUXEDO. Note that to define multiple addresses in a
WSNADDR statement, each address must be separated
by a comma.
WSDEVICE specifies the device that accesses the network. Note that
you do not need to define this variable for some network
protocols.
For example:

SET WSNADDR=0x0002ffffc7cb4e4a (PC)


setenv WSNADDR 0x0002ffffc7cb4e4a (Unix)
setenv WSDEVICE /dev/tcp (Unix)

Creating Vuser Scripts Chapter 11, page 207


Part V

Windows Sockets Vuser Scripts

Find

Creating Vuser Scripts 208


Windows Sockets Vuser Scripts
Developing Windows Sockets Vuser Scripts
12
Developing Windows Sockets Vuser Scripts
You use VuGen to record communication between a client application and a server
In

that communicate using the Windows Sockets protocol. The resulting script is
called a Windows Sockets Vuser script.

This chapter describes:

• Getting Started with Windows Sockets Vuser Scripts


• Using LRS Functions Find

• Understanding Windows Sockets Vuser Scripts ?


• Viewing Windows Sockets Data
• Using Winsock Data Buffers
• Understanding Data Files
• Correlating Statements
• Working with Correlated Scripts
• Determining Character Offsets for Parameterization

This chapter applies to Windows Sockets Vuser scripts only.

Creating Vuser Scripts Chapter 12, page 209


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

About Recording Windows Sockets Vuser Scripts


In

The Windows Sockets protocol is ideal for analyzing the low level code of an
application. For example, to check your network, you can use a WinSock Vuser to
see the actual data sent and received by the buffers. In addition, using the low level
code, you can record and replay applications that are not supported by any of the
other Vuser types.

When you record an application which uses the Windows Sockets protocol, VuGen
generates LRS functions that describe the recorded actions. Each function begins Find
with an lrs prefix. The LRS functions relate to the sockets, data buffers, and the
Windows Sockets environment. Using VuGen, you record your application’s API ?
calls to the Winsock.dll or Wsock32.dll. For example, you could create a script by
recording the actions of a telnet application.

In the following example, lrs_send sends data to a specified socket:

lrs_send("socket22", "buf44", LrsLastArg);

You can view and edit the recorded script from VuGen’s main window. The
Windows Sockets API calls that were recorded during the session are displayed in
the window, allowing you to track your network activities.

Creating Vuser Scripts Chapter 12, page 210


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

Getting Started with Windows Sockets Vuser Scripts


This section provides an overview of the process of developing Windows Sockets
Vuser scripts using VuGen.

To develop a Windows Sockets Vuser script:


1 Record the basic script using VuGen.
Invoke VuGen and create a new Vuser script. Specify WINSOCK as the type of
Vuser. Choose an application to record. Record typical operations on your
Find
application.
For details, see Chapter 3, Recording with VuGen. ?
2 Enhance the script.
Enhance the Vuser script by inserting transactions, rendezvous points, and
control-flow structures into the script.
For details, see Chapter 4, Enhancing Vuser Scripts.
3 Define parameters (optional).
Define parameters for the fixed-values recorded into your script. By substituting
fixed-values with parameters, you can repeat the same business process many
times using different values.
For details, see Chapter 5, Defining Parameters.

Creating Vuser Scripts Chapter 12, page 211


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

4 Correlate statements (optional).


Correlating statements enables you to use the result of one business process in a
In

subsequent one.
For details, see Correlating Statements on page 223.
5 Configure the run-time settings.
The run-time settings control the Vuser behavior during script execution. These
settings include loop, log, and timing information.
For details, see Chapter 6, Configuring Run-Time Settings. Find

6 Run the script from VuGen.


?
Save and run the script from VuGen to verify that it runs correctly.
For details, see Chapter 7, Running Vuser Scripts in Stand-Alone Mode.

After you create a Windows Sockets Vuser script, you integrate it into a
LoadRunner scenario on either a Windows or UNIX platform. For more
information on integrating Vuser scripts in a scenario, refer to your LoadRunner
Controller User’s Guide.

Creating Vuser Scripts Chapter 12, page 212


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

Using LRS Functions


The functions developed to emulate communication between a client and a server
by using the Windows Sockets protocol are called LRS Vuser functions. Each LRS
Vuser function has an lrs prefix. This section lists the LRS functions that VuGen
generates while recording a Windows Sockets session. You can also manually
Online program any of the functions into your script. For more information about the LRS
Function functions, refer to the LoadRunner Online Function Reference (available from
Reference the VuGen Help menu).
Find

Socket Functions ?
lrs_accept_connection Accepts a connection on a listening socket.
lrs_close_socket Closes an open socket.
lrs_create_socket Initializes a socket.
lrs_disable_socket Disables an operation on a socket.
lrs_get_socket_attrib Gets a socket’s attributes.
lrs_receive Receives data from a datagram or stream socket.
lrs_receive_ex Receives data of a specific length from a
datagram or stream socket.
lrs_send Sends data on a datagram or to a stream socket.
lrs_set_socket_options Sets a socket option.

Creating Vuser Scripts Chapter 12, page 213


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

Buffer Functions
lrs_get_buffer_by_name Gets a buffer and its size from the data file.
In

lrs_get_last_received_buffer Gets the last buffer received on the socket and its
size.
lrs_get_received_buffer Gets the last received buffer or a part of it.
lrs_get_static_buffer Gets a static buffer or a part of it.
lrs_get_user_buffer Gets the contents of the user data for a socket.
Find
lrs_get_user_buffer_size Gets the size of the user data for a socket.
lrs_free_buffer Frees the memory allocated for the buffer. ?
lrs_set_send_buffer Specifies a buffer to send on a socket.
lrs_ascii_to_ebcdic Converts buffer data from ASCII format to
EBCDIC format.
lrs_ebcdic_to_ascii Converts buffer data from EBCDIC format to
ASCII format.

Creating Vuser Scripts Chapter 12, page 214


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

Environment Functions
lrs_startup Initializes the Windows Sockets DLL.
lrs_cleanup Terminates the use of the Windows Sockets DLL.

Correlating Statement Functions


lrs_save_param Saves a static or received buffer (or part of it) to a
parameter.
lrs_save_param_ex Saves a user, static, or received buffer (or part of Find
it) to a parameter.
?
Timeout Functions
lrs_set_accept_timeout Sets a timeout for accepting a socket.
lrs_set_recv_timeout Sets a timeout for receiving the expected data on
a socket.
lrs_set_send_timeout Sets a timeout for sending data on a socket.

Creating Vuser Scripts Chapter 12, page 215


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

Understanding Windows Sockets Vuser Scripts


In

After you record a session, VuGen’s built-in editor lets you view the recorded code.
You can scroll through the script, view the functions that were generated by your
application, and examine the transferred data. When you view the script in the main
window, you see the sequence in which VuGen recorded your activities. The
following functions are recorded during a typical session:

lrs_startup Initializes the WinSock DLL.


lrs_create_socket Initializes a socket. Find

lrs_send Sends data on a datagram or to a stream socket. ?


lrs_receive Receives data from a datagram or stream socket.
lrs_disable_socket Disables an operation on a socket.
lrs_close_socket Closes an open socket.
lrs_cleanup Terminates the use of the WinSock DLL.

VuGen supports record and run for applications using Windows Socket protocol
on Windows, and run only for Windows Socket protocol on UNIX platforms.

Creating Vuser Scripts Chapter 12, page 216


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

Viewing Windows Sockets Data


When you use VuGen to create a Windows Sockets Vuser script, your actions are
recorded into the three sections of the script: vuser_init, Actions, and vuser_end.
In addition to the Vuser script, VuGen also creates a data file, data.ws, that contains
the data that was transmitted or received during the recording session. You can use
VuGen to view the contents of the data file by selecting data.ws in the Data Files
box of the main VuGen window.

Find

Creating Vuser Scripts Chapter 12, page 217


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

The option to view a data file is available by default for Windows Sockets Vuser
scripts. In

Find

Creating Vuser Scripts Chapter 12, page 218


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

Using Winsock Data Buffers


Several LRS functions, such as lrs_receive and lrs_send, handle the actual data
that is transferred between servers and clients. The data that is received or
transmitted is stored in data buffers, which can be very large. In order to simplify
the appearance of the script, the actual data is stored in external files—not in the
C file. When a data transfer occurs, the data is copied from the external file into a
temporary buffer.

The external file, data.ws, contains the contents of all the temporary buffers. The Find
buffers’ contents are stored as sequential records. The records are marked by
identifiers indicating whether the data was sent or received, and the buffer ?
descriptor. The LRS functions use the buffer descriptors to access the data.

The descriptors have one of the following formats:

recv bufindex number of bytes received


send bufindex

The buffer index begins with 0 (zero), and all subsequent buffers are numbered
sequentially (1,2,3 etc.) regardless of whether or not they are send or receive
buffers.

Creating Vuser Scripts Chapter 12, page 219


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

In the following example, an lrs_receive function was recorded during a Vuser


session: In

lrs_receive("socket1", "buf4", LrsLastArg)

In this example, lrs_receive handled data that was received on socket1. The data
was stored in the fifth receive record(buf4)—note that the index number is zero-
based. The corresponding section of the data.ws file shows the buffer and its
contents. Find

recv buf4 39 ?
"\xff\xfb\x01\xff\xfb\x03\xff\xfd\x01"
"\r\n"
"\r\n"
"SunOS UNIX (sunny)\r\n"
"\r"
"\x0"
"\r\n"
"\r"
"\x0"

Creating Vuser Scripts Chapter 12, page 220


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

Understanding Data Files


The data.ws data file has the following format:

• File header
• A list of buffers and their contents

The file header includes the version number of the data file format. The current
version is 2. If you try to access data from a data file with format version 1, an
error is issued. Find

;WSRData 2 1 ?
An identifier precedes each record, indicating whether the data was received or
sent, followed by the buffer descriptor, and the number of bytes received (for
lrs_receive only). The buffer descriptor contains a number identifying the buffer.
For example,

recv buf5 25

indicates that the buffer contains data that was received. The record number is 5,
indicating that this receive operation was the sixth data transfer (the index is zero
based), and twenty-five bytes of data were received.

Each descriptor is followed by the actual data in ascii format.

Creating Vuser Scripts Chapter 12, page 221


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

The following segment shows the header, descriptors, and data in a typical data
file: In

;WSRData 2 1

send buf0
"\xff\xfd\x01\xff\xfd\x03\xff\xfb\x03\xff\xfb\x18"

recv buf1 15
"\xff\xfd\x18\xff\xfd\x1f\xff\xfd"
Find
"#"
"\xff\xfd"
"'" ?
"\xff\xfd"
"$"

send buf2
"\xff\xfb\x18"

Creating Vuser Scripts Chapter 12, page 222


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

Correlating Statements
After you record a Windows Sockets Vuser script, you can run Vusers on several
machines. In certain instances, running the recorded code will result in an error. For
example, if you record a session where unique values are assigned to the session,
such as unique process IDs (PIDs), you will be unable to rerun the script
successfully. During execution, the recorded program receives a new PID. If you try
to use the old PID, it will have no effect.

In such cases, the solution is to correlate the statements—save the actual run-time Find
values and use them within the script. The Correlated Statements feature allows
you to link statements by using the output of one statement as input to another ?
statement. For a detailed example, see Working with Correlated Scripts below.

The main steps in correlating queries are:

1 Saving the results.


You save a recorded or received value to a variable using the lrs_save_param or
lrs_save_param_ex functions. You must insert this function into your script
manually.
2 Referencing the saved value.
Insert the parameter in all the functions or data buffers that need to use the
parameter’s run-time value.

Creating Vuser Scripts Chapter 12, page 223


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

Working with Correlated Scripts


In

To correlate statements within your script, you save the run-time value using
lrs_save_param or lrs_save_param_ex. Both of the functions save buffer data to
a parameter, however lrs_save_param_ex allows you to specify a user buffer and
an encoding method.

The lrs_save_param function saves data from a buffer to a parameter. This


function has the following parameters:
Find
s_desc A descriptor identifying a connecting socket. (for example
socket6)
?
buf_desc A descriptor identifying a buffer. (for example buf16)
param_name The name of a parameter to hold the buffer value.
offset The offset of the data in the buffer to be saved to the
parameter. For example, to begin with the tenth byte of
data, specify 10.
length The length of the data (in bytes) to save to the parameter.

Creating Vuser Scripts Chapter 12, page 224


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

The first two parameters specify which buffer to use:

• Use the specified buffer when the buffer descriptor has the form “bufxx”.

lrs_save_param (“socket2”, “buf47”, “param1”, 67, 5 );

• Use the last received buffer when the buffer descriptor is NULL or when
LRS_LAST_RECEIVED.

lrs_save_param (“socket2”, “NULL”, “param1”, 67, 5 ); Find

?
lrs_save_param (“socket2”, “LRS_LAST_RECEIVED”, “param1”, 67, 5 );

After specifying an active socket or buffer, you specify a parameter name to store
the data. Specify an offset to indicate the offset of the data in the buffer, and a
parameter length.

Once you save the parameter, you can use it in both the script and data file.
Substitute all the appropriate constant values with the parameter. Whenever you
reference the parameter after the call to lrs_save_param, enclose it in angle
brackets ( < > ).

Creating Vuser Scripts Chapter 12, page 225


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

In the following example, a user performed a telnet session. The user used a ps
command to determine the process ID (PID), and killed an application based on its In

PID.

frodo:/u/jay>ps
PID TTY TIME CMD
23961 pts/11 0:00 clock
23960 pts/11 0:00 vi
23959 pts/11 0:00 clock
23926 pts/11 0:03 tcsh Find
frodo:/u/jay>kill 23961
[3] Exit 1 clock
frodo:/u/jay>
?

The recorded script shows the lrs_receive and lrs_send functions:

lrs_receive("socket1", "buf79", LrsLastArg);


lrs_send("socket1", "buf80", LrsLastArg);

During execution, the PID of the procedure will be different (UNIX assigns unique
PIDs for every execution), so killing the recorded PID will be ineffective. To
overcome this problem, lrs_save_param saves the value of the new PID to a
parameter. This parameter is referenced in the Send buffer which contains the kill
command.

Creating Vuser Scripts Chapter 12, page 226


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

To correlate the statements:


1 Determine the socket, buffer, offset, and length of the data. Search the data file for
the relevant information. In the example below, the Receive buffer, buf79 was
received after a ps command. The data was received via socket1. The offset of
the PID data is 60 (the sixtieth character), and its length is 5. For information on
how to determine the offset, see Determining Character Offsets for
Parameterization on page 229.

recv buf79 151


"\r" Find
"\x0"
"\r\n" ?
" PID TTY TIME CMD\r\n"
" 23959 pts/11 0:00 clock\r\n"
" 23961 pts/11 0:00 clock\r\n"
" 23960 pts/11 0:00 vi\r\n"
" 23926 pts/11 0:03 tcsh\r\n"
"frodo:/u/jay>"

During recording, the user noted the PID of 23961 and then performed a kill
operation on that process. This operation is shown in the Send buffer, buf80.

send buf80
"\x16"
"kill 23961"

Creating Vuser Scripts Chapter 12, page 227


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

2 Insert an lrs_save_param function in the Actions section, after the lrs_receive


for the relevant buffer. In this instance, the buffer is buf79. Since no buffer In

descriptor is specified, it uses the contents of the last received buffer, buf79. The
PID is saved to a parameter called param1. Print the parameter to the output
using lr_output_message.

lrs_receive("socket1", "buf79", LrsLastArg);


lrs_save_param("socket1", NULL, "param1", 60, 5);
lr_output_message ("param1: %s", lr_eval_string("<param1>"));
lr_think_time(10); Find
lrs_send("socket1", "buf80", LrsLastArg);
?
3 Replace the value in the appropriate Send buffer with the parameter, enclosed in
angle brackets.

send buf80
"kill <param1>"

4 Save and run the script.

Creating Vuser Scripts Chapter 12, page 228


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

Determining Character Offsets for Parameterization


To parameterize data, you need to determine the offset of the data that you want to
save to a parameter. VuGen allows you to retrieve the offset of a character and
display the data in hexadecimal format.

To display the data, its columns, and its offset, select the data and press F7. VuGen
displays the data based on its format—ASCII or EDCDIC.

ASCII Format Find

For data in ASCII format:


?
If the selected text is less than four characters, VuGen displays the data in their
hexadecimal, decimal and octal representations.

If the selected text is more than four characters, VuGen displays the data in
hexadecimal representation with the character offsets. All non-printable characters
are represented by points.

Creating Vuser Scripts Chapter 12, page 229


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

For example, if you want to determine the offset of the second PID shown below,
select the data from the beginning of the buffer. In

Find

Press F7 to display the data and the character offsets. In the following example, the
first column shows the offset of the data from the beginning of the marked area.
The second PID, 24280, is the twelfth character on the line that begins with 48;

Creating Vuser Scripts Chapter 12, page 230


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

therefore its offset is 60 (48+12). The second column shows the hexadecimal data
in ASCII format. The third column shows the actual ASCII characters. Non-
printable characters (such as “/n” ) are displayed as dots.

Find

Creating Vuser Scripts Chapter 12, page 231


Windows Sockets Vuser Scripts • Developing Windows Sockets Vuser Scripts

EBCDIC Format
You can only display data in EDCDIC format if you defined a translation table in the
In

vugen.ini file. For more information, see Appendix A, Configuring VuGen.

VuGen displays data in EBCDIC format in several columns:

If the selected text is less than four characters, VuGen displays the hexadecimal,
decimal and octal representations of the data in EBCDIC format.

If the selected text is more than four characters, VuGen displays the data in several Find
columns. In the first column it displays the character offsets from the beginning of
the marked section. In the second column, it displays the hexadecimal ?
representation of the data in EBCDIC format. In the third column it displays the data
in ASCII format. All non-printable ASCII characters are represented by points.

Creating Vuser Scripts Chapter 12, page 232


Part VI

APPC Vuser Scripts

Find

Creating Vuser Scripts 233


APPC Vuser Scripts
Developing APPC Vuser Scripts
13
Developing APPC Vuser Scripts
You use VuGen to record communication between a client application and a server
In

that are linked using Advanced Program to Program Communication (APPC). The
resulting script is called an APPC Vuser script.

This chapter describes:

• Getting Started with APPC Vuser Scripts


• Using LRA Functions Find

• Understanding APPC Vuser Scripts ?


• Viewing APPC Data
• Using APPC Data Buffers
• Understanding Data Files

This chapter applies to APPC Vuser scripts only.

Creating Vuser Scripts Chapter 13, page 234


APPC Vuser Scripts • Developing APPC Vuser Scripts

About Recording APPC Vuser Scripts


When you record applications connected by APPC, VuGen generates APPC
functions that describe the recorded actions. Each APPC function begins with an
lra prefix. The LRA functions relate to the APPC conversations and data buffers.
Using VuGen, you record your application’s WINAPPC and EHNAPPC API calls.
For example, you could create a script by recording the actions of a terminal
application.

In the following example, lra_send sends a data buffer, buffer3 to a remote Find
computer. The open conversation is Conv33339768.
?
lra_send("Conv33339768", "buffer3");

You can view and edit the recorded script from VuGen’s main window. The APPC
API calls that were recorded during the session are displayed in the window,
allowing you to visually track your network activities.

Creating Vuser Scripts Chapter 13, page 235


APPC Vuser Scripts • Developing APPC Vuser Scripts

Getting Started with APPC Vuser Scripts


In

This section provides an overview of the process of using VuGen to develop APPC
Vuser scripts.

To develop an APPC Vuser script:


1 Record the basic script using VuGen.
Start VuGen and create a new Vuser script. Specify APPC as the type of Vuser.
Choose an application to record. Record typical operations on your application.
Find
For details, see Chapter 3, Recording with VuGen.
2 Enhance the script. ?
Enhance the Vuser script by inserting transactions, rendezvous points, and
control-flow structures into the script.
For details, see Chapter 4, Enhancing Vuser Scripts.
3 Define parameters (optional).
Define parameters for the fixed-values recorded into your script. By substituting
fixed-values with parameters, you can repeat the same business process many
times using different values.
For details, see Chapter 5, Defining Parameters.

Creating Vuser Scripts Chapter 13, page 236


APPC Vuser Scripts • Developing APPC Vuser Scripts

4 Configure the run-time settings.


The run-time settings control the Vuser behavior during script execution. These
settings include loop, log, and timing information.
For details, see Chapter 6, Configuring Run-Time Settings.
5 Run the script from VuGen.
Save and run the script from VuGen to verify that it runs correctly.
For details, see Chapter 7, Running Vuser Scripts in Stand-Alone Mode.
Find
After you create an APPC Vuser script, you integrate it into a LoadRunner
scenario on either a Windows or UNIX platform. For more information on ?
integrating Vuser scripts in a scenario, refer to your LoadRunner Controller
User’s Guide.

Creating Vuser Scripts Chapter 13, page 237


APPC Vuser Scripts • Developing APPC Vuser Scripts

Using LRA Functions


In

The functions developed to emulate communication using the APPC protocol are
called LRA Vuser functions. Each LRA Vuser function has an lra prefix. This
section lists the LRA functions that VuGen generates while recording an APPC
session. You can also manually program any of the functions into your script. For
more information about the LRA functions, refer to the LoadRunner Online
Function Reference (available from the VuGen Help menu).

Find
Conversation Functions
lra_allocate Initializes a conversation with a remote computer. ?
lra_deallocate Ends a conversation with a remote computer
(destroys the conversation descriptor).

Creating Vuser Scripts Chapter 13, page 238


APPC Vuser Scripts • Developing APPC Vuser Scripts

Buffer Functions
lra_get_received_buffer Retrieves a fragment of the last received buffer.
lra_get_static_buffer Retrieves a fragment of a static buffer.
lra_get_user_buffer Retrieves the contents of the user data buffer.
lra_get_user_buffer_size Retrieves the size of the user data buffer.
lra_send Sends a buffer over an APPC conversation to a
remote computer.
Find
lra_receive Receives a set of buffers over an APPC
conversation from a remote computer.
?
lra_get_buffer_fragment Retrieves a fragment of the one of the last
received buffers.
lra_last_received_count Returns the number of valid buffers received by
the last call to lra_receive().
lra_ascii_to_ebcdic Converts buffer data from ASCII format to
EBCDIC format.
lra_ebcdic_to_ascii Converts buffer data from EBCDIC format to
ASCII format.

Creating Vuser Scripts Chapter 13, page 239


APPC Vuser Scripts • Developing APPC Vuser Scripts

Correlating Statement Function


lra_save_param_ex Saves a buffer or a buffer fragment into a
In

parameter.

Unique ID Functions
lra_make_id Creates a unique identifier and stores it in a
parameter.
lra_make_id_from_alphanum
Find
Creates a unique identifier from alphanumeric
characters and stores it in a parameter. ?
Error Handling Functions
lra_get_error_string Returns a constant character string associated
with an error code.
lra_get_last_error Returns the last error that occurred during an
APPC conversation.

Creating Vuser Scripts Chapter 13, page 240


APPC Vuser Scripts • Developing APPC Vuser Scripts

Understanding APPC Vuser Scripts


After you record a session, VuGen’s built-in editor lets you view the recorded script.
You can scroll through the script, view the functions that were generated, and
examine the transferred data. When you view the script, you see the sequence in
which VuGen recorded your activities.

VuGen supports record and run for APPC applications on Windows NT 4.0 and
Windows 95 platforms.
Find

Creating Vuser Scripts Chapter 13, page 241


APPC Vuser Scripts • Developing APPC Vuser Scripts

Viewing APPC Data


In

When you create a new Vuser script with VuGen, the actions are stored in three
sections: vuser_init, Actions, and vuser_end. When you record an APPC
application, a data file, appc.dt, is created containing the contents of the buffers
that were transmitted or received during a recording session. You can view the data
from VuGen’s main window by selecting appc.dt.

Find

Creating Vuser Scripts Chapter 13, page 242


APPC Vuser Scripts • Developing APPC Vuser Scripts

Using APPC Data Buffers


Several LRA functions, such as lra_receive and lra_send, handle the actual data
that is transferred between servers and clients. The data that is received or
transmitted is stored in data buffers, which can be very large. In order to simplify
the appearance of the script, the actual data is stored in external files—not in the
C file. When a data transfer occurs, the data is copied from the external file into a
temporary buffer.

In the following example, an lra_receive function was generated during a Vuser Find
session:
?
lra_receive("Conv33339768", "type=11", "buffer8, buffer9");

In this example, lra_receive handled data that was received over the
conversational connection, Conv33339768. The data was stored in two buffers,
buffer8 and buffer9. The corresponding section of the appc.dt file shows the buffers
and their contents.

buffer8
"\x00\x0A\x12\xA0\x00\x00\x04\x00\x00\x0C"
buffer9
"\x00\x0A\x12\xA0\x00\x00\x04\x00\x00\x0B"

Creating Vuser Scripts Chapter 13, page 243


APPC Vuser Scripts • Developing APPC Vuser Scripts

You can enhance the recorded script with the following buffer handling statements:
In

lra_last_received_count Checks the number of valid buffers received in


the last call to lra_receive.
lra_get_buffer_fragment Retrieves a portion of a buffer’s contents.
lra_ascii_to_ebcdic Reformats a buffer
lra_ebcdic_to_ascii Reformats a buffer.

Find

Creating Vuser Scripts Chapter 13, page 244


APPC Vuser Scripts • Developing APPC Vuser Scripts

Understanding Data Files


The appc.dt file contains a list of temporary buffers and their contents. The contents
of the buffers is stored as sequential records, with a blank line at the end of each
buffer.

String data is stored in ASCII format, and represented in the appc.dt file as a string.
All other data is stored as EBCDIC format, and represented in the appc.dt file in
hexadecimal.
Find

Creating Vuser Scripts Chapter 13, page 245


APPC Vuser Scripts • Developing APPC Vuser Scripts
The following segment shows the buffers in a typical data file:

; /* APPC data file version 1.0 */


In

buffer3
"\x00\x24\x12\xA0\x00\x00\x04\x00\x80\x03\x06\x07\x39"
"1"
"\x00\x00\x07\x39"
"1"
"\x11\x06\x35"
"QSECOFR"
"\x11\x07\x35"
"QSEC" Find

buffer4
"\x00\x24\x12\xA0\x00\x00\x04\x00\x80\x03\x06\x07\x39"
?
"1"
"\x00\x00\x07\x39"
"1"
"\x11\x06\x35"
"QSECOFR"
"\x11\x07\x35"
"QSEC"

buffer5
"\x00\x1F\x12\xA0\x00\x00\x04\x00\x80\x03\x0E\x18\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x04"
"3"
"\x00\x05"
"R"
"\x70\x00"

Creating Vuser Scripts Chapter 13, page 246


Part VII

RTE Vuser Scripts

Find

Creating Vuser Scripts 247


RTE Vuser Scripts
Introducing RTE Vuser Scripts
14
Introducing RTE Vuser Scripts
RTE Vusers operate terminal emulators in both Windows and UNIX environments.
In

This chapter describes the development of Windows-based RTE Vuser scripts only.

This chapter describes:

• Introducing RTE Vusers


• Understanding RTE Vuser Technology

Find
Getting Started with RTE Vuser Scripts
• Using TE Functions ?
• Mapping Terminal Keys to PC Keyboard Keys

This chapter applies to RTE (Windows) Vuser scripts only.

Creating Vuser Scripts Chapter 14, page 248


RTE Vuser Scripts • Introducing RTE Vuser Scripts

About Developing RTE Vuser Scripts


RTE Vusers operate terminal emulators in order to load client/server systems. The
terminal emulators can be Windows-based or UNIX-based. This chapter describes
the development of Windows-based RTE Vuser scripts only. For details on
developing UNIX-based RTE Vuser scripts, refer to the Creating RTE Virtual User
Scripts (UNIX) guide.

Note: Windows-based RTE Vusers can be controlled by a Windows-based Find


Controller only.
?

Creating Vuser Scripts Chapter 14, page 249


RTE Vuser Scripts • Introducing RTE Vuser Scripts
Introducing RTE Vusers
An RTE Vuser types character input into a terminal emulator, submits the data to a
server, and then waits for the server to respond. For instance, suppose that you
In

have a server that maintains customer information for a maintenance company.


Every time a field service representative makes a repair, he accesses the server
database by modem using a terminal emulator. The service representative
accesses information about the customer and then records the details of the repair
that he performs.

You could use RTE Vusers to emulate this scenario. An RTE Vuser would:
Find
1 Type “60” at the command line to open an application program.
2 Type “F296”, the field service representative’s number. ?
3 Type “NY270“, the customer number.
4 Wait for the word “Details” to appear on the screen. The appearance of “Details”
indicates that all the customer details are displayed on the screen.
5 Type “Changed gasket P249, and performed Major Service”, the details of the
current repair.
6 Type “Q“ to close the application program.

You use VuGen to create RTE Vuser scripts. The script generator records the
actions of a human user in a terminal emulator. It records the keyboard input from
the terminal window, generates the appropriate statements, and inserts them into
the Vuser script. While you record, the script generator automatically inserts
synchronization functions into the script. For details, see Chapter 16,
Synchronizing RTE Vuser Scripts.

Creating Vuser Scripts Chapter 14, page 250


RTE Vuser Scripts • Introducing RTE Vuser Scripts

Understanding RTE Vuser Technology


An RTE Vuser emulates the actions of a real user. Human users use terminals or
terminal emulators to operate application programs.

Application Terminal
Program Human User
Emulator

In the RTE Vuser environment, LoadRunner replaces the human user with a
Vuser. The Vuser operates RTE-Gate, LoadRunner’s terminal emulator. Find

Application
Program RTE-Gate Vuser ?
RTE-Gate works like a standard terminal emulator, supporting common protocols
such as IBM 3270 & 5250, VT100, and VT220.
Since RTE-Gate is specially enhanced for load testing, it enables you to:

• Replace the human user with a Vuser script that operates an application program
by using LoadRunner functions.
• Record the operations that you perform on the application program, thereby
generating Vuser scripts quickly and easily.
• Run a large number of RTE Vusers on a single workstation.
• Control the terminal—view, hide, and kill it—using the Controller.

Creating Vuser Scripts Chapter 14, page 251


RTE Vuser Scripts • Introducing RTE Vuser Scripts

Getting Started with RTE Vuser Scripts


In

This section provides an overview of the process of developing Database Vuser


scripts using VuGen.

To develop a Database Vuser script:


1 Record the basic script using VuGen.
Use the Vuser Script Generator (VuGen) to record the operations that you perform
in a terminal emulator. VuGen records the keyboard input from the terminal
Find
window, generates the appropriate statements, and then inserts these statements
into the Vuser script.
?
For details, see Chapter 15, Recording RTE Vuser Scripts.
2 Enhance the script.
Enhance the Vuser script by inserting transactions, rendezvous points,
synchronization functions, and control-flow structures into the script.
For details, see Chapter 4, Enhancing Vuser Scripts.
3 Define parameters (optional).
Define parameters for the fixed-values recorded into your script. By substituting
fixed-values with parameters, you can repeat the same business process many
times using different values.
For details, see Chapter 5, Defining Parameters.

Creating Vuser Scripts Chapter 14, page 252


RTE Vuser Scripts • Introducing RTE Vuser Scripts

4 Configure the run-time settings.


The run-time settings control the Vuser behavior during script execution. These
settings include loop, log, and timing information.
For details, see Chapter 6, Configuring Run-Time Settings.
5 Run the script from VuGen.
Run the script from VuGen to verify that it runs correctly. View the standard output
to verify that the program is communicating properly with the server.
For details, see Chapter 7, Running Vuser Scripts in Stand-Alone Mode. Find

After you successfully create an RTE Vuser script, you integrate it into a ?
LoadRunner scenario. For more information on integrating Vuser scripts in a
scenario, refer to your LoadRunner Controller User’s Guide.

Creating Vuser Scripts Chapter 14, page 253


RTE Vuser Scripts • Introducing RTE Vuser Scripts

Using TE Functions
In

The functions developed to emulate a terminal communicating with a server are


called TE Vuser functions. Each TE Vuser function has a TE prefix. This section
lists the TE functions that VuGen records while creating an RTE Vuser script. For
Online syntax and examples of the TE functions, refer to the LoadRunner Online
Function Function Reference (available from the VuGen Help menu).
Reference
Terminal Emulator Connection Function
Find
TE_connect Connects the terminal emulator to the specified
host. ?
Text Retrieval Functions
TE_find_text Searches for text in a designated area of the
screen.
TE_get_text_line Reads text from a designated line on the screen.
TE_get_cursor_pos Returns the current location of the cursor.
TE_get_line_attribute Returns information about text formatting.

System Variable Functions


TE_getvar Returns the value of an RTE system variable.
TE_setvar Sets the value of an RTE system variable.

Creating Vuser Scripts Chapter 14, page 254


RTE Vuser Scripts • Introducing RTE Vuser Scripts

Error Code Functions


TE_perror Prints an error code to the Output window.
TE_sperror Translates an error code into a string.

Typing Functions
TE_type Sends a formatted string to the client application.
TE_typing_style Determines the way text is typed into the terminal
emulator. Find

Synchronization Functions ?
TE_wait_cursor Waits for the cursor to appear at a specified
location in the terminal window.
TE_wait_silent Waits for the client application to be silent for a
specified number of seconds.
TE_wait_sync Waits for the system to return from X-SYSTEM or
Input Inhibited mode.
TE_wait_text Waits for a string to appear in a designated
location.

The following TE functions can be parameterized: TE_connect, TE_find_text,


TE_get_text_line, and TE_type. For details on parameterizing function in Vuser
scripts, see Chapter 5, Defining Parameters.

Creating Vuser Scripts Chapter 14, page 255


RTE Vuser Scripts • Introducing RTE Vuser Scripts

Mapping Terminal Keys to PC Keyboard Keys


In

Because you are using a terminal emulator, you will be using a PC keyboard in
place of a terminal keyboard. Many keys that are found on the terminal keyboard
are not available on a PC keyboard. Examples of such keys are HELP, AUTOR, and
PUSH, which are found on the IBM 5250 keyboard. To successfully operate the
terminal emulator and any associated application programs, you may have to map
certain terminal keys to keys on the PC keyboard.

Find

Creating Vuser Scripts Chapter 14, page 256


RTE Vuser Scripts • Introducing RTE Vuser Scripts

To map a terminal key to a key on the PC keyboard:


1 In the terminal emulator, select Options > Keyboard Map, or click the Keyboard
Mapping button. The Keyboard Mapping dialog box opens.

Find

2 Click the Keyboard Mapping button on the toolbar. To map a terminal key to a PC
key, drag a key from the upper terminal keyboard to a PC key on the lower
keyboard.

Creating Vuser Scripts Chapter 14, page 257


RTE Vuser Scripts • Introducing RTE Vuser Scripts

You can click the Shift and/or Control keys on the upper keyboard to display
additional key functions that can be viewed only by first selecting either of these In

keys. You can then drag the required key from the upper terminal keyboard to a
key on the lower PC keyboard.
To cancel a definition, drag the PC key definition to the wastebasket. This restores
the default function of the PC key.
To restore the default mappings, click Defaults.

Find

Creating Vuser Scripts Chapter 14, page 258


RTE Vuser Scripts
Recording RTE Vuser Scripts
15
Recording RTE Vuser Scripts
You use VuGen to record Windows-based RTE Vuser scripts.
In

This chapter describes:

• Creating a New RTE Vuser Script


• Recording the Terminal Setup and Connection Procedure
• Recording Typical User Actions
Find
• Recording the Log Off Procedure
• Recording the Log Off Procedure
?
• Setting the Recording Options
• Using the APPC Protocol in RTE Vuser Scripts
• Generating Unique Device Names
• Setting the Field Demarcation Characters

This chapter applies to RTE (Windows) Vuser scripts only.

Creating Vuser Scripts Chapter 15, page 259


RTE Vuser Scripts • Recording RTE Vuser Scripts

About Recording RTE Vuser Scripts


In

You use VuGen to record Windows-based RTE Vuser scripts. VuGen uses the
PowerTerm terminal emulator to emulate a wide variety of terminal types. You use
PowerTerm to perform a typical terminal connection, followed by typical business
processes. Thereafter, you perform the log off procedure. While you perform typical
user actions in the terminal emulator, VuGen generates the appropriate
statements, and inserts them into a Vuser script. You can view and edit the script
while recording.
Find
Before recording an RTE Vuser script, ensure that the recording options are set
correctly. The recording options allow you to control how VuGen generates certain ?
functions while you record a Vuser script. VuGen applies the recording options
during all subsequent recording sessions.

Creating Vuser Scripts Chapter 15, page 260


RTE Vuser Scripts • Recording RTE Vuser Scripts

Creating a New RTE Vuser Script


Before recording a user’s actions into a Vuser script, you must open a script. You
can open an existing script, or create a new script. You use VuGen to create a new
Vuser script.

To create a new RTE Vuser script:


1 Select Start > Programs > LoadRunner > Virtual User Generator to start VuGen.
The VuGen window opens.
Find

Creating Vuser Scripts Chapter 15, page 261


RTE Vuser Scripts • Recording RTE Vuser Scripts

2 Click the New button. The New Virtual User dialog box opens, and displays a list
of the supported Vuser types. In

Find

3 Choose RTE and then click OK. VuGen generates and displays a “skeleton” RTE ?
Vuser script, with the cursor positioned to begin recording in the vuser_init
section.

Creating Vuser Scripts Chapter 15, page 262


RTE Vuser Scripts • Recording RTE Vuser Scripts

Recording the Terminal Setup and Connection Procedure


After you create a blank Vuser script, you record the terminal setup and connection
procedure into the script. VuGen uses the PowerTerm terminal emulator when you
record an RTE Vuser script.

To record the terminal setup and connection procedure:


1 Open an existing RTE Vuser script, or create a new one.
2 In the Sections box, select the section into which you want VuGen to insert the
recorded statements. The available sections are vuser_init, Actions, and
vuser_end. Find

Creating Vuser Scripts Chapter 15, page 263


RTE Vuser Scripts • Recording RTE Vuser Scripts

Note: Always record the terminal setup and connection procedure into the
vuser_init section. The vuser_init section is not repeated when you run multiple In

iterations of a Vuser script—only the Actions section is repeated. For more


information on the iteration settings, see Chapter 6, Configuring Run-Time
Settings.

3 In the Vuser script, place the cursor at the location where you want to begin
recording.
Find
4 Click the Record button. The PowerTerm main window appears.
?

Creating Vuser Scripts Chapter 15, page 264


RTE Vuser Scripts • Recording RTE Vuser Scripts

5 From the PowerTerm menu bar, select Terminal > Setup to display the Terminal
Setup dialog box.

Find

6 Select the type of emulation from the VT Terminal and IBM Terminal types, and
then click OK.

Note: Select an IBM terminal type to connect to an AS400 machine or an IBM


mainframe; select a VT terminal type to connect to a UNIX workstation.

Creating Vuser Scripts Chapter 15, page 265


RTE Vuser Scripts • Recording RTE Vuser Scripts

7 Select Communication > Connect to display the Connect dialog box.

In

Find

8 Under Session Type, select the type of communication to use.


9 Under Parameters, specify the required options. The available parameters vary
depending on the type of session that you select. For details on the parameters,
click Help.

Creating Vuser Scripts Chapter 15, page 266


RTE Vuser Scripts • Recording RTE Vuser Scripts

Note: You can save the parameters that you define for re-use in the future. To save
the parameters, click Save As. The parameter-sets that you save are displayed in
the Sessions List box.

10 Click Connect. PowerTerm connects to the specified system, and VuGen inserts a
TE_connect function into the script, at the insertion point.
The inserted TE_connect statement looks something like the following:
Find
/* *** The terminal type is VT220-7. */
TE_connect("comm-type = telnet;host-name = frodo; ?
terminal-type = vt220-7;terminal-model = vt320;", 60000);
if (TE_errno != TE_SUCCESS)
return -1;
The inserted TE_connect statement is always followed by an if statement that
checks whether or not the TE_connect function succeeds during replay.

Note: Do not record more than one connection to a server (TE_connect) in a


Vuser script.

The terminal setup and connection procedure is complete. You are now ready to
begin recording typical user actions into the Vuser script, as described below.

Creating Vuser Scripts Chapter 15, page 267


RTE Vuser Scripts • Recording RTE Vuser Scripts

Recording Typical User Actions


In

After recording the setup procedure, you perform typical user actions or business
processes. You record these processes into the Actions section of the Vuser script.
Only the Actions section of a Vuser script is repeated when you run multiple
iterations of the script. For details on setting iterations, see Chapter 6, Configuring
Run-Time Settings.

To record user actions:


1 Open an existing RTE Vuser script, and then click Actions in the Section box. Find

2 Proceed to perform typical user actions in the terminal emulator. VuGen generates
the appropriate statements, and inserts them into the Vuser script while you type.
?
If necessary, you can edit the recorded statements while you record the script.

Note: By default, VuGen waits a maximum of 5 seconds between successive


keystrokes before generating the appropriate TE_type function. To change the
waiting time, see Setting the Recording Options on page 270.

When you finish recording the typical user actions, proceed to record the log off
procedure, as described in the next section.

Creating Vuser Scripts Chapter 15, page 268


RTE Vuser Scripts • Recording RTE Vuser Scripts

Recording the Log Off Procedure


You record the Vuser log off process into the vuser_end section of the Vuser script.
The vuser_end section is not repeated when you run many iterations of the script.
For details on setting iterations, see Chapter 6, Configuring Run-Time Settings.

To record the log off procedure:


1 Ensure that you have performed and recorded the typical user actions as
described in the previous section.
2 In the VuGen main window, click vuser_end in the Section box. Find

3 Perform the log off procedure. VuGen records the procedure into the vuser_end
section of the script.
?
4 Click Stop Recording on the Recording toolbar. The main VuGen window displays
all the recorded statements.
5 Click Save to save the recorded session. The Save As dialog box opens (for new
Vuser scripts only). Specify a script name.
After recording a script, you can manually edit the script in VuGen’s main window.

Creating Vuser Scripts Chapter 15, page 269


RTE Vuser Scripts • Recording RTE Vuser Scripts

Setting the Recording Options


In

By setting the recording options, you can customize the code that VuGen
generates for RTE functions. You use the Recording Options dialog box to set the
recording options. To open the Recording Options dialog box, select Vuser >
Recording Options.

Automatic Screen Header Comments (IBM terminals only)


You can instruct VuGen to automatically generate screen header comments while Find
recording a Vuser script, and insert the comments into the script. Generated
comments make a recorded script easier to read by identifying each new screen ?
as it is displayed in the terminal emulator. A generated comment contains the text
that appears on the first line of the terminal emulator window. The following
generated comment shows that the Office Tasks screen was displayed in the
terminal emulator:

/* OFCTSK Office Tasks */

To ensure that VuGen automatically generates comments while you record a script,
select the “Generate screen header comments” check box in the Recording
Options dialog box.

By default, VuGen does not automatically generate screen comments.

Creating Vuser Scripts Chapter 15, page 270


RTE Vuser Scripts • Recording RTE Vuser Scripts

Note: You can generate comments automatically only when using block-mode
terminal emulators such as the IBM 5250.

Automatic Transactions (IBM terminals only)


You can specify that VuGen record the time that the system was in the X SYSTEM
mode during a scenario run. To do so, VuGen inserts a
TE_wait_sync_transaction function after each TE_wait_sync function. Each Find
TE_wait_sync_transaction function creates a transaction with the name
“default”. Each TE_wait_sync_transaction function records the time that the ?
system spent in the previous X SYSTEM state.

To instruct VuGen to insert TE_wait_sync_transaction statements while


recording, select the “Generate automatic X SYSTEM transactions” check box in
the Recording Options dialog box.

By default, VuGen does not automatically generate transactions.

Creating Vuser Scripts Chapter 15, page 271


RTE Vuser Scripts • Recording RTE Vuser Scripts

Synchronization Functions
VuGen can automatically generate a number of TE-synchronization functions, and In

insert them into the script while you record.

1 You can specify that VuGen generate a TE_wait_sync function each time a new
screen is displayed while recording. To do so, select the “X-System” check box in
the Recording Options dialog box.
By default, VuGen does automatically generate a TE_wait_sync function each
time a new screen is displayed while recording.
Find

Note: VuGen generates TE_wait_sync functions when recording IBM block mode ?
terminals only.

2 You can specify that VuGen generate a TE_wait_cursor function before each
TE_type function. To do so, select the “Cursor” check box in the Recording
Options dialog box.
By default, VuGen does not automatically generate TE_wait_cursor functions.
3 You can specify that VuGen generate a TE_wait_text function before each
TE_type function (where appropriate). To do so, select the “Prompt” check box in
the Recording Options dialog box.
By default, VuGen does not automatically generate a TE_wait_text function before
each TE_type function.

Creating Vuser Scripts Chapter 15, page 272


RTE Vuser Scripts • Recording RTE Vuser Scripts

Note: VuGen generates meaningful TE_wait_text functions when recording VT


type terminals only. Do not use automatic TE_wait_text function generation when
recording block-mode (IBM) terminals.

Keyboard Recording Timeout


When you type text into a terminal emulator while recording, VuGen monitors the Find
text input. After each keystroke, VuGen waits up to a specified amount of time for
the next key stroke. If there is no subsequent keystroke within the specified time, ?
VuGen assumes that the command is complete. VuGen then generates and inserts
the appropriate TE_type function into the Vuser script.

To set the maximum amount of time that VuGen waits between successive
keystrokes, enter an amount in the “Keyboard record timeout” box.

By default, VuGen waits a maximum of 5 seconds between successive keystrokes


before generating the appropriate TE_type function.

Creating Vuser Scripts Chapter 15, page 273


RTE Vuser Scripts • Recording RTE Vuser Scripts

Typing Input into a Terminal Emulator


In

Two LoadRunner TE functions enable Vusers to “type” character input into the
RTE-GATE terminal emulator:

• TE_type sends characters to the terminal emulator. When recording, the Vuser
Script Generator automatically generates TE_type functions for keyboard input to
the terminal window. For details, see Using the TE_type Function below.
• TE_typing_style determines the speed at which the Vuser types. You can
manually define the typing style by inserting a TE_typing_style function into the Find
Vuser script. For details, see Setting the Typing Style below. Alternatively, you
can set the typing style by using the run-time settings. For details, see Setting the ?
RTE Run-Time Settings on page 105.

Note: While recording an RTE Vuser script, do not use the mouse to relocate the
cursor within the terminal emulator window. VuGen does not record these cursor
movements.

Creating Vuser Scripts Chapter 15, page 274


RTE Vuser Scripts • Recording RTE Vuser Scripts

Using the TE_type Function


When you record a script, the Vuser Script Generator records all keyboard input
and generates appropriate TE_type functions. During execution, TE_type
functions send formatted strings to the terminal emulator.
Keyboard input is defined as a regular text string (including blank spaces). For
example:

TE_type ("hello, world");

Find
Input key names longer than one character are represented by identifiers
beginning with the letter k, and are bracketed within greater-than/less-than
signs (< >). For example, the function:
?
TE_type("<kReturn><kControl-y>");

depicts the input of the Return key followed by the Control and y keys. Some other
examples include: <kF1>, <kUp>, <kF10>, <kHelp>, <kTab>.
To determine a key name, record an operation on the key, and then check the
recorded statement for its name.

Online Note: When you program a TE_type statement (rather than recording it), use the
Function key definitions provided in the LoadRunner Online Function Reference
Reference (available from the VuGen Help menu).

Creating Vuser Scripts Chapter 15, page 275


RTE Vuser Scripts • Recording RTE Vuser Scripts

Setting the Timeout Value for TE_type


In

If a Vuser attempts to submit a TE_type statement while the system is in


X SYSTEM (or input inhibited) mode, the Vuser will wait until the X SYSTEM mode
ends before typing. If the system stays in X SYSTEM mode for more than
TE_XSYSTEM_TIMEOUT milliseconds, then the TE_type function returns a
TE_TIMEOUT error. You can set the value of TE_XSYSTEM_TIMEOUT by using
TE_setvar. The default value for TE_XSYSTEM_TIMEOUT is 30 seconds.

Allowing a Vuser to Type Ahead Find


Under certain circumstances you may want a Vuser to submit a keystroke even
though the system is in X SYSTEM (or input inhibited) mode. For example, you ?
may want the Vuser to press the Break key. You use the TE_ALLOW_TYPEAHEAD
variable to enable the Vuser to submit a keystroke even though the system is in
X SYSTEM mode.

Set TE_ALLOW_TYPEAHEAD to zero to disable typing ahead, and to any non-


zero number to permit typing ahead. You use TE_setvar to set the value of
TE_ALLOW_TYPEAHEAD. By default, TE_ALLOW_TYPEAHEAD is set to zero,
preventing keystrokes from being sent during X SYSTEM mode.

Online For more information about the TE_type function and its conventions, refer to the
Function LoadRunner Online Function Reference (available from the VuGen Help menu).
Reference

Creating Vuser Scripts Chapter 15, page 276


RTE Vuser Scripts • Recording RTE Vuser Scripts

Setting the Typing Style


You can set two typing styles for RTE Vusers: FAST and HUMAN. In the FAST style,
the Vuser types input into the terminal emulator as quickly as possible. In the
HUMAN style, the Vuser pauses after typing each character. In this way, the Vuser
more closely emulates a human user typing at the keyboard.

You set the typing style using the TE_typing_style function. The syntax of the
TE_typing_style function is:

int TE_typing_style (char *style ); Find

where style can be FAST or HUMAN. The default typing style is HUMAN. ?
If you select the HUMAN typing style, the format is:

HUMAN, delay [,first_delay]

The delay indicates the interval (in milliseconds) between keystrokes. The
optional parameter first_delay indicates the wait (in milliseconds) before typing the
first character in the string. For example,

TE_typing_style ("HUMAN, 100, 500");


TE_type ("ABC");

Creating Vuser Scripts Chapter 15, page 277


RTE Vuser Scripts • Recording RTE Vuser Scripts

means that the Vuser will wait 0.5 seconds before typing the letter A; it will then
wait 0.1 seconds before typing “B” and then a further 0.1 seconds before typing In

“C”.

Online For more information about the TE_typing_style function and its conventions,
Function refer to the LoadRunner Online Function Reference (available from the VuGen
Reference Help menu).

In addition to setting the typing style by using the TE_typing_style function, you
can also use the run-time settings. For details, see Setting the RTE Run-Time Find
Settings on page 105.
?

Creating Vuser Scripts Chapter 15, page 278


RTE Vuser Scripts • Recording RTE Vuser Scripts

Using the APPC Protocol in RTE Vuser Scripts


The APPC protocol does not provide any notification when data is available from
the host. Therefore, if your RTE Vusers use the APPC protocol, the terminal must
continuously poll the connection state to detect arriving asynchronous data.

You can use two RTE system variables to control the polling frequency:

• The TE_APPC_X_RATE variable specifies the polling frequency when the


terminal is in X SYSTEM (or input inhibited) mode. By default, the terminal polls Find
the connection state every 0.5 seconds.
• The TE_APPC_NON_X_RATE variable specifies the polling frequency when user ?
input is allowed (i.e. the terminal is not in X SYSTEM mode). By default, the
terminal polls the connection state every 2 seconds.

The TE_APPC_X_RATE frequency should be higher than the


TE_APPC_NON_X_RATE frequency. This is because host output is rarely
expected when user input is allowed.

You use the TE_getvar and TE_setvar functions to retrieve and set the values of
the system variables. The values are specified in milliseconds.

In the following example, TE_setvar sets the polling rate of the APPC connection—
when the terminal is in X SYSTEM mode—to 0.3 seconds:

TE_setvar("TE_APPC_X_RATE", 300);

Creating Vuser Scripts Chapter 15, page 279


RTE Vuser Scripts • Recording RTE Vuser Scripts

Generating Unique Device Names


In

Some protocols, such as APPC, require a unique device name for each terminal
that logs on to the system. Using the run-time settings, you can specify that the
TE_connect function generate a unique 8-character device name for each Vuser,
and connect using this name. Although this solves the requirement for uniqueness,
some systems have an additional requirement: The device names must conform to
a specific format. For details about the run-time settings, see Chapter 6,
Configuring Run-Time Settings.
Find
To define the format of the device names that the TE_connect function uses to
connect a Vuser to the system, add an RteGenerateDeviceName function to the ?
Vuser script. The function has the following prototype:

void RteGenerateDeviceName(char buf[32])

The device name should be written into buf.

If an RteGenerateDeviceName function exists in a Vuser script, the Vuser calls the


function each time a new device name is needed. If no RteGenerateDeviceName
function is defined in the script—and unique device names are requireed—the
TE_connect function generates the required names.

Creating Vuser Scripts Chapter 15, page 280


RTE Vuser Scripts • Recording RTE Vuser Scripts

In the following example, the RteGenerateDeviceName function generates unique


device names with the format “TERMx”. The first name is TERM0, followed by
TERM1, TERM2 etc.

RteGenerateDeviceName(char buf[32])
{
static int n=0;
sprintf(buf, "TERM%d", n);
n=n+1;
} Find

Creating Vuser Scripts Chapter 15, page 281


RTE Vuser Scripts • Recording RTE Vuser Scripts

Setting the Field Demarcation Characters


In

Some terminal emulators use demarcation characters to mark the beginning and
the end of each field. These demarcation characters are not visible—appearing on
the screen as spaces. In the terminal emulator shown below, the colors in the
middle section of the screen have been inverted to display the field demarcation
characters. These characters are surrounded by ellipses.

Find

Creating Vuser Scripts Chapter 15, page 282


RTE Vuser Scripts • Recording RTE Vuser Scripts

The TE_wait_text, TE_get_text, and TE_find_text functions operate by


identifying the characters in a specified portion of the screen. If a field demarcation
character is located within the specified section, you can choose to identify the
character either as a space, or as an ASCII character. You use the
TE_FIELD_CHARS system variable to specify the method of identification. You can
set TE_FIELD_CHARS to 0 or 1:

• O specifies that the character in the position of the field demarcation characters is
returned as a space.
• 1 specifies that the character in the position of the field demarcation characters is
Find

returned as an ascii code (ascii 0 or ascii 1).


?
By default, TE_FIELD_CHARS is set to 0.

You retrieve and set the value of TE_FIELD_CHARS by using the TE_getvar and
TE_setvar functions.

Creating Vuser Scripts Chapter 15, page 283


RTE Vuser Scripts
Synchronizing RTE Vuser Scripts
16
Synchronizing RTE Vuser Scripts
Synchronization functions in an RTE Vuser script ensure that the input that a Vuser
In

submits to a terminal emulator is synchronized with the responses from the server.

This chapter describes:

• Synchronizing Block-Mode (IBM) Terminals


• Synchronizing Character-Mode (VT) Terminals
Find
This chapter applies to RTE (Windows) Vuser scripts only.
?

Creating Vuser Scripts Chapter 16, page 284


RTE Vuser Scripts • Synchronizing RTE Vuser Scripts

About Synchronizing Vuser Scripts


Depending on the system you are testing, you may need to synchronize the input
that a Vuser sends to a terminal emulator with the subsequent responses from the
server. When you synchronize input, you instruct LoadRunner to suspend script
execution and wait for a cue from the system, before the Vuser performs its next
action. For instance, suppose that a human user wants to submit the following
sequence of key strokes to a bank application:

1 Type 1 to select “Financial Information” from the menu of a bank application. Find
2 When the message “What information do you require?” appears, type 3 to select
“Dow Jones Industrial Average” from the menu. ?
3 When the full report has been written to the screen, type 5 to exit the bank
application.

In this example, the input to the bank application is synchronized because at each
step, the human user waits for a visual cue before typing. This cue can be either
the appearance of a particular message on the screen, or stability of all the
information on the screen.

Creating Vuser Scripts Chapter 16, page 285


RTE Vuser Scripts • Synchronizing RTE Vuser Scripts

You can synchronize the input of a Vuser in the same way by using LoadRunner’s
TE-synchronization functions, TE_wait_sync, TE_wait_text, TE_wait_silent, and In

TE_wait_cursor. These functions effectively emulate a human user who types into
a terminal window and then waits for the server to respond, before typing in the next
command.

The TE_wait_sync function is used to synchronize block-mode (IBM) terminals


only. The other TE-synchronization functions are used to synchronize character-
mode (VT) terminals.
Find
When you record an RTE Vuser script, VuGen can automatically generate and
insert TE_wait_sync, TE_wait_text, and TE_wait_cursor statements into the ?
script. You use VuGen’s recording options to specify which synchronization
functions VuGen should insert.

Note: Do not include any synchronization statements in the Vuser_end section of


a Vuser script. Since a Vuser can be aborted at any time, you cannot predict when
the Vuser_end section will be executed.

Creating Vuser Scripts Chapter 16, page 286


RTE Vuser Scripts • Synchronizing RTE Vuser Scripts

Synchronizing Block-Mode (IBM) Terminals


The TE_wait_sync function is used for synchronization RTE Vusers operating
block-mode (IBM) terminals. Block-mode terminals display the “X SYSTEM”
message to indicate that the system is in Input Inhibited mode. When a system is
in the Input Inhibited mode no typing can take place because the terminal emulator
is waiting for a transfer of data from the server.

When you record a script on a block-mode terminal, by default, VuGen generates


and inserts a TE_wait_sync function into the script each time the “X SYSTEM” Find
message appears. You use VuGen’s recording options to specify whether or not
VuGen should automatically insert TE_wait_sync functions. ?
When you run a Vuser script, the TE_wait_sync function checks if the system is in
the X SYSTEM mode. If the system is in the X SYSTEM mode, the TE_wait_sync
function suspends script execution. When the “X SYSTEM” message is removed
from the screen, script execution continues.

Note: You can use the TE_wait_sync function only with IBM block-mode
terminals emulators (5250 and 3270).

Creating Vuser Scripts Chapter 16, page 287


RTE Vuser Scripts • Synchronizing RTE Vuser Scripts

In general, the TE_wait_sync function provides adequate synchronization for all


block-mode terminal emulators. However, if the TE_wait_sync function is In

ineffective in a particular situation, you can enhance the synchronization by


including a TE_wait_text function. For more information on the TE_wait_text
Online function, see Waiting for Text to Appear on the Screen on page 296, and the
Function LoadRunner Online Function Reference (available from the VuGen Help
Reference menu).

The syntax of the TE_wait_sync function is:

TE_wait_sync ( ); Find

In the following script segment, the Vuser logs on with the user name “QUSER” ?
and the password “MERCURY“. The Vuser then presses Enter to submit the login
details to the server. The terminal emulator displays the X SYSTEM message
while the system waits for the server to respond. The TE_wait_sync statement
causes the Vuser to wait until the server has responded to the login request i.e. for

Creating Vuser Scripts Chapter 16, page 288


RTE Vuser Scripts • Synchronizing RTE Vuser Scripts

the X SYSTEM message to be removed—before executing the next line of the


script.

TE_type("QUSER");
lr_think_time(2);
TE_type("<kTab>MERCURY");
lr_think_time(3);
TE_type("<kEnter>");
TE_wait_sync();
....
Find

When a TE_wait_sync function suspends the execution of a script while an ?


X SYSTEM message is displayed, the Vuser continues to monitor the system—
waiting for the X SYSTEM message to disappear. If the X SYSTEM message
does not disappear before the synchronization timeout expires, the
TE_wait_sync function returns an error code. The default timeout is 60 seconds.

Creating Vuser Scripts Chapter 16, page 289


RTE Vuser Scripts • Synchronizing RTE Vuser Scripts

To set the TE_wait_sync synchronization timeout:


1 Select Vuser > Run-Time Options. The Run-Time Options dialog box appears.
2 Ensure that the RTE tab is visible.
In

3 Under “X SYSTEM Synchronization,” enter a value (in seconds) in the Timeout


box.
4 Click OK to close the Run-Time Options dialog box .
After a Vuser executes a TE_wait_sync function, the Vuser waits until the
terminal is no longer in the X SYSTEM mode. When the terminal returns from the
X SYSTEM mode, the Vuser continues to monitor the system for a short period to Find
ensure that the terminal is fully stable i.e that the system does not return to the X
SYSTEM mode. Only then does the TE_wait_sync function terminate and allow
the Vuser to continue executing its script. The period that the Vuser continues to
?
monitor the system, after the system has returned from the X SYSTEM mode, is
known as the stable time. The default stable time is 1000 milliseconds.
You may need to increase the stable time if your system exhibits the following
behavior:

When a system returns from the X SYSTEM mode, some systems “flickers” to and
from the X SYSTEM for a short period of time until the system stabilizes. If the
system remains out of the X SYSTEM mode for more than one second, and then
returns to the X SYSTEM mode, the TE_wait_sync function will assume that the
system is stable. If a Vuser then tries to type information to the system, the system
will shift into keyboard-locked mode. Alternatively, if your system never flickers
when it returns from the X SYSTEM mode, you can reduce the stable time to less
than the default value of one second.

Creating Vuser Scripts Chapter 16, page 290


RTE Vuser Scripts • Synchronizing RTE Vuser Scripts

To change the stable time for TE_wait_sync functions:


1 Select Vuser > Run-Time Options. The Run-Time Options dialog box appears.
2 Ensure that the RTE tab is visible.
3 Under “X SYSTEM Synchronization,” enter a value (in milliseconds) in the Stable
Time box.
4 Click OK to close the Run-Time Options dialog box.
Online
Function For more information on the TE_wait_sync function, refer to the LoadRunner Find
Reference Online Function Reference (available from the VuGen Help menu).

You can instruct VuGen to record the time that the system remains in the
?
X SYSTEM mode each time that the X SYSTEM mode is entered. To do so,
VuGen inserts a TE_wait_sync_transaction function after each TE_wait_sync
function, as shown in the following script segment:

TE_wait_sync();
TE_wait_sync_transaction("default");

Each TE_wait_sync_transaction function creates a transaction with the name


“default.” This allows you to analyze how long the terminal emulator waits for
responses from the server during a scenario run. You use the recording options to
specify whether VuGen should generate and insert TE_wait_sync_transaction
statements.

Creating Vuser Scripts Chapter 16, page 291


RTE Vuser Scripts • Synchronizing RTE Vuser Scripts

To instruct VuGen to insert TE_wait_sync_transaction statements:


1 Select Vuser > Recording Options. The Recording Options dialog box appears.
In

2 Select the “Generate Automatic X SYSTEM transactions” check box, and then
click OK.

Find

Creating Vuser Scripts Chapter 16, page 292


RTE Vuser Scripts • Synchronizing RTE Vuser Scripts

Synchronizing Character-Mode (VT) Terminals


LoadRunner has three types of synchronization that you can use for character-
mode (VT) terminals. The type of synchronization that you select depends on:

• the design of the application that is running in the terminal emulator


• the specific action to be synchronized

Find

Creating Vuser Scripts Chapter 16, page 293


RTE Vuser Scripts • Synchronizing RTE Vuser Scripts

Waiting for the Cursor to Appear at a Specific Location


The preferred method of synchronization for VT type terminals is cursor
In

synchronization. Cursor synchronization is particularly useful with full-screen or


form-type applications:, as opposed to scrolling or TTY-type applications.

Cursor synchronization uses the TE_wait_cursor function. When you run an RTE
Vuser script, the TE_wait_cursor function instructs a Vuser to suspend script
execution until the cursor appears at a specified location on the screen. The
appearance of the cursor at the specified location means that the application is
Find
ready to accept the next input from the terminal emulator.

The syntax of the TE_wait_cursor function is:


?
int TE_wait_cursor ( int col, int row, int stable, int timeout );

During script execution, the TE_wait_cursor function waits for the cursor to reach
the location specified by col, row.

The stable parameter specifies the time (in milliseconds) that the cursor must
remain at the specified location. If you record a script using VuGen, stable is set to
100 milliseconds by default. If the client application does not become stable in the
time specified by the timeout parameter, the function returns TIMEOUT. If you
record a script using the Vuser Script Generator, timeout is set by default to the
value of TIMEOUT, which is 90 seconds. You can change the value of both the
stable and timeout parameters by directly editing the recorded script.

Creating Vuser Scripts Chapter 16, page 294


RTE Vuser Scripts • Synchronizing RTE Vuser Scripts

The following statement waits for the cursor to remain stable for three seconds. If
the cursor doesn’t stabilize within 10 seconds, the function returns TIMEOUT.

TE_wait_cursor (10, 24, 3000, 10);

Online
Function For more information on the TE_wait_cursor function, refer to the LoadRunner
Reference Online Function Reference (available from the VuGen Help menu).

You can instruct VuGen to automatically generate TE_wait_cursor statements,


Find
and insert them into a script, while you record the script. The following is an
example of a TE_wait_cursor statement that was automatically generated by
VuGen:
?
TE_wait_cursor(7, 20, 100, 90);

To instruct VuGen to automatically generate TE_wait_cursor statements,


and insert them into a script while recording.
1 Select Vuser > Recording Options. The Recording Options dialog box appears.
2 Under “Generate Automatic Synchronization Commands,” select the Cursor
check box, and then click OK.

Creating Vuser Scripts Chapter 16, page 295


RTE Vuser Scripts • Synchronizing RTE Vuser Scripts

Waiting for Text to Appear on the Screen


You can use text synchronization to synchronize an RTE Vuser script running on a
In

VT terminal emulator. Text synchronization uses the TE_wait_text function. During


script execution, the TE_wait_text function suspends script execution and waits for
a specific string to appear in the terminal window before continuing with script
execution. Text synchronization is useful with those applications in which the cursor
does not consistently appear in a predefined area on the screen.

Find
Note: Although text synchronization is designed to be used with character mode
(VT) terminals, it can also be used with IBM block-mode terminals. Do not use ?
automatic text synchronization with block-mode terminals.

The syntax of the TE_wait_text function is:

int TE_wait_text ( char *pattern, int timeout, int col1, int row1, int col2, int row2,
int *retcol, int *retrow, char *match );

This function waits for text matching pattern to appear within the rectangle defined
by col1, row1, col2, row2. Text matching the pattern is returned to match, and the
actual row and column position is returned to retcol and retrow. If the pattern does
Online not appear before the timeout expires, the function returns an error code. The
Function pattern can include a regular expression. Refer to the LoadRunner Online
Reference

Creating Vuser Scripts Chapter 16, page 296


RTE Vuser Scripts • Synchronizing RTE Vuser Scripts

Function Reference for details on using regular expressions. Besides the pattern
and timeout parameters, all the other parameters are optional.

If pattern is passed as an empty string, the function will wait for timeout if it finds
any text at all within the rectangle. If there is no text, it returns immediately.

If the pattern does appear, then the function waits for the emulator to be stable
(finish redrawing, and not display any new characters) for the interval defined by
the TE_SILENT_SEC and TE_SILENT_MILLI system variables. This, in effect,
allows the terminal to become stable and emulates a human user.
Find
If the terminal does not become stable within the interval defined by
TE_SILENT_TIMEOUT, script execution continues. The function returns 0 for
?
success, but sets the TE_errno variable to indicate that the terminal was not silent
after the text appeared.

To modify or retrieve the value of any of the TE_SILENT system variables, use the
Online TE_getvar and TE_setvar functions. For more information, refer to the
Function LoadRunner Online Function Reference (available from the VuGen Help menu).
Reference

Creating Vuser Scripts Chapter 16, page 297


RTE Vuser Scripts • Synchronizing RTE Vuser Scripts

In the following example, the Vuser types in its name, and then waits for the
application to respond. In

/* Declare variables for TE_wait_text */


int ret_row;
int ret_col;
char ret_text [80];

/* Type in user name. */


TE_type ( "John" );
Find

/* Wait for teller to respond. */


TE_wait_text ( "Enter secret code:", 30, 29, 13, 1, 13, &ret_col, &ret_row, ?
ret_text );

You can instruct VuGen to automatically generate TE_wait_text statements, and


insert them into a script, while you record the script.

Creating Vuser Scripts Chapter 16, page 298


RTE Vuser Scripts • Synchronizing RTE Vuser Scripts

To instruct VuGen to automatically generate TE_wait_text statements, and


insert them into a script while recording.
1 Select Vuser > Recording Options. The Recording Options dialog box appears.
2 Under “Generate Automatic Synchronization Commands”, select the Prompt
check box, and then click OK.

The following is an example of a TE_wait_text statement that was automatically


generated by VuGen. The function waits up to 20 seconds for the string “keys” to
appear anywhere on the screen. Note that VuGen omits all the optional Find
parameters when it generates a TE_wait_text function.
?
TE_wait_text("keys", 20);

Creating Vuser Scripts Chapter 16, page 299


RTE Vuser Scripts • Synchronizing RTE Vuser Scripts

Waiting for the Terminal to be Silent


In instances when neither cursor synchronization nor text synchronization are
In

effective, you can use “silent synchronization” to synchronize the Vuser script. With
“silent synchronization,” LoadRunner waits for the terminal emulator to be silent for
a specified period of time. The emulator is considered to be silent when it does not
receive any input from the server for a specified period of time.

Note: Use silent synchronization only when neither cursor synchronization nor Find
text synchronization are effective.
?

Creating Vuser Scripts Chapter 16, page 300


RTE Vuser Scripts • Synchronizing RTE Vuser Scripts

You use the TE_wait_silent function to instruct a Vuser script to wait for the
terminal to be silent. You specify the period for which the terminal must be silent. If
the terminal is silent for the specified period, then the TE_wait_silent function
assumes that the application has stopped printing text to the terminal screen, and
that the screen has stabilized.

The syntax of the function is:

int TE_wait_silent ( int sec, int milli, int timeout );


Find
The TE_wait_silent function waits for the terminal emulator to be silent for the
time specified by sec (seconds) and milli (milliseconds). The emulator is
considered silent when it does not receive any input from the server. If the
?
emulator does not become silent (i.e. stop receiving characters) during the time
specified by the time timeout variable, then the function returns an error.

For example, the following statement waits for the screen to be stable for three
seconds. If after ten seconds, the screen has not become stable, the function
returns an error.

TE_wait_silent (3, 0, 10);


Online
Function For more information, refer to the LoadRunner Online Function Reference
Reference (available from the VuGen Help menu).

Creating Vuser Scripts Chapter 16, page 301


RTE Vuser Scripts
Reading Text from the Terminal Screen
17
Reading Text from the Terminal Screen
RTE Vusers can read text from the user interface of a terminal emulator, and then
In

perform various tasks with the text that is read.

This chapter describes:

• Searching for Text on the Screen


• Reading Text from the Screen
Find
This chapter applies to RTE (Windows) Vuser scripts only.
?

Creating Vuser Scripts Chapter 17, page 302


RTE Vuser Scripts • Reading Text from the Terminal Screen

About Reading Text from the Terminal Screen


LoadRunner provides several functions that RTE Vusers can use to read text from
the terminal screen. You can use these functions, TE_find_text and
TE_get_text_line, to check that the terminal emulator is responding correctly, or to
enhance the logic in your scripts.

After recording, you can manually insert TE_find_text and TE_get_text_line


statements directly into your RTE Vuser scripts.
Find

Creating Vuser Scripts Chapter 17, page 303


RTE Vuser Scripts • Reading Text from the Terminal Screen

Searching for Text on the Screen


In

The TE_find_text function searches for a line of text on the screen. The syntax of
the function is:

int TE_find_text ( char *pattern, int col1, int row1, int col2, int row2,
int *retcol, int *retrow, char *match );

This function searches for text matching pattern within the rectangle defined by
col1, row1, col2, row2. Text matching the pattern is returned to match, and the
Find
actual row and column position is returned to retcol and retrow. The search begins
in the top-left corner. If more than one string matches pattern, the one closest to
the top-left corner is returned.
?
Online
Function The pattern can include a regular expression. Refer to the LoadRunner Online
Reference Function Reference for details on using regular expressions.

You must manually type TE_find_text statements into your Vuser scripts. For
details on the syntax of the TE_find_text function, refer to the LoadRunner Online
Function Reference (available from the VuGen Help menu).

Creating Vuser Scripts Chapter 17, page 304


RTE Vuser Scripts • Reading Text from the Terminal Screen

Reading Text from the Screen


The TE_get_text_line function reads a line of text from the area of the screen that
you designate. The syntax of the function is:

char *TE_get_text_line ( int col, int row, int width, char *text );

This function copies a line of text from the terminal screen to a buffer text. The first
character in the line is defined by col, row. The column coordinate of the last
character in the line is indicated by width. The text from the screen is returned to
Find
the buffer text. If the line contains tabs or spaces, the equivalent number of spaces
is returned.
?
In addition, the TE_get_cursor_position function can be used to retrieve the
current position of the cursor on the terminal screen. The TE_get_line_attribute
function returns the character formatting (for instance, bold or underline) of a line
of text.

Online You must manually type TE_get_text_line statements into your Vuser scripts. For
Function details on the syntax of the TE_get_text_line function, refer to the LoadRunner
Reference Online Function Reference (available from the VuGen Help menu).

Creating Vuser Scripts Chapter 17, page 305


Part VIII

Web Vuser Scripts

Find

Creating Vuser Scripts 306


Web Vuser Scripts
Introducing Web Vuser Scripts
18
Introducing Web Vuser Scripts
You use QuickTest to develop Web Vuser scripts. QuickTest creates Vuser scripts
In

by recording your actions while you operate a web browser.

This chapter describes:

• Introducing Web Vusers


• Understanding Web Vuser Technology

Find
Getting Started with Web Vuser Scripts
• Using the Graphical Representation of a Web Vuser Script ?
• Using Text-Based Web Vuser Scripts

This chapter applies to Web Vuser scripts only.

Creating Vuser Scripts Chapter 18, page 307


Web Vuser Scripts • Introducing Web Vuser Scripts

About Developing Web Vuser Scripts


In

You use QuickTest to develop Web Vuser scripts. While you navigate through your
web site performing typical user activities, QuickTest records your actions and
generates a Vuser script. When you run the Vuser script, the resulting Vuser
emulates a user accessing the Internet.

QuickTest can display a Web Vuser script in two ways:

1 as a graphical representation of the Vuser script


Find
2 as a text-based representation of the Vuser script
While you record a script, QuickTest always displays the graphical representation ?
of the Vuser script. You use QuickTest to view and edit both the graphical view and
the text-based view of the Vuser script. You can easily switch between the two
views.

Creating Vuser Scripts Chapter 18, page 308


Web Vuser Scripts • Introducing Web Vuser Scripts

Graphical
representation of a Web
Vuser script
Find

Creating Vuser Scripts Chapter 18, page 309


Web Vuser Scripts • Introducing Web Vuser Scripts

In

Text-based representation
of a Web Vuser script

Find

Note that you can also use VuGen to view and edit the text-based representation
of a Web Vuser script.

After you create a Vuser script, you run the script in stand-alone mode—using
either QuickTest or VuGen. When the execution is successful, you are ready to
integrate the Vuser script into a LoadRunner scenario. For details on how to include
a Vuser script into a scenario, refer to your LoadRunner Controller User’s Guide.

Creating Vuser Scripts Chapter 18, page 310


Web Vuser Scripts • Introducing Web Vuser Scripts

Introducing Web Vusers


Suppose you have a web site that displays product information for your company.
The site is accessed by potential customers. You want to ensure that the response
time for any customer query is less than a specified value (say 20 seconds)—even
when a large number of users (say 200) access the site simultaneously. You use
Web Vusers to emulate this scenario in which the web server services the
numerous simultaneous requests for information. Each Web Vuser could:

• load your home page Find


• navigate to the page containing the product information
?
• submit a query
• wait for a response from the server

You can distribute several hundred Web Vusers among the available testing
machines, each Vuser accessing the web server by using the server’s API. This
enables you to measure the performance of your web server under the load of
many users.

The program that contains the calls to the server API is called a Web Vuser script.
It emulates a browser application and all of the actions performed by the browser.
Using the LoadRunner Controller, you assign the script to multiple Vusers. The
Vusers execute the script and emulate user load on the client/server system.

Creating Vuser Scripts Chapter 18, page 311


Web Vuser Scripts • Introducing Web Vuser Scripts

Understanding Web Vuser Technology


QuickTest creates Web Vuser scripts by recording the activity between a Web In

browser application and a Web server. QuickTest monitors the client (browser) end
of the system and traces all the requests sent to, and received from, the web server.

Find
Client running a web
browser application QuickTest Web Server ?

Each Web Vuser communicates directly with a web server without relying on client
software. Instead, the Web Vuser executes a script that executes calls directly to
the web server via API functions.

Web Vuser script Web Server

Creating Vuser Scripts Chapter 18, page 312


Web Vuser Scripts • Introducing Web Vuser Scripts

Getting Started with Web Vuser Scripts


This section provides an overview of the process of developing Web Vuser scripts.

To develop a Web Vuser script:


1 Record a Vuser script using QuickTest.
Start QuickTest and create a new Vuser script. Record your actions while you
navigate your web site.
For details, see Chapter 19, Recording Web Vuser Scripts. Find
2 Enhance the recorded Vuser script.
?
Enhance the Vuser script by inserting transactions, rendezvous points, and
service steps.
For details, see Chapter 19, Recording Web Vuser Scripts,, and Chapter 22,
Modifying Web Vuser Scripts.
3 Define parameters (optional).
Define parameters for the fixed-values recorded into your script. By substituting
fixed-values with parameters, you can repeat the same Vuser action many times
using different values.
For details, see Chapter 23, Parameterizing a Web Vuser Script.

Creating Vuser Scripts Chapter 18, page 313


Web Vuser Scripts • Introducing Web Vuser Scripts

4 Configure the run-time settings.


The run-time settings control the Vuser behavior while executing a Vuser script.
In

These settings include general run-time settings (iteration, log, and timing
information), and Web-related settings (performance, HTTP, timing, and proxy
details).
For details, see Chapter 6, Configuring Run-Time Settings, and Chapter 20,
Configuring Web Run-Time Settings.
5 Save and run the Vuser script using QuickTest.
Find
Run the Vuser script from QuickTest to verify that it runs correctly. For details, see
Chapter 21, Running Web Vuser Scripts. ?
After you create a Web Vuser script, you integrate it into a LoadRunner scenario.
For more information on integrating Vuser scripts in a scenario, refer to your
LoadRunner Controller User’s Guide.

Creating Vuser Scripts Chapter 18, page 314


Web Vuser Scripts • Introducing Web Vuser Scripts

Using the Graphical Representation of a Web Vuser Script


While you record a Web Vuser script, QuickTest displays the graphical
representation of the Vuser script. After recording a Web Vuser script, you use
QuickTest to view and edit the the graphical representation of the script. You can
easily display the text-based representation of the script.

To display the graphical representation of a Vuser script:


• From the QuickTest main menu, select View > Expert Mode. The Vuser script is
displayed in graphical mode. The check mark is removed from next to Expert Find
Mode on the View menu.
?
The graphical representation of a Vuser script is composed of icons. Each icon
represents an action of the Vuser. The icons are divided into three categories:
actions, controls, and services.

Creating Vuser Scripts Chapter 18, page 315


Web Vuser Scripts • Introducing Web Vuser Scripts

Action Icons
Each action icon in the Vuser script represents a jump to a new web page i,e, a
In

change in the web context. QuickTest adds an action icon to the Vuser script while
recording—when you click a hypertext or hypergraphic link, or you submit a form.
When you run a Vuser script, each action icon displays a new web page or frame
in the browser.

Segment of a QuickTest Vuser script Find


showing the five types of Action icons
?

QuickTest uses five different action icons, each one representing a different user-
action during recording and playback

Creating Vuser Scripts Chapter 18, page 316


: Web Vuser Scripts • Introducing Web Vuser Scripts

Icon Type Description

A URL icon is always the first icon in a Vuser script. QuickTest also
URL
inserts a URL icon when you use a bookmark to access a specific
web page, or type in a URL. Each URL icon represents a web_url
function in the Vuser script. The default label of a URL icon is the last
part of the URL of the target page.

Link A Link icon is added to the Vuser script when you click a hypertext link
while recording. Each link icon represents a web_link function in the
Vuser script. The default label of the icon is the text string of the
hypertext link.

An Image icon is added to the Vuser script when you click a Find
hypergraphic link while recording. Each image icon represents a
Image
web_image function in the Vuser script. If the image in the HTML
code has an ALT attribute, then this attribute is used as the default
?
label of the icon. If the image in the HTML code does not have an ALT
attribute, then the last part of the SRC attribute is used as the icon’s
label.

Form/Data A Form Submission or Data Submission icon is added to the Vuser


Submission script when you submit a form while recording. Each icon represents
either a web_submit_form function or a web_submit_data function
in the Vuser script.

QuickTest adds a Custom Request icon to a Vuser script when you


Custom record an action that QuickTest can not recognize as any of the
Request standard actions (i.e. URL, link, image, or form submission). For
example, if you record a form submission that includes an attached
file, QuickTest represents the form submission with a Custom Request
icon. Each custom request icon represents a web_custom_request
function in the Vuser script.

Creating Vuser Scripts Chapter 18, page 317


Web Vuser Scripts • Introducing Web Vuser Scripts

Control Icons
Each control icon in the Vuser script represents a control used during load testing.
In

Controls include transactions and rendezvous points. You can add control icons
either while recording, or after recording. QuickTest uses three control icons:

Icon Type Description

Start Transaction A Start Transaction icon is added when you click the Start
Transaction button while recording. Each Start Transaction icon
represents an lr_start_transaction function in the Vuser script.
Find
End Transaction An End Transaction icon is added when you click the End
Transaction button while recording. Each End Transaction icon ?
represents an lr_end_transaction function in the Vuser script.

Rendezvous A Rendezvous icon is added when you click the Rendezvous


button while recording. Each Rendezvous icon represents an
lr_rendezvous function in the Vuser script.

Creating Vuser Scripts Chapter 18, page 318


Web Vuser Scripts • Introducing Web Vuser Scripts

Service Icons
A Service icon represents a step that does not make any changes in the web
application context. Rather, service steps perform customization tasks such as
setting proxies, submitting authorization information, and issuing customized
headers. Service steps in a Vuser script override any run-time settings that are set
for the script. For details on the run-time settings, see Chapter 20, Configuring
Web Run-Time Settings.

You can insert service steps into a Vuser script after recording. All service steps
Find
are represented by the service icon. Each service icon represents a service
function. QuickTest records only a subset of the service functions. You can either
manually program them into a script, or use the function generator inside QuickTest
?
to generate the functions and insert them into the script. For a list of service
functions, see Service Functions on page 324.

Creating Vuser Scripts Chapter 18, page 319


Web Vuser Scripts • Introducing Web Vuser Scripts

Using Text-Based Web Vuser Scripts


In

After you record a browser session, QuickTest displays the recorded Vuser script
in graphical mode. In place of the graphical Vuser script, you can view a text-
based version of the Vuser script.

To display the text-based representation of the Vuser script:


• From the QuickTest main menu, select View > Expert Mode. The Vuser script is
displayed in text-based mode. A check mark is displayed next to Expert Mode on
the View menu. Find

You can use QuickTest to view and edit the text-based Vuser script. You can scroll ?
through the script and see the web statements that were generated by your
browser application, and you can make changes to the script as required.

Note: If you make changes to a text-based Vuser script, QuickTest makes the
corresponding changes to the graphical view of the Vuser script. In certain
circumstances, QuickTest may be unable to update the graphical view of the Vuser
script with the changes that you make to the text-based script. In such
circumstances, QuickTest displays a warning.

Creating Vuser Scripts Chapter 18, page 320


Web Vuser Scripts • Introducing Web Vuser Scripts

A Web Vuser script is composed of Vuser functions that emulate communication


between a web browser and a web server. These functions are called WEB Vuser
functions. Each WEB Vuser function has a web prefix. Some WEB functions are
Online generated when you record a script; others you must manually insert into the script.
Function For detailed information on the WEB functions, refer to the LoadRunner Online
Reference Function Reference (available from the QuickTest Help menu.

Note: To quickly access information about a specific function in your Vuser script,
Find
place the mouse cursor inside the function and press F1.
?

Creating Vuser Scripts Chapter 18, page 321


Web Vuser Scripts • Introducing Web Vuser Scripts

The following WEB Vuser functions are used in Web Vuser scripts:


In

Action Functions
• Control Functions
• Service Functions

Action Functions
When you record a Web Vuser script, QuickTest generates the following action
functions, and inserts them into the script: Find

web_custom_request Allows you to create a custom HTTP request with ?


any method supported by HTTP.
web_image Emulates a mouse click on the defined image.
web_link Emulates a mouse click on the defined text link.
web_submit_data Performs an "unconditional" or "contextless" form
submission.
web_submit_form Emulates the submission of a form.
web_url Loads the URL specified by the "URL" attribute.

Creating Vuser Scripts Chapter 18, page 322


Web Vuser Scripts • Introducing Web Vuser Scripts

Control Functions
Each control icon in the Vuser script represents a control function used during load
testing. Controls include transactions and rendezvous points. QuickTest uses three
control functions:

lr_start_transaction Marks the beginning of a transaction for performance


analysis.
lr_end_transaction Marks the end of a transaction for performance analysis.
lr_rendezvous Sets a rendezvous point in the Vuser program. Find

Creating Vuser Scripts Chapter 18, page 323


Web Vuser Scripts • Introducing Web Vuser Scripts

Service Functions
In addition to the step functions and control functions, the following service functions can be used
In

in Web Vuser scripts. You can manually program them into the script, or you can use the function
generator inside QuickTest to generate the functions.

Header Functions
web_add_header Adds a customized header to the next HTTP request.
web_add_auto_header Adds a customized header to all subsequent HTTP requests.
web_cleanup_auto_headers Stops adding customized headers to subsequent HTTP requests.
Find

Proxy Server Functions


?
web_set_proxy Specifies that all subsequent HTTP requests be directed to the
specified proxy server.
web_set_secure_proxy Specifies that all subsequent HTTPS requests be directed to the
specified proxy server.
web_set_proxy_bypass Specifies that all subsequent HTTP requests bypass the proxy
server.

Creating Vuser Scripts Chapter 18, page 324


Web Vuser Scripts • Introducing Web Vuser Scripts

Authentication Function
web_set_user Specifies a login string and password for a web server or proxy
server.

Connection Definition Functions


web_set_connections_limit Sets the maximum number of simultaneous connections that a
Vuser can open during script execution.
web_enable_keep_alive Enables keep alive HTTP connections.
web_disable_keep_alive Disables keep alive HTTP connections. Find

Timeout Function ?
web_set_timeout Specifies the maximum amount of time that a Vuser waits to
execute a specified task.

Cookie Functions
web_remove_cookie Removes the specified cookie.
web_add_cookie Adds a new cookie or modifies an existing one.
web_cleanup_cookies Removes all the cookies that are currently stored by the Vuser.

Correlation Functions
web_create_html_param Saves dynamic information generated during script replay to a
parameter. Used for correlating HTML statements.
web_set_max_html_param_length Sets the maximum length of retrieved dynamic
HTML information.

Creating Vuser Scripts Chapter 18, page 325


Web Vuser Scripts
Recording Web Vuser Scripts
19
Recording Web Vuser Scripts
You use QuickTest to create Web Vuser scripts by recording a web browser
In

session.

This chapter describes:

• Recording a Browser Session


• Inserting Transactions

Find
Inserting Rendezvous Points

This chapter applies to Web Vuser scripts only.


?

Creating Vuser Scripts Chapter 19, page 326


Web Vuser Scripts • Recording Web Vuser Scripts

About Recording Web Vuser Scripts


QuickTest enables you to generate Web Vuser scripts by recording the typical
processes that users perform on your web site. When you run a Web Vuser script,
the resulting Vuser emulates activity between a browser application and your web
server.

While recording a Vuser script, QuickTest displays a graphical representation of the


recorded Vuser script. After recording, you can edit the Vuser script—either by
making changes directly in the graphical representation, or by modifying the script Find
itself using the expert mode. For more information on the QuickTest viewing modes,
see Chapter 18, Introducing Web Vuser Scripts. ?
To record a Vuser script, you can use either your default browser or you can specify
any another browser that is installed on your computer. To change the browser
used during recording, in QuickTest, select Tools > Options and then click the
Browser tab.

Creating Vuser Scripts Chapter 19, page 327


Web Vuser Scripts • Recording Web Vuser Scripts

Recording a Browser Session


QuickTest records all the actions that you perform in your web browser. Your
In

activities can include hyperlink jumps (both hypertext and hypergraphic) and form
submissions. QuickTest saves the recorded actions in a Web Vuser script.

Note: QuickTest cannot record into an existing Vuser script. For details on how to
add a step to a Vuser script after recording, see Chapter 22, Modifying Web
Vuser Scripts.
Find

To record a browser session: ?


1 Choose QuickTest from the LoadRunner program group. The QuickTest main
window opens.
2 Click the Start Recording button. The Start Test Recording dialog box opens.

Creating Vuser Scripts Chapter 19, page 328


Web Vuser Scripts • Recording Web Vuser Scripts

3 Type the web location (URL) from which you want to start recording the script, and
then click OK.
A web browser opens, displaying the web page that you specified in step 3. A URL
icon representing the starting web location appears as the first entry in the Vuser
script.

Find

Note: To change the browser that QuickTest uses to record a script, select
?
Tools > Options. From the Browser tab, select the required browser.

4 Navigate through your web site by clicking hypertext and hypergraphic links, and
submitting forms. Each link that you click adds another Action icon to the Vuser
script. Each form you submit adds another form submission icon to the Vuser
script.
5 While recording, use the QuickTest toolbar to insert transactions and rendezvous
points. For details, see Inserting Transactions and Inserting Rendezvous
Points below.
After performing all the required user processes, stop recording.

Creating Vuser Scripts Chapter 19, page 329


Web Vuser Scripts • Recording Web Vuser Scripts

6 Click the Stop Recording button on the QuickTest toolbar. The browser closes.
In

Find

7 Choose File > Save As, or click the Save button to save the Vuser script. Specify a
file name and location in the Save As dialog box, and then click OK.
After recording, you can edit the Vuser script. You can use either the graphical
view or the text-based view of the Vuser script. For details on the two modes, see
Chapter 18, Introducing Web Vuser Scripts.

Creating Vuser Scripts Chapter 19, page 330


Web Vuser Scripts • Recording Web Vuser Scripts

Inserting Transactions
You insert transactions into a Vuser script to enabe LoadRunner to measure the
performance of the server under various load conditions. Each transaction
measures the time that it takes for the server to respond to tasks submitted by
Vusers. You can create transactions to measure simple tasks, such as accessing a
URL, or complex processes, such as submitting several queries and waiting for a
response.

To define a transaction, you insert a Start Transaction and End Transaction icon into Find
the Vuser script. Within a Vuser script, you can mark an unlimited number of
transactions—each with a different name, and starting and ending in different ?
places. You insert LoadRunner transaction statements into your script either during
or after the recording session.

You can instruct the LoadRunner Controller to handle every step in a Web Vuser
script as a transaction. This is called using automatic transactions. The steps that
the Controller includes in transactions are URLs, hypertext links, hypergraphic
links, and form submissions. LoadRunner assigns the step name as the name of
the transaction. By default automatic transactions are enabled. For details on
automatic transactions, see Chapter 20, Configuring Web Run-Time Settings.

During a scenario execution, the LoadRunner Controller measures the time that it
takes to perform each transaction. After a scenario run, you use LoadRunner’s
graphs and reports to analyze the server’s performance.

Creating Vuser Scripts Chapter 19, page 331


Web Vuser Scripts • Recording Web Vuser Scripts

To mark the start of a LoadRunner transaction while recording:


1 Click the Start Transaction button on the QuickTest toolbar. The Start Transaction In

dialog box opens.

2 Type a transaction name in the Name box. Find

3 Click OK to accept the transaction name. QuickTest inserts a Start Transaction


icon into the Vuser script.
?

Creating Vuser Scripts Chapter 19, page 332


Web Vuser Scripts • Recording Web Vuser Scripts

To mark the end of a transaction while recording:


1 Click the End Transaction button on the QuickTest toolbar. The End Transaction
dialog box opens.

Find
2 Click the arrow to display a list of open transactions. Select the transaction to
close.
?
3 Click OK to accept the transaction name. QuickTest inserts an End Transaction
icon into the Vuser script.
Note that you can insert a transaction into your script after you complete the
recording session. To do so, right-click the mouse and then select Insert
Transaction. For details, see Chapter 22, Modifying Web Vuser Scripts.

Creating Vuser Scripts Chapter 19, page 333


Web Vuser Scripts • Recording Web Vuser Scripts

Inserting Rendezvous Points


In

In order to emulate a specific user load while measuring server performance, you
synchronize Vusers to perform a task at exactly the same moment. You ensure that
multiple Vusers act simultaneously by creating a meeting place, known as a
rendezvous point. When a Vuser arrives at the rendezvous point, it is held by the
LoadRunner Controller until all the Vusers participating in the rendezvous arrive.
When the rendezvous conditions are met, the Vusers are released by the
Controller.
Find
You designate the meeting place by inserting a Rendezvous icon into your Vuser
script. When a Vuser executes a Vuser script and encounters the Rendezvous icon, ?
execution is paused and the Vuser waits for permission from the Controller to
continue. After the Vuser is released from the rendezvous, it performs the next task
in the Vuser script.

Creating Vuser Scripts Chapter 19, page 334


Web Vuser Scripts • Recording Web Vuser Scripts

To insert a rendezvous point while recording:


1 Click the Rendezvous button on the QuickTest toolbar. The Insert Rendezvous
dialog box opens.

Find
2 Type a rendezvous name in the Name box.
3 Click OK to accept the rendezvous name. QuickTest inserts a rendezvous icon ?
into the Vuser script.
Note that you can insert a rendezvous point into your script after you complete the
recording session by right-clicking the mouse and then selecting Insert
Rendezvous. For details, see Chapter 22, Modifying Web Vuser Scripts.

Creating Vuser Scripts Chapter 19, page 335


Web Vuser Scripts
Configuring Web Run-Time Settings
20
Configuring Web Run-Time Settings
After creating a Web Vuser script, you set the run-time settings. The run-time
In

settings determine how the script will behave when you run it.

This chapter describes the following web-related run-time settings:

• Performance Settings
• HTTP Settings

Find
Timing Settings
• Server Settings ?
This chapter applies to Web Vuser scripts only.

Creating Vuser Scripts Chapter 20, page 336


Web Vuser Scripts • Configuring Web Run-Time Settings

About Configuring Web Run-Time Settings


After developing a Web Vuser script, you set the run-time settings. The run-time
settings define how the Vuser script behaves when you execute it. The run-time
settings are divided into general settings and web-related settings. This chapter
describes the web-related settings only. For details on the general run-time
settings (iteration, log, and think time), see Chapter 6, Configuring Run-Time
Settings.

You set the web-related run-time settings from the Run-Time Settings dialog box. Find
You can access the Run-Time Settings dialog box from QuickTest, the Controller,
and fromVuGen. ?
To display the Run-Time Settings dialog box:

Using QuickTest:
• Select File > Run-Time Settings, or click the Run-Time Settings button on the
toolbar.

Using VuGen:
• Click the Settings button from the main VuGen window. Note that the Web-related
run-time settings tabs are enabled only for Web Vuser scripts.

Using the Controller:


• Display the Scripts window, and then select Scripts > Run-Time Settings from the
Controller main menu. Note that the web-related run-time settings tabs are
enabled only for Web Vuser scripts.

Creating Vuser Scripts Chapter 20, page 337


Web Vuser Scripts • Configuring Web Run-Time Settings

The Run-Time Settings dialog box has four tabs that contain the Web-related run-
time settings: In

Performance Determine certain performance related settings such as


the speed of the modem to emulate, and whether to use
keep-alive conections.
HTTP Define the HTTP version and the HTTP client identification
to use.
Timing Allow you to specify automatic transactions, and to set
Find
various timeouts.
Proxy Allow you to set the proxy settings for the Vuser. ?
The following sections describe the web-related run-time settings.

Note: A Run-time seting that is set by using Vuser functions over rides the
corresponding setting set via the Run-Time Settings dialog box.

Creating Vuser Scripts Chapter 20, page 338


Web Vuser Scripts • Configuring Web Run-Time Settings

Performance Settings
You use the Performance tab in the Run-Time Settings dialog box to set the
performance-related settings:

Find

Creating Vuser Scripts Chapter 20, page 339


Web Vuser Scripts • Configuring Web Run-Time Settings

Modem Speed
You can specify that each web Vuser emulates a user accessing the web using a
In

modem of a specific speed. You can select any of the available speed options, or
you can enter any speed that you require. If you choose not to emulate a modem
speed, all web Vusers access the web using the maximum speed that the system
allows. By default, the modem speed is unlimited.

Connections
Find
Keep-alive The Keep-Alive extension to HTTP, as defined by the
HTTP/1.1 draft, allows persistent connections. These long-
lived HTTP sessions allow multiple requests to be sent
?
over the same TCP connection. The keep-alive option
works only with web servers that support keep-alive
connections.
You can specify that all Vusers that run the Vuser script
have keep-alive HTTP connections enabled. By default,
keep-alive is enabled.
Simultaneous You can set the maximum number of simultaneous
connections that a Vuser can open during script execution.
Multiple connections are opened when loading page
resources, or loading the frames in the frameset page, etc.
The default limit for any Vuser is 4 simultaneous
connections.

Creating Vuser Scripts Chapter 20, page 340


Web Vuser Scripts • Configuring Web Run-Time Settings

Loading
Loading images When you record a Web Vuser script, QuickTest does not
record any information about the graphics associated with
the web pages that you visit. However, you can instruct a
Vuser to load the graphics associated with a web page
when the Vuser accesses the page during script execution.
By default, Vusers do not load the graphics on web pages.
Cache A cache is used to keep local copies of frequently
accessed documents and thereby reduce the time that the Find
Vuser is connected to the network. You can specify that
when a Vuser runs, it simulates a browser with a specific ?
cache size. If you select not to simulate a cache, all Vusers
emulate a browser with no cache available.

Note: Unlike a regular browser cache, the cache assigned to a Vuser simulates
storage of graphic files only. The cache does not store text or other page contents
associated with the web page.

Creating Vuser Scripts Chapter 20, page 341


Web Vuser Scripts • Configuring Web Run-Time Settings

HTTP Settings
In

You use the HTTP tab in the Run-Time Settings dialog box to set the HTTP- related
settings:

Find

Creating Vuser Scripts Chapter 20, page 342


Web Vuser Scripts • Configuring Web Run-Time Settings

HTTP Client Identification


Whenever a Vuser sends a request to a web server, the request always includes
an HTTP header. The first line of text contains a verb (usually "GET" or "POST"),
the resource name (for example "pclt/default.htm"), and the version of the protocol
(for example "HTTP/1.0"). Subsequent lines contain "header information" in the
form of an attribute name, a colon, and some value. The request ends with a blank
line.

All web Vuser headers include a "user-agent" header that identifies the type of
Find
browser that is being emulated. For example,

User-Agent: Mozilla/3.01Gold (WinNT; I) ?


identifies the Browser as Netscape Navigator 3.01 running under Windows NT on
an Intel machine.

You can specify that a Web Vuser emulate any of the standard browsers.
Alternatively, you can specify that each Vuser emulates an HTTP client that is not
in the list of supported browsers. In this case, you must supply a custom user-agent
string that is included in all subsequent HTTP headers.

Creating Vuser Scripts Chapter 20, page 343


Web Vuser Scripts • Configuring Web Run-Time Settings

Timing Settings
In

You use the Timing tab in the Run-Time Settings dialog box to set the timing-related
web settings:

Find

Creating Vuser Scripts Chapter 20, page 344


Web Vuser Scripts • Configuring Web Run-Time Settings

Automatic Transactions
You can instruct the LoadRunner Controller to handle every step in a Web Vuser
script as a transaction. This is called using automatic transactions. The steps that
the Controller includes in transactions are jumps to URLs, hypertext links,
hypergraphic links, and form submissions. LoadRunner assigns the step name as
the name of the transaction. By default, automatic transactions is enabled.

If you disable automatic transactions, you can still insert transactions manually
during and after recording. For more information on manually inserting
Find
transactions, see Chapter 19, Recording Web Vuser Scripts.
?
Automatic Think Time
When you record a Web Vuser script, QuickTest does not record the time that you
wait between successive actions. This time is known as your think time. However,
you can use the run-time settings to insert a think time between actions when you
run the Vuser script. By default, Vusers do not use automatic think times.

To insert think times into your script, select the Enable Automatic Think Time check
box. Then specify the maximum and minimum values for the Vuser think time (in
milliseconds). When you run the Vuser script, LoadRunner randomly assigns a
think time within the specified range—between successive actions.

Creating Vuser Scripts Chapter 20, page 345


Web Vuser Scripts • Configuring Web Run-Time Settings

Timeouts
You can set three timeout options:Resolve timeout, Connect timeout, and Receive
In

timeout

The Resolve timeout option sets the maximum amount of time that a Vuser waits to
resolve the host name into the equivalent IP address when connecting to a server. The
default timeout is 120 seconds.

The Connect timeout option sets the maximum amount of time that a Vuser waits to
connect to a server—after resolving the IP address. The default timeout is 120 seconds.
Find
The Receive timeout option specifies the maximum amount of time that a Web Vuser
waits between successive transfers of data—after a connection has been made. ?
If the data transfer time reaches the timeout value, the Vuser skips that request.
The default timeout is 120 seconds.

For example, suppose you are working with a browser and a message indicates
that contact was made with the host and that 30% of a 13K document has being
transmitted. If your browser was to freeze at that moment, you would probably terminate
the transfer after several minutes.

You emulate the action of terminating the transfer by setting a server timeout value.
During script execution, the Vuser contacts the server and a data transfer begins. After
receiving each packet of data, LoadRunner begins timing while it waits for the next
transfer of data. If the data transfer time reaches the timeout value, the Vuser skips that
request.

Creating Vuser Scripts Chapter 20, page 346


Web Vuser Scripts • Configuring Web Run-Time Settings

Server Settings
You use the Proxy tab in the Run-Time Settings dialog box to set the proxy-related
settings:

Find

Creating Vuser Scripts Chapter 20, page 347


Web Vuser Scripts • Configuring Web Run-Time Settings

You can choose any one of the following three proxy server run-time options:


In

All Vusers use the proxy settings from the default browser on the machine on
which they are running.
• All Vusers always use direct connections to the internet. This means that
connection is made without using a proxy server.
• All Vusers use a specified proxy server. You supply the details of the server. You
can specify one proxy server for all HTTP sites, and another proxy server for all
HTTPS (secure) sites. In addition, you can specify that Vusers do not use the
Find
proxy server when they access local (intranet) addresses. If there are any URLs
that you want Vusers to access directly i.e. without using the proxy server, click
Exceptions and then supply the list of these URLs.
?
If the proxy server requires authentication by each Vuser, click Authentication, and
then supply the relevant password and user name.

Note: By default, the Vuser proxy settings for any script are the settings from the
default browser on the machine on which the script was recorded.

Creating Vuser Scripts Chapter 20, page 348


Web Vuser Scripts
Running Web Vuser Scripts
21
Running Web Vuser Scripts
After creating a Web Vuser script and setting its run-time settings, you are ready to
In

run the script.

This chapter describes:

• Running a Web Vuser Script Using QuickTest


• Displaying a Run-Time Browser during Script Execution
Find
This chapter applies to Web Vuser scripts only.
?

Creating Vuser Scripts Chapter 21, page 349


Web Vuser Scripts • Running Web Vuser Scripts

About Running Web Vuser Scripts


In

When you run a Web Vuser script, the resulting Vuser navigates through your web
site, performing the user processes that you recorded. LoadRunner provides three
tools to run your Web Vusers: QuickTest, VuGen, and the LoadRunner Controller.

Both QuickTest and VuGen allow you to run a Web Vuser script in stand-alone
mode. Use stand-alone mode to check that a script functions correctly—before
incorporating the script into a LoadRunner scenario. This chapter describes how to
use QuickTest to run Web Vuser scripts. For details on using VuGen to run a Web Find
Vuser script, see Chapter 7, Running Vuser Scripts in Stand-Alone Mode.

In order to perform load testing with a Web Vuser script, you use the LoadRunner
?
Controller to incorporate the script into a LoadRunner scenario. The scenario
defines the events that occur during each web testing session—such as the
number of users to emulate, the scripts that the Vusers run, and the host machines
on which the Vusers run. Once you have integrated a Web Vuser script into a
scenario, you use the LoadRunner Controller to run the script. For details on
running Web Vuser scripts from the Controller, refer to your LoadRunner
Controller User’s Guide.

Before you run a Web Vuser script, you set the run-time settings. For details on the
general settings, see Chapter 6, Configuring Run-Time Settings. For details on
the web-specific settings, see Chapter 20, Configuring Web Run-Time Settings.

Creating Vuser Scripts Chapter 21, page 350


Web Vuser Scripts • Running Web Vuser Scripts

Running a Web Vuser Script Using QuickTest


In order to perform load testing with a Web Vuser script, you need to incorporate
the script into a LoadRunner scenario. Before integrating the script into a scenario,
you should check its functionality by running the script in stand-alone mode.

stand-alone mode Running a script in stand-alone mode means running the


script without using a LoadRunner Controller. This is done
to establish how the script will execute when run as part of
a scenario. You use QuickTest to run a script in stand-alone
Find
mode.
If the stand-alone execution is successful, then incorporate the script into a ?
scenario. For more information on LoadRunner scenarios, refer to your
LoadRunner Controller User’s Guide.

When you run a Web Vuser script using QuickTest, QuickTest navigates through
your web site, performing the user processes that you recorded.

Creating Vuser Scripts Chapter 21, page 351


Web Vuser Scripts • Running Web Vuser Scripts

To run a Web Vuser script using QuickTest:


1 From the QuickTest main window, choose File > Open, or click the Open Test
In

button.
2 Select a Vuser script in the Open dialog box and click Open. The Vuser script
opens in QuickTest.
3 Choose File > Run, or click the Run button on the QuickTest toolbar. QuickTest
begins executing the script.
QuickTest always runs a Vuser script from the first icon in the graphical
representation of the script, and from the first line of the text-based version. As Find
each step in the script is processed, QuickTest highlights the step.

If the Output window is not displayed, QuickTest opens the window at the bottom
?
of the QuickTest main window. The Output window displays messages that
describe the actions of the Vuser.

To hide the Output window, select View > Output. QuickTest closes the Output
window and removes the check mark from next to the Output option on the View
menu.

To interrupt a Vuser script that is running, click the Stop button on the QuickTest
toolbar.

Creating Vuser Scripts Chapter 21, page 352


Web Vuser Scripts • Running Web Vuser Scripts

Note: If your Vuser script is parameterized using data-table parmeterization, you


can choose to run only certain data sets. To do so, open the data table (View >
Data Table) and select the rows that you want to run. The Vuser will execute the
Vuser script once for each row that you select. For example, if you select eight
rows, the Vuser will perform eight iterations of the Vuser script. For more details on
parameterization, see Chapter 23, Parameterizing a Web Vuser Script.

Find

Creating Vuser Scripts Chapter 21, page 353


Web Vuser Scripts • Running Web Vuser Scripts

Displaying a Run-Time Browser during Script Execution


When you use QuickTest to run a Web Vuser script, you can open a run-time In

browser that shows each web page as it is accessed by the Vuser. This is useful
for debugging scripts and for viewing Vuser actions during a scenario run. You can
display a run-time browser only if you have enabled functional mode.

Note: To display a run-time browser during script execution, you must have
Microsoft Internet Explorer 3.0 or higher installed.
Find

To use the QuickTest user interface to enable a run-time browser:


?
1 Choose Tools > Options from the QuickTest menu. The Options dialog box opens.

2 Click the Misc tab.


3 Select the Show Run-Time Browser check box.

Creating Vuser Scripts Chapter 21, page 354


Web Vuser Scripts
Modifying Web Vuser Scripts
22
Modifying Web Vuser Scripts
After recording a Web Vuser script, you can use QuickTest to modify the recorded
In

script. You can add new steps, and edit, rename, and delete existing steps.

This chapter describes:

• Modifying Step Properties


• Adding a Step to a Vuser Script

Find
Renaming a Step in a Vuser Script
• Deleting a Step from a Vuser Script ?
This chapter applies to creating Web Vuser scripts only.

Creating Vuser Scripts Chapter 22, page 355


Web Vuser Scripts • Modifying Web Vuser Scripts

About Modifying a Web Vuser Script


In

After recording a Web Vuser script, you can modify the recorded script. You can edit
the properties of any step in the Vuser script, and you can add steps to, and delete
steps from, the Vuser script.

You can do the modifications either in the graphical representation of the script, or
the text-based version. For details on the two display modes, see Chapter 18,
Introducing Web Vuser Scripts. This chapter describes how to use QuickTest to
modify only the graphical representation of the script. For information about Find
modifying a text-based Web Vuser script, see the LoadRunner Online Function
Reference. ?

Creating Vuser Scripts Chapter 22, page 356


Web Vuser Scripts • Modifying Web Vuser Scripts

Modifying Step Properties


You can modify the properties of any step in the graphical Vuser script. This section
describes the following:

• Modifying a URL Step


• Modifying a Hypertext Link Step
• Modifying a Hypergraphic Link Step
• Modifying a Form Submission Step Find
• Modifying a Custom Request Step
?
• Modifying a Submit Data Step
• Modifying a Service Step

Creating Vuser Scripts Chapter 22, page 357


Web Vuser Scripts • Modifying Web Vuser Scripts

Modifying a URL Step


You can modify the properties of a URL step in the graphical representation of a
In

Vuser script. The properties that you can modify are the name of the step, and the
address of the URL.

To modify the properties of a URL step:


1 In the graphical Vuser script, select the icon for the URL step that you want to edit.
2 Click the Parameters button on the QuickTest toolbar. The URL Step Properties
dialog box opens. Find

Creating Vuser Scripts Chapter 22, page 358


Web Vuser Scripts • Modifying Web Vuser Scripts

3 In the Step Name box, type a name for the URL step. The default name during
recording is the last part of the URL.
4 In the URL box, type the address (URL) of the web page that is accessed by the
URL step. An ABC icon indicates that the URL has not been assigned a
parameter. To assign a parameter, see Chapter 23, Parameterizing a Web Vuser
Script.
5 In the Target Frame box, select one of the following values:

Target Frame: Find

_BLANK: Opens a new window.


_PARENT: Replaces the parent of the last (changed) frame.
?
_SELF: Replaces the last (changed) frame.
_TOP: Replaces the whole page.

6 Click OK to close the URL Step Properties dialog box.

Creating Vuser Scripts Chapter 22, page 359


Web Vuser Scripts • Modifying Web Vuser Scripts

Modifying a Hypertext Link Step


You can modify the properties of a hypertext link step in the graphical
In

representation of a Vuser script. The properties that you can modify are the name
of the step, and the text of the hypertext link.

To modify the properties of a hypertext link step:


1 In the graphical Vuser script, select the icon for the hypertext link step that you
want to edit.
2 Click the Parameters button on the QuickTest toolbar. The Link Step Properties Find
dialog box opens. Ensure that the General tab is visible.
?

3 In the Step Name box, type a name for the hypertext link step. The default name
during recording is the text string of the hypertext link.

Creating Vuser Scripts Chapter 22, page 360


Web Vuser Scripts • Modifying Web Vuser Scripts

4 The Active properties table displays the property or properties that identify the
link.
Clear the “View all the available properties” check box to view active and non
active properties. To enable a property, click the cell to the left of the property
name. Edit the property by typing in the Value column:

Link Property:

Text: The exact string of the hypertext link.


Find
Frame: The name of the frame where the link is located.
Target: The target frame: ?
_TOP: Replaces the whole page.
_BLANK: Opens a new window.
_PARENT: Replaces the parent of the last (changed) frame.
_SELF: Replaces the last (changed) frame.
Ordinal: A number which uniquely identifies the link when all other attributes are
identical to one or more other links on the web page. See the LoadRunner Online
Function Reference for details.

An ABC icon indicates that the URL has not been assigned a parameter. To
assign a parameter, see Chapter 23, Parameterizing a Web Vuser Script.
5 Click OK to close the Link Step Properties dialog box.

Creating Vuser Scripts Chapter 22, page 361


Web Vuser Scripts • Modifying Web Vuser Scripts

Modifying a Hypergraphic Link Step


You can modify the properties of a hypergraphic link step in the graphical
In

representation of a Vuser script. The properties that you can modify are the name
of the step, and how the hypergraphic link is identified.

To modify the properties of a hypergraphic link step:


1 In the graphical Vuser script, select the icon for the hypergraphic link step that you
want to edit.
2 Click the Parameters button on the QuickTest toolbar. The Image Step Properties Find
dialog box opens. Ensure that the General tab is visible.
?

3 The Active properties box displays the property or properties that identify the link.
Clear the “View all the available properties” check box to view active and non
active properties. To enable a property, click the cell to the left of the property
name. Edit the property by typing in the Value column:

Creating Vuser Scripts Chapter 22, page 362


Web Vuser Scripts • Modifying Web Vuser Scripts

Image Property:

ALT: The ALT attribute of the image.


SRC: The SRC attribute of the image.
Map Name: The name of the map related to the image. Applies to client-side image
maps only.

Area Alt: The ALT attribute of the area to click. Applies to client-side image maps
only.

Area Ordinal: The serial number of the area to click. Applies to client-side image
maps only. Find

Frame: The name of the frame where the image is located. ?


Target: The target frame:
_TOP: Replaces the whole page.
_BLANK: Opens a new window.
_PARENT: Replaces the parent of the last (changed) frame.
_SELF: Replaces the last (changed) frame.
Ordinal: A number which uniquely identifies the image when all other attributes are
identical to one or more other images on the web page. See the LoadRunner
Online Function Reference for details.

An ABC icon indicates that a link property value has not been assigned a
parameter. To assign a parameter, see Chapter 23, Parameterizing a Web Vuser
Script.
4 Click OK to close the Image Step Properties dialog box.

Creating Vuser Scripts Chapter 22, page 363


Web Vuser Scripts • Modifying Web Vuser Scripts

Modifying a Form Submission Step


You can modify the properties of a form submission step in the graphical
In

representation of a Vuser script. The properties that you can modify are the name
of the step, and how the form submission is identified.

To modify the properties of a form submission step:


1 In the graphical Vuser script, select the icon for the form submission step that you
want to edit.
2 Click the Parameters button on the QuickTest toolbar. The Submit Form Step Find
Properties dialog box opens. Ensure that the Data tab is visible.
?

Creating Vuser Scripts Chapter 22, page 364


Web Vuser Scripts • Modifying Web Vuser Scripts

• The Name column lists all the data arguments on the form.
• The Value column displays the corresponding value input for a data argument.
• The Type column contains an icon. Initially, all values are constants or non-
parameterized values and have an ABC icon. If you assign a parameter to the
data value, as described in Chapter 23, Parameterizing a Web Vuser Script,
the ABC icon changes to a table icon.

3 To add a new data argument to the form submission, click the Add button. The
Add Argument dialog box opens.
Type a Name and Value for the data argument. Click OK.
Find
4 To delete an argument, click the Delete button and click Yes to the warning
message. ?
5 To change the name of the submit form step, click the General tab.

Creating Vuser Scripts Chapter 22, page 365


Web Vuser Scripts • Modifying Web Vuser Scripts

6 In the Step name box, type a name for the submit form step. The default name
during recording is the name of the executable program used to process the form.
In

7 The Active properties box displays the property or properties that identify the form
submission.
Clear the View all the available properties check box to view active and non active
properties. To enable a property, click the cell to the left of the property name. Edit
the property by typing in the Value column:

Submit Form Property:


Find
Action: The address to be used to carry out the action of the form.
Frame: The name of the frame where the form submission is located. ?
Target: The target frame:
_TOP: Replaces the whole page.
_BLANK: Opens a new window.
_PARENT: Replaces the parent of the last (changed) frame.
_SELF: Replaces the last (changed) frame.
Ordinal: A number which uniquely identifies the form when all other attributes are
identical to one or more other forms on the same web page. See the LoadRunner
Online Function Reference for details.
Hidden: Lists the hidden fields in a form. To add a hidden field, click Show list, and
then click the Add button on the Form Hidden Fields dialog box.

An ABC icon indicates that an image property value has not been assigned a
parameter. To assign a parameter, see Chapter 23, Parameterizing a Web Vuser
Script.

Creating Vuser Scripts Chapter 22, page 366


Web Vuser Scripts • Modifying Web Vuser Scripts

8 To add or remove a hidden field, enable the Hidden property and click the Show
List button. The Form Hidden Fields dialog box opens.
Click the Add button to add a hidden field. Type a name and value. Click OK.
Click the Remove button to remove a hidden field, and click Yes to the warning
message.
An ABC icon indicates that a hidden field has not been assigned a parameter. To
assign a parameter, see Chapter 6, Parameterizing a Test.
Click OK to close the Form Hidden Fields dialog box. Find
9 Click OK to close the Submit Form Step Properties dialog box.
?

Creating Vuser Scripts Chapter 22, page 367


Web Vuser Scripts • Modifying Web Vuser Scripts

Modifying a Custom Request Step


A custom request represents a custom HTTP request for a URL, with any method
In

supported by HTTP. A custom request step is contextless. The properties that you
can modify are the name of the step, method, URL, body, and target frame.

To modify the properties of a custom request step:


1 In the graphical Vuser script, select the icon for the custom request step that you
want to modify.
Find

Creating Vuser Scripts Chapter 22, page 368


Web Vuser Scripts • Modifying Web Vuser Scripts

2 Click the Parameters button on the QuickTest toolbar. The Custom Request
Properties dialog box opens.

Find

3 In the Step name box, type a name for the custom request step.

Creating Vuser Scripts Chapter 22, page 369


Web Vuser Scripts • Modifying Web Vuser Scripts

4 In the Method box, type any method supported by HTTP. For example, GET,
POST and HEAD. In

5 In the URL box, type the URL being requested.


6 In the Body box, type the body of the request. If you check the Binary data check
box, the text is treated as binary, and not as ASCII. For details on using binary
data, see the LoadRunner Online Function Reference.
7 Select a Target Frame from the list:

Find
Target Frame:

_BLANK: Opens a new window. ?


_PARENT: Replaces the parent of the last (changed) frame.
_SELF: Replaces the last (changed) frame.
_TOP: Replaces the whole page.

8 Click OK.

Creating Vuser Scripts Chapter 22, page 370


Web Vuser Scripts • Modifying Web Vuser Scripts

Modifying a Submit Data Step


A submit data step represents the submission of a form of data to your web site for
processing. This is different to a Submit Form step because you don’t need to have
a form context to execute this request. The properties that you can modify are the
name of the step, the data items on the form, the method, action and target frame.

To modify the properties of a submit data step:


1 In the graphical Vuser script, select the icon for the submit data step you want to
modify. Find
2 Click the Parameters button on the QuickTest toolbar. The Submit Data Step
Properties dialog box opens and displays the Data tab. ?

Creating Vuser Scripts Chapter 22, page 371


Web Vuser Scripts • Modifying Web Vuser Scripts

• The Name column lists all the data arguments on the form. This includes all
hidden fields. In

• The Value column displays the corresponding value input for a data argument.
• The Type column contains an icon. Initially, all values are constants or non-
parameterized values and have an ABC icon. If you assign a parameter to the
data value, as described in Chapter 23, Parameterizing a Web Vuser Script,
the ABC icon changes to a table icon.

3 To add a new data argument to the data submission, click Add. The Add Argument Find
dialog box opens.
Type a Name and Value for the data argument. Click OK. ?
4 To delete an argument, click Delete and then click Yes to the warning message.

Creating Vuser Scripts Chapter 22, page 372


Web Vuser Scripts • Modifying Web Vuser Scripts

5 To change the name of the submit data step, click the General tab.

Find

6 In the Step name box, type a name for the submit data step.
7 Select an HTTP Method - Post or Get. The default method is Post.
8 In the Action box, type the address to be used to carry out the action of the data
submission. To assign a parameter, see Chapter 23, Parameterizing a Web
Vuser Script.

Creating Vuser Scripts Chapter 22, page 373


Web Vuser Scripts • Modifying Web Vuser Scripts

9 Select a Target Frame from the list:


In

Target Frame:

_BLANK: Opens a new window.


_PARENT: Replaces the parent of the last (changed) frame.
_SELF: Replaces the last (changed) frame.
_TOP: Replaces the whole page.

10 Click OK.
Find

Creating Vuser Scripts Chapter 22, page 374


Web Vuser Scripts • Modifying Web Vuser Scripts

Modifying a Service Step


A service step is a function which performs customization tasks such as setting
proxies, submitting authorization information, and issuing customized headers.
Service steps do not make any changes in the web site context.

To modify the properties of a service step:


1 In the graphical Vuser script, select the icon for the service step that you want to
modify.
2 Click the Parameters button on the Test Toolbar. The Service Step Properties
dialog box opens.
Find

3 Select a service function from the Type list. See the LoadRunner Online
Function Reference for details of each function.
4 In the Arguments box, type the arguments required for the selected service step.
Use the hint displayed to help you format the arguments used by the step.
5 Click OK to close the Service Step Properties dialog box and to insert a service
step icon into the Vuser script.

Creating Vuser Scripts Chapter 22, page 375


Web Vuser Scripts • Modifying Web Vuser Scripts

Adding a Step to a Vuser Script


In

You can add steps to a recorded Web Vuser script.

To add a step to a Vuser script:


1 In the graphical Vuser script, select the icon at the location where you want to add
a step.
2 Click the right mouse button and then click Add Step. The Add Test Step dialog
box opens.
Find

3 In the Step Type box, select the type of step that you want to add.
4 In the Step Name box, type a name for the new step, and then click OK.

Creating Vuser Scripts Chapter 22, page 376


Web Vuser Scripts • Modifying Web Vuser Scripts

An additional dialog box opens, prompting for information about the step to add.
This dialog box varies, depending on the type of step that you are adding. For
details on using these dialog boxes, see the appropriate section as listed below:

To add a... See...

URL step Modifying a URL Step on page 358


Hypertext step Modifying a Hypertext Link Step on page 360
Hypergraphic step Modifying a Hypergraphic Link Step on page 362
Find
Form submission step Modifying a Form Submission Step on page 364
Custom Request step Modifying a Custom Request Step on page 368
?
Data submission step Modifying a Submit Data Step on page 371
Adding a Transaction after Recording on
Transaction
page 379

Adding a Rendezvous after Recording on


Rendezvous
page 378

Service step Modifying a Service Step on page 375

Creating Vuser Scripts Chapter 22, page 377


Web Vuser Scripts • Modifying Web Vuser Scripts

Adding a Rendezvous after Recording


After recording a Web Vuser script, you can use QuickTest to add a rendezvous to
the Vuser script. In

To add a rendezvous to a Vuser script:


1 In the graphical Vuser script, select the icon at the location where you want to
insert the new rendezvous.
2 Click the right mouse button and then click Add Step. The Add Test Step dialog
box opens.

Find

3 In the Step Type box, select rendezvous.


4 In the Step Name box, type a name for the new rendezvous, and then click OK.
The Add Test Step dialog box closes, and a rendezvous icon is inserted into the
Vuser script.

Creating Vuser Scripts Chapter 22, page 378


Web Vuser Scripts • Modifying Web Vuser Scripts

Adding a Transaction after Recording


After recording a Web Vuser script, you can use QuickTest to add a transaction to
the Vuser script.

To add a transaction to a Web-Vuser script:


1 In the graphical Vuser script, select the icon at the location where you want to start
the new transaction.
2 Click the right mouse button and then click Add Step. The Add Test Step dialog
box opens. Find

3 In the Step Type box, select Transaction.

Creating Vuser Scripts Chapter 22, page 379


Web Vuser Scripts • Modifying Web Vuser Scripts

4 In the Step Name box, type a name for the new transaction, and then click Next. A
Start Transaction icon is inserted into the Vuser script. In

5 Use the green down-arrow button to move the highlight in the Vuser script to
where you want to end the transaction.
6 Click Finish to close the Add Test Step dialog box and to insert an End Transaction
icon into the Vuser script.

Find

Creating Vuser Scripts Chapter 22, page 380


Web Vuser Scripts • Modifying Web Vuser Scripts

Renaming a Step in a Vuser Script


You can change the name of a step in your Vuser script.

To rename a step:
1 In the graphical Vuser script, select the step that you want to rename.
2 Select Step > Rename.
3 Type a new step name and then click Enter.
Find

Creating Vuser Scripts Chapter 22, page 381


Web Vuser Scripts • Modifying Web Vuser Scripts

Deleting a Step from a Vuser Script


In

After recording a Web Vuser script, you can use QuickTest to delete any step from
the Vuser script.

To delete a step from a Web Vuser script:


1 In the graphical Vuser script, select the icon that you want to delete.
2 Click the right mouse button and then click Delete.
3 Click Yes to confirm that you want to delete the step. Find
4 The icon is deleted from the graphical representation of the Vuser script.
?

Creating Vuser Scripts Chapter 22, page 382


Web Vuser Scripts
Parameterizing a Web Vuser Script
23
Parameterizing a Web Vuser Script
QuickTest lets you modify your recorded Vuser scripts by replacing fixed values
In

with parameters. This process, known as parameterization, greatly increases the


power and flexibility of your scripts.

This chapter describes:

• Specifying the Arguments to Parameterize


• Replacing Parameterized Arguments with Constants Find

• Automatically Specifying Parameterized Arguments ?


• Editing Information in the Data Table

This chapter applies to Web Vuser scripts only.

Creating Vuser Scripts Chapter 23, page 383


Web Vuser Scripts • Parameterizing a Web Vuser Script

About Parameterizing a Script


In

You start by recording a Web Vuser script that performs a single business process.
After you finish recording, you can “parameterize” certain arguments in the script
so that the script runs the same business process numerous times. In each run, the
Vuser changes the values of the parameterized arguments. You supply the list of
values.

For example, consider a web site that allows you to request information on any
product in the company’s catalog. To submit a request, the user types in the product Find
name and clicks the Submit button. In order to test the web server under the load
of many users, you create a number of Web Vusers. Each Vuser requests ?
information about ten different products. To create the required Vuser scripts, you
have two options:

• You could record a process where the user submits ten requests. To have different
Vusers submit requests for different products, you would have to record different
scripts. This is a slow, laborious, and inefficient solution.
• You could use parameterization. To use parameterization, you record a script that
accesses the web site and submits just a single request. Then you parameterize
the script, and supply the Vuser with a list of the products to query. When you run
the script, the Vuser submits a separate query for each product in the list.

Creating Vuser Scripts Chapter 23, page 384


Web Vuser Scripts • Parameterizing a Web Vuser Script

With QuickTest, there are two ways in which you can convert the fixed-value
arguments in a Web Vuser script into parameters:

1 Data-table parameterization
Data-table parameterization is a simplified type of parameterization. With data-
table parameterization, you assign values from an Excel-based data file to the
parameters in the Vuser script. Data-table parameterization is discussed in depth
in this chapter.
2 Enhanced parameterization
Find
Enhanced parameterization is the same type of parameterization that is available
through VuGen. When you use enhanced parameterization, you can assign values ?
from a file, or use data generated internally by QuickTest:

A data file can be an existing file, or you can use QuickTest to create a new
one.
Internal data is data that is generated automatically during scenario
execution. The available internal data types are: group name, host name,
Vuser ID, iteration number, date/time, random number, or unique number.
For an in-depth description of enhanced parameterization, see Chapter 5,
Defining Parameters.

Creating Vuser Scripts Chapter 23, page 385


Web Vuser Scripts • Parameterizing a Web Vuser Script

Introducing Data-table Parameterization


In

With data-table parameterization you use a data table to assign values to your
parameterized arguments. Each Vuser script has an associated data table.

Find

• Each row in the data table represents the values that QuickTest submits for all the
parameterized arguments during a single iteration of the script. For example, a
script associated with a table that has ten rows, can run ten iterations.
• Each column in the table represents the list of values for a single parameterized
argument.
Working directly in the data table, you can edit and delete existing values, as well
as add additional rows of arguments. You can also import data directly into a data
table. For more details, see Editing Information in the Data Table on page 395.

Creating Vuser Scripts Chapter 23, page 386


Web Vuser Scripts • Parameterizing a Web Vuser Script

Using data table parameterization to parameterize a script involves three


main steps:
1 Record a basic script as described in Chapter 19, Recording Web Vuser
Scripts.
2 Specify which arguments in the script are parameters and which are constants
(not parameterized). For details, see Specifying the Arguments to
Parameterize below.
3 Create data sets in the data table. For details, see Editing Information in the
Data Table on page 395. Find

Creating Vuser Scripts Chapter 23, page 387


Web Vuser Scripts • Parameterizing a Web Vuser Script

Specifying the Arguments to Parameterize


You can parameterize arguments for any step in a Vuser script. You can specify In

arguments to be parameterized either individually as described below, or


automatically as described in Automatically Specifying Parameterized
Arguments on page 393.

To parameterize arguments for any step in a Vuser script:


1 In the test tree, right-click the icon for the step and then click Parameters. The
appropriate properties dialog box opens.
Find

2 Select the argument to be parameterized:

Creating Vuser Scripts Chapter 23, page 388


Web Vuser Scripts • Parameterizing a Web Vuser Script

For a Form Submission step:


Ensure that the Data tab is visible. All the arguments contained in the form are
listed in the Name column. The corresponding value for each argument is shown
in the Value column. All arguments in the data set are initially displayed as
constant or non-parameterized values. This is indicated by the ABC icon
appearing in the Type column. For example, the “author” argument above is
defined by the constant value “Tolkien.” Select the argument to be parameterized.
For a URL step or a link step:
The argument is initially displayed as a constant or non-parameterized value. This Find
is indicated by the ABC icon appearing to the side of the parameter. Select the
argument to be parameterized. ?
3 Click Assign Parameter. The Assign Parameter dialog box opens.

4 To use an existing parameter, click Existing parameter and then select a column
name from the list.

Creating Vuser Scripts Chapter 23, page 389


Web Vuser Scripts • Parameterizing a Web Vuser Script

5 To define a new parameter, click New parameter and then type a name in the
adjacent box. In

To assign a value to the newly defined parameter, select the Add Data check box
and then type a value in the adjacent box.
6 Click OK. In the appropriate properties dialog box, the argument appears as
parameterized. This is indicated by the Table icon appearing to the side of the
argument.
7 Repeat for steps 2 to 6 for any additional arguments.
Find
8 Click Close.
?

Creating Vuser Scripts Chapter 23, page 390


Web Vuser Scripts • Parameterizing a Web Vuser Script

Replacing Parameterized Arguments with Constants


After parametrizing an argument, you may decide to use the argument as a
constant. You can change parameterized arguments back to constants, and you
can remove arguments from the data table.

To replace a parameterized argument with a constant:


1 In the test tree, right-click the icon for any step that contains a parameterized
argument, and then click Parameters. The appropriate properties dialog box
opens
Find
You can easily identify all the arguments that have been parameterized. Each one
has a Table icon appearing to the right of the argument value.
?
2 Select the argument to convert from a parameter to a fixed value, and then click
Undo Parameter. The Undo Parameter dialog box opens.

Creating Vuser Scripts Chapter 23, page 391


Web Vuser Scripts • Parameterizing a Web Vuser Script

3 Type a name for the string in the Replace it with string box.
4 To remove the argument from the data table, select the Delete Parameter from
In

Data Table check box.


5 Click OK. The argument appears in the appropriate properties dialog box as a
constant. This is indicated by the ABC icon appearing to the side of the parameter.
6 Click Close in the Properties dialog box. When you run the script, QuickTest
handles the argument as a constant.

Find

Creating Vuser Scripts Chapter 23, page 392


Web Vuser Scripts • Parameterizing a Web Vuser Script

Automatically Specifying Parameterized Arguments


Instead of parameterizing individual arguments, you can define groups of
arguments to be parameterized. The groups that you can select are:

• all the checks in the script


• all the Link steps (both hypertext and hypergraphic) in the script
• all the form submission steps in the script

Find
You can parameterize any combination of the above three groups.

To define groups of arguments to be parameterized: ?


1 Click Tools > Parameterize.

Creating Vuser Scripts Chapter 23, page 393


Web Vuser Scripts • Parameterizing a Web Vuser Script

2 Select the check boxes for the categories that you want to convert to
parameterized arguments. For each category that you select, QuickTest creates a In

column for each argument in the data table.


Text checks: Converts all checks in the QuickTest script into parameterized
arguments.
Form arguments: Converts all form submission steps in the QuickTest script into
parameterized arguments.
Links: Converts all hypertext steps in the QuickTest script into parameterized
arguments. Find

3 Click OK. A message appears listing the columns that QuickTest added to the
data table.
?
4 If the data table is not currently displayed, choose View > Data Table to see the
table.

Creating Vuser Scripts Chapter 23, page 394


Web Vuser Scripts • Parameterizing a Web Vuser Script

Editing Information in the Data Table


The data table contains the values that QuickTest assigns to parameterized
arguments when you run the Vuser script. You edit information in the data table by
typing directly in the table.

To edit the data table:


1 Choose View > Data Table. The data table for the project opens.

Find

2 Make the necessary changes by typing directly in the table, and by using the data
table’s menu options.
3 From the data table menu, select File > Save to save your changes to the table.

Creating Vuser Scripts Chapter 23, page 395


Part IX

Baan Vuser Scripts

Find

Creating Vuser Scripts 396


Baan Vuser Scripts
Creating Baan Vuser Scripts
24
Creating Baan Vuser Scripts
You use VuGen to develop Baan Vuser scripts. You record Baan sessions in
In

WinRunner and run them in VuGen and LoadRunner.

This chapter describes:

• Getting Started with Baan Vusers


• Baan Functions

Find
Creating a Baan Vuser Script
• Understanding Baan Vuser Scripts ?
• Customizing Baan Vuser Scripts

This chapter applies to Baan Vuser scripts only.

Creating Vuser Scripts Chapter 24, page 397


Baan Vuser Scripts • Creating Baan Vuser Scripts

About Developing Baan Vuser Scripts


In

The Baan type Vuser lets you test your Baan application and test your system
under load. Vugen records your entire Baan session, including the login information
to the Baan server.

When you record actions, VuGen creates a script using Context Sensitive
functions. Context Sensitive functions depict actions in the application under test in
terms of GUI objects (such as windows, lists, and buttons). Each time you record
an operation, a function is generated which describes the object selected and the Find
action performed.
?

Creating Vuser Scripts Chapter 24, page 398


Baan Vuser Scripts • Creating Baan Vuser Scripts

Getting Started with Baan Vusers


Before recording a Baan Vuser script in VuGen, make sure that your machine can
open a Baan session.

To create a Baan Vuser script, follow these steps:

1 Create a Baan Vuser in VuGen.


Create a new Baan Vuser template.
2 Record user actions. Find

Record typical user actions. ?


3 Add transactions, rendezvous, comments, and messages.
Use the Insert menu to add transactions, rendezvous, comments, and messages
in order to enhance your script.
4 Add exception handling and set run-time properties.
Add functions to handle exceptions, set think time, and specify timeout periods.
Configure run-time settings for logging and iterations.
5 Perform parameterizationon your script.
Replace recorded constants with parameters.
6 Save and run the Vuser script.
Run the script from VuGen and view the execution log for run-time information.

Creating Vuser Scripts Chapter 24, page 399


Baan Vuser Scripts • Creating Baan Vuser Scripts

Baan Functions
In

This section lists the functions that VuGen generates while recording a Baan user
Online session. You can also manually program any of the functions into your script. For
Function more information about the Baan Vuser functions, refer to the LoadRunner Online
Reference Function Reference (available from the VuGen Help menu).

Baan Specific Functions


init_session Initializes a Baan session. Find
close_session Closes all Baan sessions and windows.
start_session Begins a specific Baan session.
?
set_exception Specifies how to handle exceptions.
set_think_time Sets the think time range.
set_default_timeout Sets the default timeout.

Button Object Functions


button_press Activates a pushbutton.
button_set Sets the state of the specified radio or check
button.

Creating Vuser Scripts Chapter 24, page 400


Baan Vuser Scripts • Creating Baan Vuser Scripts

Edit Object Functions


edit_get_text Returns the text in an edit object.
edit_set Replaces the entire contents of an edit object.
edit_set_insert_pos Places the cursor at the specified point.
edit_set_selection Selects text in an edit object.
edit_type Types a string in an edit object.

List Object Functions Find


list_activate_item Activates items in a list.
?
list_select_item Selects a list item.
list_get_selected Returns the currently selected item in a list.

Menu Object Functions


menu_select_item Selects an item from a menu.

Tab and Toolbar Functions


tab_select_item Selects a tab in the active window.
toolbar_button_press Clicks a toolbar button.

Creating Vuser Scripts Chapter 24, page 401


Baan Vuser Scripts • Creating Baan Vuser Scripts

Object Functions
obj_get_info Returns the value of an object attribute.
In

obj_get_text Reads text from an object.


obj_mouse_click Clicks within an object.
obj_mouse_dbl_click Double-clicks within an object.
obj_mouse_drag Drags the mouse within an object.
obj_type Sends keyboard input to an object.
Find

Scroll Object Functions ?


scroll_drag_from_min Drags a scroll object to the specified distance
from the minimum position.
scroll_line Scrolls the specified number of lines.
scroll_page Moves a scroll object the specified number of
pages.

Static Object Functions


static_get_text Returns the contents of a static text object.

Creating Vuser Scripts Chapter 24, page 402


Baan Vuser Scripts • Creating Baan Vuser Scripts

Synchronization Functions
obj_wait_info Waits for the value of an object attribute.
tbl_wait_selected_cell Waits for the specified cell to appear in focus.
win_wait_info Waits for the value of an window attribute.

Table Functions
tbl_activate_cell Clicks Enter in the specified cell.
Find
tbl_get_cell_data Retrieves the contents of the specified cell from a
table.
?
tbl_get_selected_cell Returns the cell currently in focus in a table.
tbl_press_zoom_button Clicks the table's zoom button.
tbl_set_cell_data Sets the contents of a cell to the specified text in
a table.
tbl_set_selected_cell Selects a table cell.

Miscellaneous Functions
type Specifies keyboard input.
wait Causes script execution to pause for a specified
amount of time.

Creating Vuser Scripts Chapter 24, page 403


Baan Vuser Scripts • Creating Baan Vuser Scripts

Window Object Functions


set_window Specifies the window that receives subsequent In

input.
win_activate Activates a window.
win_close Closes a window.
win_get_text Reads text from a window.
win_get_info Returns the value of a window attribute.
win_max Maximizes a window to fill the entire screen. Find
win_min Minimizes a window to an icon.
?
win_mouse_click Clicks within a window.
win_mouse_dbl_click Double-clicks within a window.
win_mouse_drag Drags the mouse within a window.
win_move Moves a window to a new absolute location.
win_resize Resizes a window.
win_restore Restores a window from an iconized or
maximized state to its previous size.
win_type Send keyboard input to a window.
You can further enhance your script with general LoadRunner functions such as
lr_output_message and lr_rendezvous. For information on the LoadRunner
functions, refer to the LoadRunner Online Function Reference.

Creating Vuser Scripts Chapter 24, page 404


Baan Vuser Scripts • Creating Baan Vuser Scripts

Creating a Baan Vuser Script


After you create a new Baan Vuser script you begin recording user actions.

To create a new Baan Vuser script:


1 Select the vuser_init section, in order to record the login procedure into that
section.
2 Click the Record button and specify the location of the Baan application in the
Start Recording dialog box.
Find
3 Switch to the Actions section and record typical user actions.
4 Insert Baan Vuser functions for think time, handling exceptions, and setting ?
timeouts.

set_think_time(MINTHINK,MAXTHINK);
set_window ("Menu browser [User: bsp ] [812]", 10);
menu_select_item ("File;Run Program...");
...

Creating Vuser Scripts Chapter 24, page 405


Baan Vuser Scripts • Creating Baan Vuser Scripts

5 Add transactions to the script. Choose Insert > Start Transaction to specify the
beginning of a transaction, and Insert > End Transaction to specify the end of a In

transaction.

lr_start_transaction("all_str_ses");
button_press0 ("F1_OK");
set_window ("tdpur4101m000 : Maintain Purchase Orders [812]", 300);
lr_end_transaction("all_str_ses", LR_PASS);

6 Use the Insert menu to add rendezvous points, comments or messages to the Find
script.
7 Parameterize your script. Click the sring (in quotation marks) that you want to
?
replace with a parameter, perform a right-click and choose Replace with
Parameter. For more information see Chapter 5, Defining Parameters.
8 Set the appropriate Run Time settings for iterations and logging.
9 Save the script and run it from VuGen.

Creating Vuser Scripts Chapter 24, page 406


Baan Vuser Scripts • Creating Baan Vuser Scripts

Understanding Baan Vuser Scripts


The recorded script shows all the actions performed by the user during recording.
The Context Sensitive functions show all the actions performed on the application’s
objects. In the following example, VuGen recorded the focus to a window, the
selection of a menu item, and the clicking of a button. In addition, a transaction was
marked to analyze the time it takes for the object Form1 to become in focus.

set_window ("tccom1501m000 : Display Customers [550]", 30);


menu_select_item ("Edit;Find... Ctrl+F"); Find
set_window ("Display Customers - Find", 300);
type ("100004"); ?
lr_start_transaction("rses_find");
button_press0 ("F1_OK");
set_window ("tccom1501m000 : Display Customers [550]", 30);
obj_wait_info("Form 1","focused","1",100);
lr_end_transaction("rses_find", LR_PASS);

Creating Vuser Scripts Chapter 24, page 407


Baan Vuser Scripts • Creating Baan Vuser Scripts

You can add control flow logic to create loops within your script, instead of
performing an iteration on the entire script. In

for (loop = 0 ; loop < READLOOP; loop++)


{
set_window ("tccom1501m000 : Display Customers [550]", 30);
menu_select_item ("Edit;Find... Ctrl+F");
set_window ("Display Customers - Find", 300);
type ("100004");
lr_start_transaction("rses_find");
Find
button_press0 ("F1_OK");
set_window ("tccom1501m000 : Display Customers [550]", 30);
obj_wait_info("Form 1","focused","1",100); ?
lr_end_transaction("rses_find", LR_PASS);
....

Note that you may need to parameterize statements, in order to avoid duplicating
data to a database. For more information, see Chapter 5, Defining Parameters.

Creating Vuser Scripts Chapter 24, page 408


Baan Vuser Scripts • Creating Baan Vuser Scripts

Customizing Baan Vuser Scripts


You can view and edit your script from VuGen at any time. You can use the Baan-
specific functions to customize the script execution in the following areas:

• Think Time
• Exception Handling
• Timeouts

Find

Creating Vuser Scripts Chapter 24, page 409


Baan Vuser Scripts • Creating Baan Vuser Scripts

Think Time
You can set the think time range for script execution. The think time emulates the
In

work pattern of an actual user—the time the user pauses between actions. You set
the beginning and end of a think time range using the set_think_time function.
After each statement LoadRunner pauses for the duration of the think time, a
random value within the specified range.

If your desired think time range is constant throughout the script, you can define
the beginning and end ranges as constants as shown in the example below.
Find
In the following example, the think time range was set from 500 to 1000
milliseconds: ?
#define MINTHINK 500
#define MAXTHINK 1000

int LR_FUNC Actions(LR_PARAM p)


{
set_think_time(MINTHINK,MAXTHINK);
set_window ("Menu browser [User: bsp ] [812]", 10);
...

Creating Vuser Scripts Chapter 24, page 410


Baan Vuser Scripts • Creating Baan Vuser Scripts

Handling Exceptions
You can instruct a Baan Vuser how to handle exceptions that occur during replay,
such as a message or error windows.

Using the set_exception function, you specify a function to be executed when the
exception is encountered.

In the following example, the set_exception function instructs the Vuser to execute
the close function when the Print Sales Invoices window opens. The close function
is defined earlier in the script. Find

int close(char title[]) ?


{
win_close(title);
}
Actions( )
{
set_exception("ttstps0014 : Print Sales Invoices",close);
set_window ("Menu browser [User: bsp ] [812]", 10);
menu_select_item ("File;Run Program...");
set_window ("ttdsk2080m000 : Run Program [812]", 10);
type ("tdsls4101m000");
...;

Creating Vuser Scripts Chapter 24, page 411


Baan Vuser Scripts • Creating Baan Vuser Scripts

Setting Timeouts
You can set the default timeout period for your functions. This timeout is applied to
In

all functions using synchronization, such as obj_wait_info, win_wait_info, etc.

In functions containing a parameter specifying a timeout period (such as


set_window), the specified timeout overrides the default timeout.

button_press ("F3_Continue");
win_wait_info("ttstpsplopen : Select Device [000]","displayed","0",10);
Find

Creating Vuser Scripts Chapter 24, page 412


Part X

Java Vuser Scripts

Find

Creating Vuser Scripts 413


Java Vuser Scripts
Creating Java Vuser Scripts
25
Creating Java Vuser Scripts
You can use Java based applets and applications to test your system under load.
In

This chapter describes:

• Getting Started with Java Vusers


• Java Functions
• Creating a Java Vuser Script
Find
• Understanding Java Vuser Scripts
• Replaying Java Vuser Scripts
?
• Understanding the GUI Map

This chapter applies to Java Vuser scripts only.

Creating Vuser Scripts Chapter 25, page 414


Java Vuser Scripts • Creating Java Vuser Scripts

About Developing Java Vuser Scripts


Java is an object-oriented, portable, and secure multi-threaded language. It has
become increasingly popular in environments such as the World Wide Web,
client/server systems, and packaged applications. The Java type Vuser lets you
test Java applets and applications on different platforms and test your system
under load.

When you record actions in a Java applet or application through VuGen,


LoadRunner creates a script using Context Sensitive functions. Context Sensitive Find
functions depict actions on the application under test in terms of GUI objects (such
as windows, lists, and buttons). Each time you record an operation, a function is ?
generated which describes the object selected and the action performed.

Creating Vuser Scripts Chapter 25, page 415


Java Vuser Scripts • Creating Java Vuser Scripts

Getting Started with Java Vusers


In

Before recording a Java Vuser script in VuGen, make sure that your environment
variables (path and classpath) are properly set and that you have classes.zip or
rt.jar in the classpath. Verify that you can start your Java applet or application in
standalone mode, and that the message “Loading Mercury Support” appears.

To create a Java Vuser script, follow these steps:

1 Ensure that the machine is configured properly.


Find
Make sure that WinRunner 5.0 is installed on the machine upon which you want to
record, and that its arch directory is in the path. ?
2 Create a Java Vuser in VuGen.
Create a new Java Vuser template.
3 Set the Java recording options.
Prepare a batch file with Java Mercury support and configure the VuGen
recording options for Java Vusers.
4 Record Vuser actions.
Record typical Vuser actions.
5 Add transactions, rendezvous, comments, and messages.
Use the Insert menu to add transactions, rendezvous, comments, and messages
in order to enhance your script.

Creating Vuser Scripts Chapter 25, page 416


Java Vuser Scripts • Creating Java Vuser Scripts

6 Set run-time properties.


Configure run-time settings for the applet url or application name, run mode,
logging, think time, and iterations.
7 Enhance your script with parameters.
Replace recorded constants with parameters.
8 Save and run the Vuser script.
Run the script from VuGen and view the execution log for run-time information.
Find

Creating Vuser Scripts Chapter 25, page 417


Java Vuser Scripts • Creating Java Vuser Scripts

Java Functions In

This section lists the functions that VuGen generates while recording a Java applet
Online or application. You can also manually program any of the functions into your script.
Function For more information about the Java Vuser functions, refer to the LoadRunner
Reference Online Function Reference (available from the VuGen Help menu).

AUT Functions
Find
set_aut_var Sets a variable for the AUT (Application Under Test).
?
Button Object Functions
button_press Activates a pushbutton.
button_set Sets the state of the specified radio or check
button.

Creating Vuser Scripts Chapter 25, page 418


Java Vuser Scripts • Creating Java Vuser Scripts

Edit Object Functions


edit_activate Activates an edit object.
edit_delete_block Deletes a text block from an edit object.
edit_insert_block Inserts text in a multi-line edit object.
edit_replace Replaces the specified contents of a one-line edit
object.
edit_replace_block Replaces a block of text in a multi-line edit object.
edit_set Replaces the entire contents of an edit object.
Find
edit_set_selection Selects text in an edit object.
edit_set_insert_pos Places the cursor at the specified point. ?
List Item Functions
list_activate_item Activates items in a list.
list_collapse_item Hides items in a list.
list_deselect_item Deselects an item in a list.
list_deselect_range Deselects all items between two specified items
in a list.
list_expand_item Shows hidden items in a list.
list_extend_item Adds an item to a list.
list_select_item Selects a list item.
list_select_range Selects a range of items from a list.

Creating Vuser Scripts Chapter 25, page 419


Java Vuser Scripts • Creating Java Vuser Scripts

Menu Object Functions


menu_select_item Selects an item from a menu.
In

Object Functions
obj_exists Checks if an object is displayed.
obj_get_info Returns an object attribute value
obj_key_type Types input within an object.
Find
obj_mouse_click Clicks within an object.
obj_mouse_dbl_click Double-clicks within an object. ?
obj_mouse_drag Drags the mouse within an object.
obj_wait_info Waits for the value of an object attribute.

Scroll Object Functions


scroll_drag Drags a scroll to the specified position.

Tab Object Functions


tab_select_item Selects a tab in the active window.

Creating Vuser Scripts Chapter 25, page 420


Java Vuser Scripts • Creating Java Vuser Scripts

Spin Object Functions


spin_max Sets a spin to its maximum value.
spin_min Sets a spin to its minimum value.
spin_next Sets a spin to its next value.
spin_prev Sets a spin to its previous value.
spin_set Sets a spin to the specified value.

Find
Table Functions
tbl_activate_cell Clicks Enter in the specified cell. ?
tbl_activate_col Double-clicks on the specified column.
tbl_activate_row Double-clicks on the specified row.
tbl_deselect_col Deselects the specified column in a
table.
tbl_deselect_cols_range Deselects the specified range of
columns.
tbl_deselect_row Deselects the specified row in a table.
tbl_deselect_rows_range Deselects the specified range of rows.
tbl_extend_col Adds a column to previously selected
columns.

Creating Vuser Scripts Chapter 25, page 421


Java Vuser Scripts • Creating Java Vuser Scripts

tbl_extend_cols_range Adds columns to previously selected


columns.
In

tbl_extend_row Adds a row to previously selected rows.


tbl_extend_rows_range Adds rows to previously selected rows.
tbl_select_cells_range Selects a range of cells.
tbl_select_col_header Selects a column header.
tbl_select_cols_range Selects a range of columns.
tbl_select_rows_range Selects a range of rows. Find
tbl_set_cell_data Sets the contents of a cell to the
specified text in a table. ?
tbl_set_selected_cell Selects a table cell.
tbl_set_selected_col Selects a table column.
tbl_set_selected_row Selects the specified row in a table.

Creating Vuser Scripts Chapter 25, page 422


Java Vuser Scripts • Creating Java Vuser Scripts

Window Object Functions


set_window Specifies the window that receives subsequent
input.
win_close Closes a window.
win_exists Checks whether a window is displayed.
win_max Maximizes a window to fill the entire screen.
win_min Minimizes a window to an icon.
Find
win_move Moves a window to a new absolute location.
win_mouse_click Clicks within a window. ?
win_mouse_dbl_click Double-clicks within a window.
win_mouse_drag Drags the mouse within a window.
win_resize Resizes a window.
win_restore Restores a window from an iconized or
maximized state to its previous size.

You can further enhance your script with general LoadRunner functions such as
lr_output_message and lr_rendezvous. For information on using these
functions, see Understanding Java Vuser Scripts on page 426.

Creating Vuser Scripts Chapter 25, page 423


Java Vuser Scripts • Creating Java Vuser Scripts

Creating a Java Vuser Script


In

1 Start VuGen and create a new Vuser script. Choose File > New, and select Java
from the menu list. Click OK. VuGen creates a Java template.
2 Prepare a batch file with Java Mercury support.
For Java applications, make sure that the first line of the batch file is:
java -Dawt.toolkit=mercuty.awt.awt <application>
For Java applets, make sure that the first line of the batch file is:
Find
java LoadApp <urt>
3 Before you begin recording, you can set the Java recording settings.
?
4 After you create a new Java Vuser script and configure the Java recording
settings, you begin recording user actions within the applet or application.
Specify the path to the batch file which you created in the Program To Record field
of the Start Recording dialog box.
For more information about recording, see Chapter 3, Recording with VuGen.

Creating Vuser Scripts Chapter 25, page 424


Java Vuser Scripts • Creating Java Vuser Scripts

5 Add transactions to the script. Choose Insert > Start Transaction to specify the
beginning of a transaction, and Insert > End Transaction to specify the end of a
transaction.
It is recommended to mark the first set_window statement as a transaction to
verify that the applet or application loaded correctly.

lr_start_transaction("first_win");
set_window("FIRST_WINDOW");
button_set("RadioCheckbox_12",ON);
lr_end_transaction("first_win", LR_PASS); Find

6 Use the Insert menu to add rendezvous points, comments, or messages to the
?
script.
7 Enhance your script with synchronization points (win_exists, obj_exists,
obj_wait_info), and add lr_think_time statements to emulate user think time.
8 Parameterize your script. Click the constant you want to replace with a parameter,
perform a right-click and choose Replace with Parameter. For more information
see Chapter 5, Defining Parameters.
9 Set the appropriate Run Time settings for applet url or application name, run
mode, think time, iterations and logging.
10 Save the script and test it as a standalone script from VuGen.

Creating Vuser Scripts Chapter 25, page 425


Java Vuser Scripts • Creating Java Vuser Scripts

Understanding Java Vuser Scripts


In

When you create a Java Vuser script, VuGen records all of the context sensitive
actions you performed in your script. The recorded functions reflect the actions you
performed on your applet or application’s objects.

In the following example, the user focused on the periodic.html window, set several
buttons, selected an item from a list, and dragged a scrollbar.

Actions() Find
{
set_window("periodic.html", 3);
button_set("Charge", ON);
?
lr_think_time(1);
button_set("Economy", ON);
lr_think_time(2);
list_select_item("Fly To:", "Barneveld");
scroll_drag("Seat", 65);
...

You can modify the functions in your script, or add additional functions to enhance
the script. For a list of the available functions, see the LoadRunner Online
Function Reference.

Creating Vuser Scripts Chapter 25, page 426


Java Vuser Scripts • Creating Java Vuser Scripts

Replaying Java Vuser Scripts


Before you begin replay, you must set the Java run time settings to indicate the
applet or application and the mode of replay.

1 Select > Vuser > Run Time Settings to open the Run-Time settings dialog box.
Click the Java tab.

Find

2 Select Applet or Application in the Java Type section, depending on what you want
to replay.
3 In the Name box, enter the URL or full path of the applet or application. For
applications, do not include the .class extension, and make sure that the
application exists in the classpath.

Creating Vuser Scripts Chapter 25, page 427


Java Vuser Scripts • Creating Java Vuser Scripts

4 In the Parameters box, enter any optional parameters used by the application.
5 Select a Run Mode:
In

Hidden runs the applet or application in the background.


Debug writes all applet output to a file called javalog.# in the user directory.
Select No Archives if you usually run your applet or application in the JDK no-
archives mode.
6 Click OK to accept the settings and close the dialog box.
Find

Creating Vuser Scripts Chapter 25, page 428


Java Vuser Scripts • Creating Java Vuser Scripts

Understanding the GUI Map


When you record your applet or application, VuGen creates a GUI (Graphical User
Interface) map file which includes details about the objects within the applet or
application. For each object, VuGen lists the object’s logical name, its class, and
some of its attributes (e.g., label or attached_text).

To view the GUI file, select the map.gui in the Data Files section in VuGen.

Find

Creating Vuser Scripts Chapter 25, page 429


Java Vuser Scripts • Creating Java Vuser Scripts

In the following example, the GUI map lists a window, radio buttons, a list item, and
a scroll object. In

...
}
"periodic.html".Charge:
{
class: radio_button,
label: Charge
}
Find
"periodic.html".Economy:
{
class: radio_button, ?
label: Economy
}
"periodic.html"."Fly To:":
{
class: list,
attached_text: "Fly To:"
}
"periodic.html".Seat:
{
class: scroll,
attached_text: Seat

Creating Vuser Scripts Chapter 25, page 430


Part XI

GUI Vuser Scripts

Find

Creating Vuser Scripts 431


GUI Vuser Scripts
Developing GUI Vuser Scripts
26
Developing GUI Vuser Scripts
GUI Vusers operate graphical user interface (GUI) applications in both Windows-
In

based and UNIX-based environments. You create GUI Vuser scripts by using
WinRunner and XRunner, Mercury Interactive’s automated testing tools for GUI
applications.

This chapter describes:

• Introducing GUI Vusers Find


• Understanding GUI Vuser Technology

?
Getting Started with GUI Vusers
• Using WinRunner and VXRunner to Create GUI Vuser Scripts
• Measuring Server Performance: Transactions
• Generating Heavy User Load: Rendezvous Points
• Understanding GUI Vuser Scripts
• Using LoadRunner Functions in GUI Vuser Scripts
• Sending Messages to the Controller
• Obtaining Information about Vusers and Hosts

This chapter applies to GUI (Windows) and GUI (UNIX) Vuser scripts only.

Creating Vuser Scripts Chapter 26, page 432


GUI Vuser Scripts • Developing GUI Vuser Scripts

About Developing GUI Vuser Scripts


GUI Vusers enable you to measure and monitor end-to-end user response times
while your client/server system is under load. A GUI Vuser emulates the complete
environment of a human user. For example, a human user sits at a machine,
operates applications using the keyboard and the mouse, and reads information on
the machine’s monitor. Similarly, a GUI Vuser runs on its own machine and
operates applications. A Vuser can be programmed to read and act on information
that appears on its machine’s display.
Find
The actions of each GUI Vuser are described in a GUI Vuser script. You use
GUI Vuser
Scripts
WinRunner to create Windows-based GUI Vuser scripts. You use VXRunner to ?
create UNIX-based GUI Vuser scripts. VXRunner and WinRunner are automated
GUI testing tools that allow you to create, edit, and debug GUI Vuser scripts.

GUI Vuser scripts are created using Mercury Interactive’s Test Script Language
(TSL). TSL is a C-like programming language that is high-level and easy to use. It
combines the power and flexibility of a conventional programming language with
functions designed for testing client/server systems.

After recording a basic Vuser script, you insert statements into the script that
measure the performance of the server (transactions), and ensure that specific
user load is emulated (rendezvous points). For more details about GUI Vusers,
refer to your LoadRunner Controller User’s Guide.

Creating Vuser Scripts Chapter 26, page 433


GUI Vuser Scripts • Developing GUI Vuser Scripts

Introducing GUI Vusers


In

Suppose that you have a bank server that services many automatic teller machines
(ATMs). You could create a GUI Vuser script that:

• opens the ATM application


• enters an account number
• enters the amount of cash to be withdrawn
• withdraws cash from the account Find
• checks the balance of the account
?
• closes the ATM application
• repeats the process

You monitor and manage GUI Vusers using a LoadRunner Controller only. For
instance, you can use the Controller to run, pause, or view Vusers, and to monitor
scenario status.

Creating Vuser Scripts Chapter 26, page 434


GUI Vuser Scripts • Developing GUI Vuser Scripts

Understanding GUI Vuser Technology


There are two types of GUI Vusers: Windows-based and UNIX-based. This section
outlines how to create Vuser scripts for both types of Vusers. For details on creating
Windows-based Vuser scripts, refer to the WinRunner User’s Guide. For details
on creating UNIX-based Vuser scripts, refer to the Creating GUI Virtual User
Scripts (UNIX) guide.

Note: You cannot use VuGen to run a GUI Vuser script. You use the LoadRunner Find
Controller to run a GUI Vuser script as part of a scenario; you use WinRunner or
XRunner to run a GUI Vuser script in stand-alone mode. ?

Creating Vuser Scripts Chapter 26, page 435


GUI Vuser Scripts • Developing GUI Vuser Scripts

GUI Vusers measure real end-to-end response times. End-to-end response times
represent the total time that a user waits for a response after submitting a request. In

End-to-end response times include GUI response times as well as network and
server response times.

End-to-End response time (including GUI)

Network and Server response times


Find

GUI
Server

UI Logic API

Client Network Server

Creating Vuser Scripts Chapter 26, page 436


GUI Vuser Scripts • Developing GUI Vuser Scripts

Windows-Based GUI Vusers


A Windows-based GUI Vuser consists of a copy of WinRunner—Mercury
Interactive’s GUI testing tool for Windows-based applications—and a GUI-based
application.

Input
Find

?
GUI-based application
WinRunner

A GUI Vuser

WinRunner replaces the human user and operates the application. For example,
WinRunner can select a command from a menu, click an icon, or type text. The
application that WinRunner operates can be any application that accesses a
server.

Creating Vuser Scripts Chapter 26, page 437


GUI Vuser Scripts • Developing GUI Vuser Scripts

UNIX-Based GUI Vusers


A UNIX-based Vuser emulates the complete UNIX/X environment of a real user.
In

The actual environment for a human user would consist of:

• an X Server
• a client application
• a window manager

Find

Input
?
Input
Output

X Server
Human User
Client Application

The UNIX environment of a human user.

Creating Vuser Scripts Chapter 26, page 438


GUI Vuser Scripts • Developing GUI Vuser Scripts

The virtual user environment consists of:

• VXRunner, an enhanced XRunner, which operates the client application


• a “virtual X Server,” which emulates an X server
• the client application
• a window manager (optional)

Find
Input
Input
Output ?
VXRunner
Virtual X Server Client Application

A LoadRunner GUI Vuser

Creating Vuser Scripts Chapter 26, page 439


GUI Vuser Scripts • Developing GUI Vuser Scripts

In the virtual user environment, the person using the client application is replaced
by VXRunner, which runs a Vuser script. VXRunner has no user interface; it is In

controlled remotely from LoadRunner. The Virtual X Server is the server on which
the client application is activated. The Virtual X Server is an optimized X server that
offers a background mode of operation. In this mode, the Virtual X server receives
input from VXRunner only, and none of its X clients appear on the display.

Mercury Interactive’s X server technology enables you to run several Vusers


simultaneously on a single machine—independent from, and without disturbing
one another—while leaving your current display, keyboard and mouse free for Find
regular work. Any time you wish to view a Vuser,
LoadRunner can display it on your local host, regardless of the machine on which ?
the Vuser is actually running.

Creating Vuser Scripts Chapter 26, page 440


GUI Vuser Scripts • Developing GUI Vuser Scripts

Getting Started with GUI Vusers


This section outlines how to create a GUI Vuser script and then integrate it into a
LoadRunner scenario.
1 Create a GUI Vuser script using WinRunner or VXRunner.
Use WinRunner or VXRunner to record your keyboard and mouse operations on a
GUI based application. For details, refer to the WinRunner User’s Guide or the
Creating GUI Virtual User Scripts (UNIX) guide.
2 Program additional TSL statements into the script. Find
Enhance the Vuser script by using loops and other control-flow structures. For
details about editing scripts, refer to the WinRunner User’s Guide or the ?
Creating GUI Virtual User Scripts (UNIX) guide. For details about TSL, refer to
the TSL Online Reference.

Insert transactions to measure system performance.


Measure the performance of the server by inserting transactions into your Vuser
scripts.

Insert Rendezvous points to generate intense user load on the server.


Rendezvous points instruct multiple Vusers to perform tasks at exactly the same
time.

Creating Vuser Scripts Chapter 26, page 441


GUI Vuser Scripts • Developing GUI Vuser Scripts

3 Run the Vuser script.


Run the script to make sure it works correctly. If necessary, debug the script. For
In

more information, refer to the WinRunner User’s Guide or the Creating GUI
Virtual User Scripts (UNIX) guide.

After you create a GUI Vuser script, you integrate it into a LoadRunner scenario
on either a Windows or UNIX platform. For more information on integrating Vuser
scripts in a scenario, refer to your LoadRunner Controller User’s Guide.

Find

Creating Vuser Scripts Chapter 26, page 442


GUI Vuser Scripts • Developing GUI Vuser Scripts
Using WinRunner and VXRunner to Create GUI Vuser Scripts
You use WinRunner to create Windows-based GUI Vuser scripts, and VXRunner
to create UNIX-based GUI Vuser scripts. After recording a basic Vuser script using
WinRunner or VXRunner, you manually insert:

• transaction statements into the script to measure the performance of the server.
For details, see Measuring Server Performance: Transactions on page 445.
• rendezvous statements into the script to ensure that specific user load is
emulated. For details, see Generating Heavy User Load: Rendezvous Points
on page 447.
Find
Creating Windows-based GUI Vuser Scripts
WinRunner is a complete development environment for creating, editing, and
?
debugging Windows-based GUI Vuser scripts. Using WinRunner, you record the
actions of a human user on an application. For example, you could record a user
entering an account number into an ATM and then withdrawing fifty dollars. These
actions are automatically transcribed into a script in Mercury Interactive’s Test
Script Language (TSL).

Creating UNIX-based GUI Vuser Scripts


VXRunner is a complete development environment for creating, editing, and
debugging UNIX-based GUI Vuser scripts. VXRunner incorporates a Virtual User
Development Environment (VUDE). The VUDE is a completely independent
environment that runs in a separate window on your display, and provides all of the
benefits offered by Mercury Interactive’s Virtual X Server. In this way you can
develop Vuser scripts in the same environment in which you run them.

Creating Vuser Scripts Chapter 26, page 443


GUI Vuser Scripts • Developing GUI Vuser Scripts

In

Find

The Virtual User Development Environment contains VXRunner, an enhanced


version of XRunner, Mercury Interactive’s single-user testing tool. In addition to all
of the basic test development tools such as recording,
programming, and debugging, VXRunner also supports functions designed
especially for multi-user testing.

Creating Vuser Scripts Chapter 26, page 444


GUI Vuser Scripts • Developing GUI Vuser Scripts

Measuring Server Performance: Transactions


You define transactions to measure the performance of the server. Each
transactions transaction measures the time it takes for the server to respond to specified Vuser
requests. These requests can be simple tasks such as waiting for a response for a
single query, or complex tasks, such as submitting several queries and generating
a report.

To measure a transaction, you insert LoadRunner functions to mark the beginning


and end of a task. Within a script, you can mark an unlimited number of
transactions for analysis, each with a different name, and starting and ending in Find
different places.
?
During scenario execution, LoadRunner measures the time that it takes to perform
each transaction. For instance, you could define a transaction to measure the time
it takes for a bank server to process a Vuser’s request to view the balance of an
account. After the scenario run, you analyze the server’s performance per
transaction using LoadRunner’s graphs and reports.

Once you have defined a transaction, you use it to measure how the server
performs under different loads. For example, you can measure how the server
performs under the load of a single user, a hundred users, or a thousand users.
While the scenario runs, LoadRunner accumulates performance data for the
transactions. Later, you use this information to generate performance analysis
reports and graphs.

Creating Vuser Scripts Chapter 26, page 445


GUI Vuser Scripts • Developing GUI Vuser Scripts

To mark the start of a LoadRunner transaction:


• Insert a start_transaction statement into the Vuser script.
In

To mark the end of a transaction:


• Insert a end_transaction statement into the Vuser script.

For the syntax of the start_transaction and end_transaction functions, refer to


the TSL Online Reference (available from the WinRunner Help menu) or the
Creating GUI Virtual User Scripts (UNIX) guide.
Find

Creating Vuser Scripts Chapter 26, page 446


GUI Vuser Scripts • Developing GUI Vuser Scripts

Generating Heavy User Load: Rendezvous Points


In order to emulate heavy user load and measure server performance, you
rendezvous synchronize Vusers to perform a query at exactly the same moment. You ensure
points
that multiple Vusers act simultaneously by creating a meeting place, known as a
rendezvous point. When a Vuser arrives at the rendezvous point, it is held by the
Controller until all Vusers participating in the rendezvous arrive. When the
rendezvous conditions are met, the Vusers are released by the Controller.

You designate the meeting place by inserting a rendezvous point into your Vuser Find
script. When a Vuser executes a script and encounters the rendezvous point, script
execution is paused and the Vuser waits for permission from the Controller to ?
continue. After the Vuser is released from the rendezvous, it performs the next task
in the script.

For example, to generate peak load on a bank server, you could insert rendezvous
points into the Vuser scripts to instruct all the Vusers to simultaneously deposit
cash into their accounts.

To insert a rendezvous point:


• Insert a rendezvous statement into the Vuser script.

For the syntax of the rendezvous function, refer to the TSL Online Reference
(available from the WinRunner Help menu) or the Creating GUI Virtual User
Scripts (UNIX) guide.

Creating Vuser Scripts Chapter 26, page 447


GUI Vuser Scripts • Developing GUI Vuser Scripts

Understanding GUI Vuser Scripts


In

GUI Vuser scripts are written in TSL—Mercury Interactive’s Test Script Language.
TSL is a C-like programming language that is high-level and easy to use. It
combines the power and flexibility of a conventional programming language with
functions designed specifically for testing. For additional information about TSL,
refer to the TSL Online Reference.

This section presents a simple Vuser script, created in WinRunner. Note that this
script will not work on a Unix machine. The script starts an ATM application Find
(mratm.exe), enters an account number, deposits fifty dollars, and then closes the
application. ?
The first section of the script starts an application and moves it to a new location
on the screen. The system function starts the ATM application. The win_move
function moves the ATM application to a specified location on the screen.

# Initialize and invoke ATM client application.


system ( "mratm.exe" );
win_move ( "Mercury ATM", 325, 0 );

Creating Vuser Scripts Chapter 26, page 448


GUI Vuser Scripts • Developing GUI Vuser Scripts

Next, the Vuser enters an account number into the ATM. The set_window function
activates the ATM window. The edit_set function instructs the Vuser to enter the
account number into the ATM’s account field.

# Type in account number in the Account field.


account = 100;
set_window ( "Mercury ATM" );
edit_set ( "Account", account );

After entering the account number, the Vuser enters the amount it wants to deposit
and presses the deposit button. The edit_set function enters the amount to be Find
deposited in the amount field. The button_press function tells the Vuser to press
the ATM’s Deposit button. ?
# Enter the amount to be deposited in the amount field.
amount = 50;
set_window ( "Mercury ATM" );
edit_set ( "Amount", amount );
# Press the Deposit button.
button_press ( "Deposit" );

The final section of the test tells the Vuser to close the ATM application. The
menu_select_item function selects the Exit command from the File menu.

# Close client application.


menu_select_item ( "File; Exit" );

Creating Vuser Scripts Chapter 26, page 449


GUI Vuser Scripts • Developing GUI Vuser Scripts

Using LoadRunner Functions in GUI Vuser Scripts


In

This section lists the LoadRunner functions that you can use to enhance your GUI
Vuser scripts. For syntax and examples of the functions, refer to the sections that
follow, the TSL Online Reference (available from the WinRunner Help menu) or
the Creating GUI Virtual User Scripts (UNIX) guide.

declare_rendezvous Declares a rendezvous.


declare_transaction Declares a transaction.
Find
end_transaction Marks the end of a transaction for performance
analysis.
?
error_message Sends an error message to the Controller.
get_host_name Returns the name of a host.
get_master_host_name Returns the name of the Controller host.
lr_whoami Returns information about the Vuser executing
the script.
output_message Sends a message to the Controller.
rendezvous Sets a rendezvous point in a Vuser script.
start_transaction Marks the beginning of a transaction for
performance analysis.
user_data_point Records a user-defined data sample.

Creating Vuser Scripts Chapter 26, page 450


GUI Vuser Scripts • Developing GUI Vuser Scripts

Sending Messages to the Controller


When you run a scenario, the Controller’s Output window displays valuable
information about script execution. In addition to the messages automatically sent
by WinRunner and VXRunner, you can include statements in each script that send
error and notification messages to the Controller. For example, you could insert a
message that displays the current state of an application. After scenario execution,
you can save these messages to a file.

The error_message function sends an error message to the Controller’s Output


Find
window. The syntax of this function is:

error_message ( message );
?
where message is a text string. In the following example, the Vuser script sends a
message when a fatal error occurs during script execution.

if ( fatal_error < 0 ){
mess = sprintf ( "fatal error - Exiting." );
error_message ( mess );
texit (1);
}

Creating Vuser Scripts Chapter 26, page 451


GUI Vuser Scripts • Developing GUI Vuser Scripts

The output_message function is used to send a special notification that is not an


error message. The syntax of this function is: In

output_message ( message );

where message is a text string.

For the further information on the error_message and the output_message


functions, refer to the TSL Online Reference (available from the WinRunner Help
menu) or the Creating GUI Virtual User Scripts (UNIX) guide.
Find

Creating Vuser Scripts Chapter 26, page 452


GUI Vuser Scripts • Developing GUI Vuser Scripts

Obtaining Information about Vusers and Hosts


During scenario execution, you can obtain the identity of:

• the Vusers performing a task at a particular moment in the scenario


• the host executing a script
• the machine running the Controller

For example, you could program statements into a Vuser script to return the ID of
each active Vuser currently using an application, and print this information to a file. Find

The following functions obtain information about Vusers and hosts: ?


lr_whoami returns the name of a Vuser and the Vuser group
it belongs to.
get_host_name returns the name of the machine executing the
script.
get_master_host_name returns the name of the machine running the
Controller.

Creating Vuser Scripts Chapter 26, page 453


GUI Vuser Scripts • Developing GUI Vuser Scripts

In the following example, the get_host_name function returns the name of the
host currently running the script. The print statement saves the information to a In

file.

my_host_name = get_host_name();
print( "my local host name is:" & my_host_name ) > vuser_file;

For more information about these functions, refer to the TSL Online Reference
(available from the WinRunner Help menu) or the Creating GUI Virtual User
Scripts (UNIX) guide. Find

Creating Vuser Scripts Chapter 26, page 454


0

Appendixes

Find

Creating Vuser Scripts 455


Configuring VuGen
A
Configuring VuGen

By setting variation the appropriate variables in vugen.ini, you can customize the
code generated by VuGen for database Vuser scripts. The vugen.ini file is located
in your Windows directory.

The customization applies to the following areas:

• Automatic Transactions
• Think Time
Find
• C Compiler
• Function Splitting ?
• Line Formatting
• Progress Bar Settings
• Script Comments
• Error Handling
• Translation Table
• Excluding Sockets
All of the customization settings are stored in the [LRDCodeGeneration] section of
the vugen.ini file unless otherwise stated. If the specified section does not exist in
the vugen.ini file, you need to add it manually. For example, you could add a line to
start the code generation section: [LRDCodeGeneration].

Creating Vuser Scripts 456


Configuring VuGen

Automatic Transactions
You can instruct VuGen to insert a transaction around every lrd_exec and
lrd_fetch function that it inserts into a script.

AutoLrExecTrans=OFF/ON
AutoLrFetchTrans=OFF/ON

When these options are set to ON, VuGen inserts an lr_start_transaction and
lr_end_transaction statement around every lrd_exec or lrd_fetch function. The Find
default value is OFF.
?
Think Time
VuGen automatically records the operator’s think time. You can set a threshold
level, below which the recorded think time will be ignored.

LrThinkTimeThreshold=5

If the recorded think time exceeds the threshold level, VuGen places an
lr_think_time statement before LRD functions. If the recorded think time is below
the threshold level, an lr_think_time statement is not generated. The default
value is five seconds.

Creating Vuser Scripts 457


Configuring VuGen

C Compiler
VuGen generates a script with LRD functions. You can compile the script using
VuGen’s code interpreter, or a standard C compiler.

CompileC=NO/YES

To compile the script using a standard compiler, set CompileC to YES. The default
value is NO.
Find
Function Splitting
?
To optimize compilation time, VuGen allows you to set the script size. If the script’s
Action section exceeds the maximum size, the function is split into several sections,
with no section greater than MaxFunctionLines.

MaxFunctionLines=500 (a positive integer value)


GenActionsContProto=NO/YES

The default value is five hundred lines. VuGen generates a function prototype in
vdf.h for each of the "continued" functions when the GenActionsContProto variable
is set to YES. You do not have to set this variable when using the VuGen interpreter.
The default value for GenActionsContProto is NO.

Creating Vuser Scripts 458


Configuring VuGen

Line Formatting
You can specify the maximum length of a line in a generated Vuser script.

MaxLineLen=80 /*(a positive integer value)*/

The available range for MaxLineLen is 60 to 255. The default value is 80.

Progress Bar Settings


Find
You can set the rate at which the code generation progress bar is updated.
?
ProgressBarGranularity=100 /*(a positive integer value)*/

The lower the specified granularity, the higher the update frequency. The default
value is 100.

Script Comments
You can instruct VuGen to insert comments into recorded scripts, describing the
lrd_stmt option values.

GenStmtOptionsComments=NO/YES

The default value is NO.

Creating Vuser Scripts 459


Configuring VuGen

Error Handling
You can instruct VuGen to ignore database errors that occur while recording by
setting the following entry to YES:

IgnoreApplicationErrors=NO/YES

By default, this entry is set to NO. Therefore, if database errors occur during
execution, the script execution would be terminated.
Find
Translation Table
?
The Translation Table setting lets you set the format for recording sessions. This
applies to users running on mainframe machines or AS/400 servers. Both the
server and client machines determine the format of the data from translation
tables installed on your system. In the following example the names of the
translation table files are 002501b5.tbl and 01b50025.tbl.

[TranslationTable]
ServerFormat=0025
ClientFormat=01b5

The translation tables are located in the ebcdic directory under the LoadRunner
installation directory. If your system uses different transaltion tables, copy them to
the ebcdic directory.

Creating Vuser Scripts 460


Configuring VuGen

Excluding Sockets
For WinSock Vusers, VuGen supports the Exclude Socket feature, allowing you to
exclude a specific socket from your recording session. To exclude all actions on a
socket from your script, you specify the socket address in the ExcludeSock
section. The available formats are:

Value Meaning

host:port Exclude only the specified port on the specified host.


Find
host Exclude all ports for the specifed host

:port Exclude the specified port number on the local host. ?


*:port Exclude the specified port number on all hosts.

You can exclude multiple hosts and ports. For each subsequent excluded socket,
increment the index number of the SocketAddress parameter.
To exclude the specifeid socket actions from the recording log file, ws.log, set the
LogExcludeMsgFlag to no.

[ExcludeSock]
SocketAddress1=frodo:23
SocketAddress2=:80
SocketAddress3=tears
LogExcludeMsgFlag=no

Creating Vuser Scripts 461


Configuring VuGen

If you omit this flag, or if you set it to yes, VuGen logs the actions of the socket in
the ws.log file, but does not include it in the Vuser script. The actions of the
excluded socket are preceded by “excluded” in the log file.

Exclude : /* recv(): 15 bytes were received from socket 116 using flags 0 */

Find

Creating Vuser Scripts 462


Calling External Functions

B
Calling External Functions

When working with VuGen, you can call functions that are defined in external DLLs.
By calling external functions from your script, you can reduce the memory footprint
of your script and the overall run-time.

To call the external function, you load the DLL in which the function is defined.

You can load a DLL: Find

• locally—for one script, using the lr_load_dll function ?


• globally—for all scripts, by adding statements to the vugen.dat file

Creating Vuser Scripts 463


Calling External Functions

Loading a DLL—Locally
You use the lr_load_dll function to load the DLL in your Vuser script. Once the DLL
is loaded, you can call any function defined within the DLL, without having to
declare it in your script.

To call a function defined in a DLL:


1 Use the lr_load_dll function to load the DLL at the beginning of your script. Place
the statement at the beginning of the vuser_init section. lr_load_dll replaces the
ci_load_dll function. Find

Use the following syntax:


?
lr_load_dll(library_name);

Note that for UNIX platforms, DLLs are known as shared libraries. The extension
of the libraries is platform dependent.
2 Call the function defined in the DLL in the appropriate place within your script.

Creating Vuser Scripts 464


Calling External Functions
In the following example, the insert_vals function, defined in orac1.dll, is called,
after the creation of the Test_1 table.

int LR_FUNC Actions(LR_PARAM p)


{
lr_load_dll("orac1.dll");

lrd_stmt(Csr1, "create table Test_1 (name char(15), id integer)\n", -1,


1 /*Deferred*/, 1 /*Dflt Ora Ver*/, 0);
lrd_exec(Csr1, 0, 0, 0, 0, 0);

/* Call the insert_vals function to insert values into the table. */


insert_vals(); Find

lrd_stmt(Csr1, "select * from Test_1\n", -1, 1 /*Deferred*/, 1 /*Dflt Ora Ver*/, ?


0);
lrd_bind_col(Csr1, 1, &NAME_D11, 0, 0);
lrd_bind_col(Csr1, 2, &ID_D12, 0, 0);
lrd_exec(Csr1, 0, 0, 0, 0, 0);
lrd_fetch(Csr1, -4, 15, 0, PrintRow14, 0);
...

Note: You can specify a full path for the DLL. If you do not specify a path,
lr_load_library searches for the DLL using the standard sequence used by the
C++ function, LoadLibrary on Windows platforms. On UNIX platforms you can set
the LD_LIBRARY_PATH environment variable (or the platform equivalent). The
lr_load_dll function uses the same search rules as dlopen. For more information,
see the man pages for dlopen or its equivalent.

Creating Vuser Scripts 465


Calling External Functions

Loading a DLL—Globally
You can load a DLL globally, to make its functions available to all your Vuser scripts.
Once the DLL is loaded, you can call any function defined within the DLL, without
having to declare it in your script.

To call a function defined in a DLL:


1 Add a list of the DLLs you want to load to the appropriate section of the vugen.dat
file, located in the LoadRunner/dat directory.
Use the following syntax: Find

PLATFORM_DLLS=my_dll1.dll, my_dll2.dll, ... ?

Creating Vuser Scripts 466


Calling External Functions

For example, to load DLLs for Winsocket Vusers on an NT platform, add the
following statement to the vugen.dat file:

[winsock]
DLL=insp_gen.dll
CFG_TAB_DLL=
ExtraSectionsExt=.ws
32BitRecord=TRUE
16BitRecord=TRUE
Insp32DLL=vugsck32.dll
Find
Insp16DLL=vugsock.dll
TemplateDir=winsock
WIN16=wsdrv16.exe ?
WINNT=wsdrv32.exe
WIN95=wsdrv32.exe
WINNT_DLLS=user_dll1.dll, user_dll2.dll, ...

2 Call the function defined in the DLL in the appropriate place within your script.

Creating Vuser Scripts 467


Appendixes
Programming Scripts on UNIX Platforms

C
Programming Scripts on UNIX Platforms
In

LoadRunner users on UNIX platforms can create Vuser scripts through


programming. To create a script through programming, you use a LoadRunner
template.

This appendix describes: Find

• Generating Templates
?
• Programming Vuser Actions into a Script
• Configuring Vuser Run-Time Settings
• Defining Transactions and Rendezvous Points
• Compiling Scripts

Creating Vuser Scripts Chapter C, page 468


Appendixes • Programming Scripts on UNIX Platforms

About Programming Vuser Scripts to Run on UNIX Platforms


There are two ways to create Vuser scripts that run on UNIX platforms: by using
VuGen, or by programming.

VuGen You can use VuGen to create Vuser scripts that run on
UNIX platforms. You record your application in a Windows
environment and run it in UNIX—recording is not supported
on UNIX (excluding UNIX RTE and GUI Vusers).
programming Users working in UNIX-only environments can program Find
Vuser scripts. Scripts can be programmed in C or C++ and
they must be compiled into a dynamic library. ?
This appendix describes how to develop a Vuser script by programming.

To create a script through programming, you can use a LoadRunner template as a


basis for a larger Vuser script. The template provides:

• correct program structure


• LoadRunner API calls
• source code and makefiles for creating a dynamic library
After creating a basic script from a template, you can enhance the script to provide
run-time Vuser information and statistics. For more information, see Chapter 4,
Enhancing Vuser Scripts.

Creating Vuser Scripts Chapter C, page 469


Appendixes • Programming Scripts on UNIX Platforms

Generating Templates
LoadRunner includes a utility that copies a template into your working directory.
The utility is called mkdbtest, and is located in $M_LROOT/bin. You run the utility In

by typing:

mkdbtest name

When you run mkdbtest, it creates a directory called name, which contains the
template file, name.c. For example, if you type
Find
mkdbtest test1
?
mkdbtest creates a directory called test1, which contains the template script,
test1.c.

When you run the mkdbtest utility, a directory is created containing four files test.c
, test.usr, test.cfg and Makefile, where test is the test name you specified for
mkdbtest.

test.c

test.usr
Template Files
test.cfg
makefile

Creating Vuser Scripts Chapter C, page 470


Appendixes • Programming Scripts on UNIX Platforms

Programming Vuser Actions into a Script


The Vuser script files, test.c, test.usr, and test.cfg, can be customized for your
Vuser.

You program the actual Vuser actions into the test.c file. This file has the required
structure for a programmed Vuser script. The Vuser script contains three sections:
vuser_init, Actions, and vuser_end.

Find

Creating Vuser Scripts Chapter C, page 471


Appendixes • Programming Scripts on UNIX Platforms

Note that the template defines extern C for users of C++. This definition is required
for all C++ users, to ensure that none of the exported functions are inadvertantly In

modified.

#include “lrun.h”
#if defined(__cplusplus) || defined(cplusplus) extern “C”
{
#endif
int LR_FUNC vuser_init(LR_PARAM p)
{ Find
lr_message(“vuser_init done\n”);

}
return 0; ?
int Actions(LR_PARAM p)
{
lr_message(“Actions done\n”);
return 0;
}
int vuser_end(LR_PARAM p)
{
lr_message(“vuser_end done\n”);
return 0 ;
}
#if defined(__cplusplus) || defined(cplusplus) }
#endif

Creating Vuser Scripts Chapter C, page 472


Appendixes • Programming Scripts on UNIX Platforms

You program Vuser actions directly into the empty script, before the lr_message
function of each section.

The vuser_init section is executed first, during initialization. In this section, include
the connection information and the logon procedure. The vuser_init section is only
performed once each time you run the script.

The Actions section is executed after the initialization. In this section, include the
actual operations performed by the Vuser. You can set up the Vuser to repeat the
Actions section (in the test.cfg file). Find

The vuser_end section is executed last, after the all of the Vuser’s actions. In this
section, include the clean-up and logoff procedures. The vuser_end section is only
?
performed once each time you run the script.

Note: LoadRunner controls the Vuser by sending SIGHUP, SIGUSR1, and


SIGUSR2 UNIX signals. Do not use these signals in your Vuser programs.

Creating Vuser Scripts Chapter C, page 473


Appendixes • Programming Scripts on UNIX Platforms

Configuring Vuser Run-Time Settings


In

To configure Vuser run-time settings, you modify the test.cfg file created with the
template. These run-time settings correspond to VuGen’s run-time settings. ( see
Configuring Run-Time Settings on page 86.) The test.cfg contains four sections
General, Think Time, Iterations, and Log.

General Options
There is one General options for Unix Vuser scripts: Find

• ContinueOnError instructs the Vuser to continue when an error occurs. To


?
activate the option, specify 1. To disable the option, specify 0.
In the following example, the Vuser will continue on an error.

[General]
ContinueOnError=1

Creating Vuser Scripts Chapter C, page 474


Appendixes • Programming Scripts on UNIX Platforms

Think Time Options


You can set the think time options to control how the Vuser uses think time during
script execution.

[ThinkTime]
Options=NOTHINK
Factor=1
LimitFlag=0
Limit=1

Find
You set the parameters Options, Factor, LimitFlag, and Limit parameters according
to the following chart.
?
Option Options Factor LimitFlag Limit

Ignore think
NOTHINK N/A N/A N/A
time

Use recorded RECORDE


1.000 N/A N/A
think time D

Multiply the
recorded N/A N/A
MULTIPLY number
think time
by...

Limit the RECORDE


number (for value in
recorded D/ 1
MULTIPLY) seconds
think time to... MULTIPLY

Creating Vuser Scripts Chapter C, page 475


Appendixes • Programming Scripts on UNIX Platforms

To limit the think time used during execution, set the LimitFlag variable to 1 and
specify the think time Limit, in seconds. In

In the following example, the settings tell the Vuser to use the recorded think time,
but to limit it to 30 seconds.

[ThinkTime]
Options=RECORDED
Factor=1
LimitFlag=1 Find
Limit=30
?

Creating Vuser Scripts Chapter C, page 476


Appendixes • Programming Scripts on UNIX Platforms

Log Options
You can set the log options to create a brief or detailed log file for the script’s
execution.

[Log]
LogOptions=LogBrief
MsgClassData=0
MsgClassParameters=0
MsgClassFull=0
Find

Creating Vuser Scripts Chapter C, page 477


Appendixes • Programming Scripts on UNIX Platforms

You set the parameters LogOptions, MsGClassData, MsgClassParameters, and


MsgClassFull variables according to the following chart. In

MsgClassD MsgClassParam MsgClassF


Logging Type LogOptions
ata eters ull

Disable LogDisable
N/A N/A N/A
Logging d

Standard Log LogBrief N/A N/A N/A


Find
Parameter
LogExtende
Substitution 0 1 0
(only)
d
?
Data
LogExtende
Returned by 1 0 0
d
Server (only)

Advanced LogExtende
0 0 1
Trace (only) d

LogExtende
All 1 1 1
d

Creating Vuser Scripts Chapter C, page 478


Appendixes • Programming Scripts on UNIX Platforms

In the following example, the settings tell the Vuser to log all data returned by the
server and the parameters used for substitution.

[Log]
LogOptions=LogExtended
MsgClassData=1
MsgClassParameters=1
MsgClassFull=0

Find

Creating Vuser Scripts Chapter C, page 479


Appendixes • Programming Scripts on UNIX Platforms

Iterations
You can set the Iteration options to perform multiple iterations and control the
In

pacing between the iterations.

[Iterations]
NumOfIterations=5
IterationPace=IterationASAP
StartEvery=60
RandomMin=60
RandomMax=90 Find

To instruct the Vuser to perform multiple iterations of the Actions section, set
?
NumOfIterations to the appropriate value.

Creating Vuser Scripts Chapter C, page 480


Appendixes • Programming Scripts on UNIX Platforms

To control the pacing between the iterations, set the IterationPace variable
according to the following chart.

RandomMi RandomM
Pacing IterationPace StartEvery
n ax

As soon as
IterationASAP N/A N/A N/A
possible

Wait between
value in
Iterations for IterationMinWait N/A N/A
seconds
a set time Find
Wait between
iterations for
IterationRandomWait N/A
value in value in ?
a random seconds seconds
time

In the following example, the settings tell the Vuser to perform six iterations, while
waiting a random number of seconds between iterations. The range of the random
number is from 60 to 90 seconds.

[Iterations]
NumOfIterations=6
IterationPace=IterationRandomWait
StartEvery=50
RandomMin=60
RandomMax=90

Creating Vuser Scripts Chapter C, page 481


Appendixes • Programming Scripts on UNIX Platforms

Defining Transactions and Rendezvous Points


When programming a Vuser script without VuGen, you must manually configure the In

Vuser file in order to enable transactions and rendezvous. The configuration


settings are listed in the test.usr file.

[General]
Type=any
DefaultCfg=Test.cfg
BinVuser=libtest.libsuffix
RunType=Binary Find

[Actions] ?
vuser_init=
Actions=
vuser_end=

[Transactions]
transaction1=

[Rendezvous]
Meeting=

Each transaction and rendezvous must be defined in the usr file. Add the
transaction name to the Transactions section (followed by an “=”). Add each
rendezvous name to the Rendezvous section (followed by an “=”). If the sections
are not present, add them to the usr file as shown above.

Creating Vuser Scripts Chapter C, page 482


Appendixes • Programming Scripts on UNIX Platforms

Compiling Scripts
After you modify the template, you compile it with the appropriate Makefile in the
script’s directory. Note that for C++ compiling, you must use the native compiler (not
gnu). The compiler creates a dynamic library called:

• libtest.so (solaris)
• libtest.a (AIX)
• libtest.sl (HP)
Find
You can modify the Makefile and assign additional compiler flags and libraries by
modifying the appropriate sections. ?
If you are working with a general template, you must include your application’s
libraries and header files. For example, if your application uses a library called
testlib, include it in the LIBS section.

LIBS =\
-testlib \
-lLrun50 \
-lm

After you modify the makefile, type Make from the command line in the working
directory to create the dynamic library files for the Vuser script.

Creating Vuser Scripts Chapter C, page 483


Appendixes • Programming Scripts on UNIX Platforms

You can now run the script from the LoadRunner Controller. The Vuser script is the
test.usr file located in the script’s directory. For information on how to integrate a In

Vuser script into a LoadRunner scenario, refer to the appropriate LoadRunner


Controller User’s Guide

Before integrating a script into a LoadRunner scenario, you should run it from the
command line to verify that it works properly.

To run a Vuser script from the UNIX command line, type:


Find
mdrv -usr ‘pwd’ test.usr
?
where pwd is the full path to the directory containing the Vuser script and test.usr
is the name of the Vuser file. Check that your script communicates with the server
and performs all the required tasks.

Creating Vuser Scripts Chapter C, page 484


Index
0
Index

A C
Animated mode 112 C functions
ANSI C support 52 enhancing scripts 20, 52
APPC Vuser scripts using in Vuser scripts 20, 52
data buffers 243 C support 52
data files 245 Command line arguments 50
developing 234–246 Comments
getting started 236 inserting automatically 459
understanding 241 inserting into Vuser scripts 45
using LRA functions 238 Compiler flags 483
Find
viewing data files 242 Compiling Vuser scripts 483
ASCII format 229 Configuring Web Run Time Settings 336–348
Automatic transactions Connecting to To TestDirector server 127 ?
Database Vuser scripts 457 Continue on error 100
Web Vuser scripts 345 Controller
defined 434
Output window 451
B
sending messages to 451
Baan Vusers sending output messages 452
creating scripts 397–410 Correlating statements
functions 400 in Database Vuser scripts 161–174
think time 410 in TUXEDO Vuser scripts 201 Click a
Breakpoints 114 in Windows Sockets Vuser scripts 223 page
Brief log run-time setting 96 CtLib
logging server messages 98
result set errors 159

A B C D E F GH I J K L MNO P QR S T U V WX Y Z
Creating Vuser Scripts 485
Index

D Error handling 100


modifying 156–158
Data files 72
severity levels 156
Database Vuser scripts
vugen.ini 460
developing 136–160
error_message function 450, 451
error codes 154
Exception handling for Baan Vusers 411
getting started 141
External functions 463
handling errors 156
return codes 154
row information 152 F
using LRD functions 143 Fetching data 152
viewing grids 150 Field Demarcation Characters 282
Date/Time, parameter values 67 Find
Full run-time trace 96
Debug messages 97, 105, 106, 107, 108 Function
Debugging synchronization 403
?
animated run 112 Functions
step by step run 114 APPC 238
using breakpoints 114 Baan Vuser 400
declare_rendezvous function 450 Database 143
declare_transaction function 450 external, user defined 463
Delimiters, in data tables 73 GUI Vuser 450
DLLs, calling from a Vuser script 463 Java Vuser 418
TE 254
E TUXEDO 191 Click a
Ebcdic translation 232
Web 322 page
Windows Sockets 213
end_transaction function 450
Error codes 154

A B C D E F GH I J K L MNO P QR S T U V WX Y Z
Creating Vuser Scripts 486
Index

G L
get_host_name function 450, 453 libc functions
get_master_host_name function 450, 453 calling from Vuser program 53
Grids Line formatting 459, 460
hiding 116 Loading DLLs
viewing 150 globally 466
Group name, parameter values 63 locally 464
GUI Vuser scripts overview 463
developing 432–454 Log run-time settings 95, 477
getting started 441 lr_end_transaction function 42, 318, 323
overview 433 lr_get_attrib_double function 50
using GUI functions 450 lr_get_attrib_long function 50 Find
lr_get_attrib_string function 47
I
lr_get_host_name function 47 ?
lr_get_master_host_name function 47
Iteration settings 91 lr_log_message function 49
lr_rendezvous function 44, 318, 323
J lr_start_transaction function 41, 318, 323
lr_whoami function 47, 450, 453
Java Vusers LRA (APPC) functions 238
creating scripts 414–430 LRD (Database) functions 143
functions 418 LRD_ON_ERROR_CONTINUE 157
LRD_ON_FETCHABLE_SET_ERR_CONT Click a
K 160 page
lrd_stmt function 459
Keyboard mapping 256
LRS functions 213
LRT functions 191

A B C D E F GH I J K L MNO P QR S T U V WX Y Z
Creating Vuser Scripts 487
Index

M Parameters
brace style 84
Messages
data files 72
error 48, 451
date/time 67
sending 451
defining 55
sending to output 48
global directory 85
mkdbtmpl script 470
in TUXEDO scripts 199
Multithreading 104
maintaining 82
options 83
O random values 68
Offset, determining 229 restoring original value 82
Options unique ID 70 Find
parameters 83 Privileges 134
replay 112 Programming Vuser actions 471
Progress bar settings 459, 461
?
Output window 48
output_message function 450, 452
Q
P Queries, correlating for Database Vusers
Parameterization 54–82 161–174

R
Random number, parameter values 68 Click a
Random update method 78, 80 page
Reading Text 302–305

A B C D E F GH I J K L MNO P QR S T U V WX Y Z
Creating Vuser Scripts 488
Index

Recording Vuser scripts Run-Time settings


Database 136–160 configuring manually 474
RTE 259–283 General 99
TUXEDO 187–200 HTTP Settings (Web only) 341
using QuickTest 326–335 Iterations 91
using VuGen 24–?? Log 93
Web 326–335 overview 86
Window Sockets 209–223 Performance Settings (Web only) 339
rendezvous function 450 Think time 89
Rendezvous points
defined 43, 447
S
inserting 44, 334, 335, 447 Find
Return codes 154 Script Generator, see Vuser Script Generator
Searching for text on the screen 304
Row information, in Database Vuser scripts
152 Sending messages 451
?
RTE Vuser scripts Sequential, parameter assignment 77
overview 249 Server timeout 346
steps in creating 252 Settings, see run-time settings
using TE functions 254 start_transaction function 450
Running Vuser scripts Synchronization functions 403
animated mode 112 Synchronizing Vusers
step by step 114 overview 285
using QuickTest 349–354 using rendezvous points 43, 334, 447
using VuGen 109–122 waiting for the cursor to appear 294 Click a
waiting for the terminal to be silent 300 page

A B C D E F GH I J K L MNO P QR S T U V WX Y Z
Creating Vuser Scripts 489
Index

System variables TestDirector integration 123–134


TE_SILENT_MILLI 297 connecting to TestDirector server 127
TE_SILENT_SEC 297 opening scripts 130
TE_SILENT_TIMEOUT 297 saving scripts 132
Text
reading text from the screen 305
T
searching for text on the screen 304
TE (RTE) functions 254 Think time
TE_find_text function 304 function 22
TE_get_cursor_position function 305 run-time settings 89
TE_get_line_attribute function 305 threshold 457
TE_get_text_line function 305 Web Vusers 345 Find
TE_SILENT_MILLI system variable 297 Timeout
TE_SILENT_SEC system variable 297
TE_SILENT_TIMEOUT system variable 297
Baan Vusers 412
Web Vusers 346
?
TE_type function 274, 275 Transactions
TE_typing_style function 274, 277 automatic, for LRD functions 457
TE_wait_cursor function 294 automatic, for Web Vuser scripts 345
TE_wait_silent function 301 defined 445
TE_wait_sync function 287 inserting 40, 331
TE_wait_text function 288, 294, 296 Web Vusers 345
Templates Translation table settings 460
for programming 470 TSL, defined 443, 448
Test plan tree (TestDirector) 125 TUXEDO Vuser scripts Click a
Test Script Language, see TSL log file 200 page
TestDirector recording 187–200
Test plan tree 125 using LRT (TUXEDO) functions 191
Typing style 277

A B C D E F GH I J K L MNO P QR S T U V WX Y Z
Creating Vuser Scripts 490
Index

U Vuser functions
GUI 450
Unique ID, parameter values 70
LRA (APPC) 238
Unique update method 79
LRD (Database) 143
Unique, parameter assignment 79
LRS (Windows Sockets) 213
UNIX command line 117
LRT (TUXEDO) 191
Update methods 76, 81
TE (RTE) 254
User privileges 134
Vuser Generator, see Vuser Script Generator
User types 134
Vuser ID, parameter values 65
user_data_point function 450
Vuser information, obtaining 47
Vuser Script Generator, see VuGen
V Vuser scripts 4 Find
Verification, see reading text adding functions 38–51
Virtual User 2 compiling 483
creating on UNIX 468–484
?
Virtual X Server 440
Virtual XRunner, see VXRunner creation steps 313
VuGen developing 443
configuring 456 enhancing 38–51
introducing 13–23 inserting comments 45
parameters 54–82 inserting rendezvous points 43, 44
recording Vuser scripts 24–37 inserting transactions 40
toolbar 30 maximum length of line 459, 460
Vugen.ini file 456 obtaining Vuser information 453
opening from TestDirector 130 Click a
Vuser Development Environment 444
programming 468–484 page
replaying on UNIX 117
running 109–122, 349–354
sample 448

A B C D E F GH I J K L MNO P QR S T U V WX Y Z
Creating Vuser Scripts 491
Index

sending messages to the controller 451 Windows Sockets Vuser scripts


size 458 getting started 211
TSL 443 understanding 216
verifying 484 using LRS(Windows Sockets) functions
Vuser tests, see Vuser scripts 213
Vusers WinRunner
GUI Vusers 433 automated GUI testing tool 433
run-time settings 86 creating GUI Vuser scripts 443
synchronizing 284, 285 editing scripts 441
Vuser technology 438 Vuser technology 448
VXRunner 440 Winsock
data buffers 219 Find
data files 221
W
Waiting for the terminal to stabilize 300
excluding sockets 461
recording 209–223
?
Web run-time settings 336–348 viewing data files 217
Web Vuser scripts
control icons 318
introducing 307–325 X
modifying 355–382 X SYSTEM message 287
recording 326–335
running 349–354
service icons 319
step icons 316 Click a
web_image function 317 page
web_link function 317
web_submit_form function 317
web_url function 317

A B C D E F GH I J K L MNO P QR S T U V WX Y Z
Creating Vuser Scripts 492
C-Interpreter Copyright Agreement
The Virtual User Generator generates standard C code which can be compiled with any ANSI C compiler. However, for the
convenience of our customers we have provided a C Interpreter for running the generated code, without charge. The cci
executable which is the front end of the interpreter is based on the freely available "lcc Retargetable C Compiler" by
Christopher Fraser and David Hanson, and is covered by the lcc Copyright included below. Any bugs in cci should be In

reported to Mercury Interactive. The author's copyright notice is below.


THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED WARRANTY. IN
PARTICULAR, NEITHER THE AUTHORS NOR MERCURY INTERACTIVE MAKE ANY REPRESENTATION OR
WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY
PARTICULAR PURPOSE.
The authors of this software are Christopher W. Fraser and David R. Hanson.
Copyright (c) 1991,1992,1993,1994,1995 by AT&T, Christopher W. Fraser, and David R. Hanson. All Rights Reserved.
Permission to use, copy, modify, and distribute this software for any purpose, subject to the provisions described below,
without fee is hereby granted, provided that this entire notice is included in all copies of any software that is or includes a Find
copy or modification of this software and in all copies of the supporting documentation for such software.
THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED WARRANTY. IN ?
PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND
CONCERNING THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
lcc is not public-domain software, shareware, and it is not protected by a `copyleft` agreement, like the code from the Free
Software Foundation. lcc is available free for your personal research and instructional use under the `fair use' provisions of
the copyright law. You may, however, redistribute the lcc in whole or in part provided you acknowledge its source and
include this COPYRIGHT file.
You may not sell lcc or any product derived from it in which it is a significant part of the value of the product. Using the lcc
front end to build a C syntax checker is an example of this kind of product.
You may use parts of lcc in products as long as you charge for only those components that are entirely your own and you
acknowledge the use of lcc clearly in all product documentation and distribution media. You must state clearly that your
product uses or is based on parts of lcc and that lcc is available free of charge. You must also request that bug reports on
your product be reported to you. Using the lcc front end to build a C compiler for the Motorola 88000 chip and charging for
and distributing only the 88000 code generator is an example of this kind of product. Using parts of lcc in other products is
more problematic. For example, using parts of lcc in a C++ compiler could save substantial time and effort and therefore
contribute significantly to the profitability of the product. This kind of use, or any use where others stand to make a profit
from what is primarily our work, is subject to negotiation.
Chris Fraser / cwf@research.att.comDavid Hanson / drh@cs.princeton.edu

Creating Vuser Scripts 493


LoadRunner—Creating Vuser Scripts—Version 5.0

© Copyright 1995-1998 by Mercury Interactive Corporation In

All rights reserved. All text and figures included in this publication are the exclusive property of Mercury
Interactive Corporation, and may not be copied, reproduced, or used in any way without the express permission
in writing of Mercury Interactive. Information in this document is subject to change without notice and does not
represent a commitment on the part of Mercury Interactive.

Patents pending.

WinRunner, XRunner, and LoadRunner are registered trademarks of Mercury Interactive Corporation.
TestSuite, Astra, Astra SiteManager, Astra SiteTest, RapidTest, TestDirector, QuickTest, Visual Testing, Find
WebTest, Action Tracker, Link Doctor, Change Viewer, Dynamic Scan, Fast Scan and Visual Web Display are
trademarks of Mercury Interactive Corporation. ?
This document also contains Registered Trademarks, Trademarks and Service Marks that are owned by their
respective companies or organizations. Mercury Interactive Corporation disclaims any responsibility for
specifying which marks are owned by which companies or organizations.

If you have any comments or suggestions regarding this document, please send them via e-mail to
documentation@mercury.co.il.

Mercury Interactive Corporation


1325 Borregas Avenue
Sunnyvale, CA 94089
Tel. (408)822-5200 (800) TEST-911
Fax. (408)822-5300
LRDBUG5.0/01

You might also like