You are on page 1of 303

TestComplete 7 Made Easy

by Lino Tadros - Falafel Software Inc.

Welcome to TestComplete 7 Made Easy, the new guide to


TestComplete 7, the award winning automated testing tool
from AutomatedQA Corp.

We hope you enjoy the book as much as we, at Falafel


Software, enjoyed creating it.
TestComplete 7 Made Easy

Copyright © 2009 AutomatedQA Corp. - 2.0 Release

All rights reserved. No parts of this work may be reproduced in any form or by any means - graphic, electronic, or
mechanical, including photocopying, recording, taping, or information storage and retrieval systems - without the
written permission of the publisher.

Products that are referred to in this document may be either trademarks and/or registered trademarks of the
respective owners. The publisher and the author make no claim to these trademarks.

While every precaution has been taken in the preparation of this document, the publisher and the author assume no
responsibility for errors or omissions, or for damages resulting from the use of information contained in this
document or from the use of programs and source code that may accompany it. In no event shall the publisher and
the author be liable for any loss of profit or any other commercial damage caused or alleged to have been caused
directly or indirectly by this document.

Printed: July 2009

Special thanks to:


Publisher
All the team members at AutomatedQA worldwide for creating a
AutomatedQA Corp.
magnificant piece of software in TestComplete 7. The authors also
Authors would lik e to thank the Falafel team members in Colorado, Texas
and California for their feedback , guidance and recommendations on
Alain "Lino" Tadros the subjects of the manual.
Steve Trefethen
Falafel would lik e to thank Mr. Derek Langone and Mr. Drew Wells
for their trust and belief in the quality of Falafel Software's work .
Technical Editors
Noel Rice Falafel would also lik e to thank Bobby Edgar, Adam Seeley, Andrew
Westergren, Ashley Steenbruggen, Gerry McManus, Jim
Drew Wells McDonough, Miles Kane, Nick Lord and of course the greatest Nick
Cover Designer Olivo for their continuous support and friendship to the entire Falafel
team.
Matt Kurvin
Team Coordinator Last but not least, thank you to all our families for their support and
Lino Tadros patience while we wrote the book

Production
Falafel Software Inc.
4 TestComplete 7 Made Easy

Table of Contents
Foreword 10

Part I Introduction 12
1 Introduction
...................................................................................................................................
to TestComplete 12
2 Who Should
...................................................................................................................................
Read this Book 13
3 How the
...................................................................................................................................
Book is Organized 13

Part II Keyword Testing 17


1 Objectives
................................................................................................................................... 17
2 Recording
...................................................................................................................................
Your First Test 17
3 Editing
...................................................................................................................................
a Keyword Test 20
4 Data Driven
...................................................................................................................................
Keyword Testing 24
5 Summary
................................................................................................................................... 34

Part III Overview of Testing and TestComplete 36


1 Objectives
................................................................................................................................... 36
2 Terminology
................................................................................................................................... 36
3 Types...................................................................................................................................
of Testing 36
4 Before
...................................................................................................................................
You Begin 37
5 Your Most
...................................................................................................................................
Important Test 39
6 Summary
................................................................................................................................... 40

Part IV TestComplete IDE 42


1 Objectives
................................................................................................................................... 42
2 Menus
...................................................................................................................................
and Toolbars 42
3 Panels
...................................................................................................................................
and Workspaces 44
Project Explorer.......................................................................................................................................................... 44
Object Brow ser .......................................................................................................................................................... 47
Process Tree.........................................................................................................................................................
Pane 48
Object Properties
.........................................................................................................................................................
Pane 50
Object Recognition
......................................................................................................................................................... 56
Introduction ......................................................................................................................................... 56
White-Box Applications ......................................................................................................................................... 57
Editor .......................................................................................................................................................... 59
Code Completion
......................................................................................................................................................... 59
Bookmarks......................................................................................................................................................... 60
Editor Options
......................................................................................................................................................... 61
Debugging......................................................................................................................................................... 63
Breakpoints ......................................................................................................................................... 63
Call Stack ......................................................................................................................................... 64
Locals ......................................................................................................................................... 65
Watch List ......................................................................................................................................... 66

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Contents 5

Visualizer .......................................................................................................................................................... 70
Objectives ......................................................................................................................................................... 70
Enabling the.........................................................................................................................................................
Visualizer 70
Working w .........................................................................................................................................................
ith Visualizer Images 71
4 Summary
................................................................................................................................... 73

Part V Projects and Suites 75


1 Objectives
................................................................................................................................... 75
2 Project
...................................................................................................................................
Anatomy 75
3 New Project
...................................................................................................................................
Wizard 79
4 Hands...................................................................................................................................
on Lab: Create a Simple Test 81
5 Summary
................................................................................................................................... 82

Part VI Project Items 84


1 Objectives
................................................................................................................................... 84
2 Project
...................................................................................................................................
Items 84
Tested Applications
.......................................................................................................................................................... 85
3 Summary
................................................................................................................................... 87

Part VII Test Log 89


1 Objective
................................................................................................................................... 89
2 Test Log
................................................................................................................................... 89
3 Emailing
...................................................................................................................................
Result 90
4 LockEvents
................................................................................................................................... 91
5 Summary
................................................................................................................................... 92

Part VIII Name Mapping 94


1 Objectives
................................................................................................................................... 94
2 Map to
...................................................................................................................................
Object 94
3 Highlight
...................................................................................................................................
Objects 99
4 Mapping
...................................................................................................................................
Dialog 101
5 Aliases
...................................................................................................................................
in Scripts 102
6 Summary
................................................................................................................................... 102

Part IX Unit Testing 104


1 Objectives
................................................................................................................................... 104
2 Supported
...................................................................................................................................
Unit Testing Types 104
3 NUnit
...................................................................................................................................
Example 105
4 Hands
...................................................................................................................................
on Lab: Running a Unit Test 108
5 Summary
................................................................................................................................... 110

Part X Manual Testing 112


1 Objectives
................................................................................................................................... 112

Copyright © 2009 AutomatedQA Corp. - 2.0 Release

5
6 TestComplete 7 Made Easy

...................................................................................................................................
2 Setting up a Manual Test Project 112
3 Hands
...................................................................................................................................
on Lab: Create a Manual Test 113
4 Hands
...................................................................................................................................
on Lab: Scripting and Manual Testing 120
5 Summary
................................................................................................................................... 124

Part XI Basic Record and Playback 126


1 Objectives
................................................................................................................................... 126
2 Overview
................................................................................................................................... 126
3 Recording
...................................................................................................................................
Toolbar Anatomy 127
Adding Text .......................................................................................................................................................... 128
Changing Recording
..........................................................................................................................................................
Types 129
Pausing .......................................................................................................................................................... 130
Stopping .......................................................................................................................................................... 130
4 Hands
...................................................................................................................................
on Lab: Perform a Basic Recording 130
5 Summary
................................................................................................................................... 131

Part XII Low Level Procedure 133


1 Objectives
................................................................................................................................... 133
2 Recording
................................................................................................................................... 133
3 Hands
...................................................................................................................................
on Lab: MS Paint Test 136
4 Summary
................................................................................................................................... 140

Part XIII Stores and Checkpoints 142


1 Objectives
................................................................................................................................... 142
2 Region
...................................................................................................................................
Checkpoints 142
3 File ...................................................................................................................................
Comparisons 150
4 Object
...................................................................................................................................
Comparisons 154
5 Hands
...................................................................................................................................
on Lab: Comparing File, Picture and a Property 156
6 Summary
................................................................................................................................... 163

Part XIV Data-Driven Testing 165


1 Objectives
................................................................................................................................... 165
2 Overview
................................................................................................................................... 165
3 Modifying
...................................................................................................................................
Scripts 165
4 Hands
...................................................................................................................................
on Lab: Modifying Recording for Data-Driven Testing 167
5 Summary
................................................................................................................................... 171

Part XV Event Handling 173


1 Objectives
................................................................................................................................... 173
2 General
...................................................................................................................................
Events Definition 173
OnLogError .......................................................................................................................................................... 175
3 Unexpected
...................................................................................................................................
Windows 176

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Contents 7

...................................................................................................................................
4 Hands on Lab: Create Unexpected Window Handler 177
5 Summary
................................................................................................................................... 181

Part XVI Working with Databases 183


1 Objectives
................................................................................................................................... 183
2 ADO................................................................................................................................... 183
3 Hands
...................................................................................................................................
on Lab: Query Database 186
4 Summary
................................................................................................................................... 194

Part XVII Web Page Testing 196


1 Objectives
................................................................................................................................... 196
2 Web...................................................................................................................................
Page Model 196
3 Naming
...................................................................................................................................
Conventions 197
4 Web...................................................................................................................................
Comparison Checkpoint 197
5 Web...................................................................................................................................
Accessibility Checkpoint 200
6 Finding
...................................................................................................................................
Web Page Elements 203
7 Dynamic
...................................................................................................................................
HTML 205
8 Hands
...................................................................................................................................
on Lab: Work with Web Pages 208
9 Summary
................................................................................................................................... 212

Part XVIII WebServices Testing 214


1 Objectives
................................................................................................................................... 214
2 Testing
...................................................................................................................................
against WSDL 214
3 WebServices
...................................................................................................................................
Checkpoint 219
4 WebServices
...................................................................................................................................
Testing Dialogs 224
5 XML...................................................................................................................................
Checkpoint 226
6 Hands
...................................................................................................................................
on Lab: Testing a SOAP 1.2 Web Service 228
7 Summary
................................................................................................................................... 235

Part XIX HTTP Performance Testing 237


1 Objectives
................................................................................................................................... 237
2 Performance
...................................................................................................................................
Testing Your Web Applications 237
3 HTTP
...................................................................................................................................
Load Testing Options 237
4 Cookie
...................................................................................................................................
Handling 239
5 Recording
................................................................................................................................... 239
6 Connections,
...................................................................................................................................
Requests and Responses 241
7 Visual
...................................................................................................................................
Creation of a Load Test 242
8 Analysis
...................................................................................................................................
of the Test Log 244
9 Modifying
...................................................................................................................................
HTTP Traffic 246
10 Hands
...................................................................................................................................
on Lab: Working with HTTP Traffic 248
11 Summary
................................................................................................................................... 251

Copyright © 2009 AutomatedQA Corp. - 2.0 Release

7
8 TestComplete 7 Made Easy

Part XX Remote Agent 253


1 Objectives
................................................................................................................................... 253
2 Installing
...................................................................................................................................
Remote Agent 253
3 Running
...................................................................................................................................
Remote Agent 253
4 Configuring
...................................................................................................................................
Remote Agent 255
5 Hands on Lab: Working with Remote Agent for HTTP Load
Testing
................................................................................................................................... 257
6 Summary
................................................................................................................................... 261

Part XXI Distributed Testing 263


1 Objectives
................................................................................................................................... 263
2 Network
...................................................................................................................................
Suites 263
3 Hosts
................................................................................................................................... 265
4 Jobs/Tasks
................................................................................................................................... 266
5 SynchPoints
................................................................................................................................... 267
6 Setup
................................................................................................................................... 268
7 Summary
................................................................................................................................... 274

Part XXII User Forms 276


1 Objectives
................................................................................................................................... 276
2 Creating
................................................................................................................................... 276
3 Scripting
................................................................................................................................... 278
4 Summary
................................................................................................................................... 278

Part XXIII Best Practices 280


1 General
................................................................................................................................... 280
2 Web...................................................................................................................................
Page 282

Part XXIV Cheat Sheet 284


1 Keyboard
...................................................................................................................................
Shortcuts 284
2 Code...................................................................................................................................
Completion 286
3 Keyboard
...................................................................................................................................
Handling in Recorder 287
4 Global
...................................................................................................................................
Shortcuts/Changing Keyboard Emulation 288

Part XXV AutomatedQA 292


1 History
................................................................................................................................... 292
2 Product
...................................................................................................................................
Offerings 292

Part XXVI Professional Offering 298

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Contents 9

Index 300

Copyright © 2009 AutomatedQA Corp. - 2.0 Release

9
10 Foreword

Foreword

TestComplete is more than just a test automation tool – it does that, of course,
but it also integrates all the other aspects of testing – from organizing your
manual tests, to doing unit testing and functional testing, and all the way to
performance and load testing. That’s already a daunting amount of
functionality, and then on top of that TestComplete supports multiple
programming languages and platforms and it comes out of the box bundled
with support for a long list of third party components. I almost forgot – you can
also write your scripts in any of several standard scripting languages, too.
That’s a lot of ground to cover.

It’s easy to get started with TestComplete, but to take full advantage of
everything that it has to offer you need not only to understand the built-in
functionality, but you also need a deep knowledge of your testing trade and
software development best practices. Anyone writing a book on
TestComplete had better have that kind of depth and experience. To be
honest, there just aren’t that many experts in this field that have such
experience and are also proficient and entertaining technical writers.

When I first heard a new book on TestComplete was going to be written I


crossed my fingers that the superstar team at Falafel Software would be
involved in some way. I just can’t think of anyone more appropriate for the
task. Now that I’ve reviewed the first manuscript, I can see that I was right…
(again). This book is terrific. It will definitely end up on the nightstands of all
discerning TestComplete users. I strongly recommend it to everyone from
novices just getting their feet wet, to expert testers ready to go to the next
level.

Finally, my deepest respects go to Lino Tadros, founder and CEO of Falafel


software, for his expertise and his appreciation that all work and no fun is no
way to go in life, and especially in testing. Thank you, Lino, for such a fine
book and even more, thank you for being my friend and knowing all there is to
know about Ouzo.

Atanas Stoyanov
Original Founder of AutomatedQA

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

I
Introduction
12 TestComplete 7 Made Easy

1 Introduction
1.1 Introduction to TestComplete

About TestComplete
Today automated testing plays a vital role in many software development projects.
Automated testing has long been thought critical for large software development
organizations, but is often considered to be too expensive and difficult to implement for
smaller companies.
AutomatedQA’s TestComplete breaks this stereotype. It delivers automated functional,
unit, regression, manual, data-driven, object-driven, distributed and HTTP load,
stress and scalability testing in one easy-to-use and totally integrated package at an
affordable price.
TestComplete is a full-featured environment for automated testing of Windows, .NET,
Java, WPF (XAML) applications, web pages, web servers and web services. It has
been designed to free developers and QA departments from the massive drain on time
and energy required by manual testing.
TestComplete offers systematic, automated, and structured testing, with superior
support for .NET, Java, Visual C++, Visual Basic, WPF (XAML), Delphi, C++Builder
and web applications. It is equally oriented for testing 32-bit and 64-bit applications. With
TestComplete you can also test PowerBuilder, FoxPro, Access and other applications.
TestComplete is the ultimate solution to perform nightly tests and to help you get reliable
daily builds of your software.
TestComplete tools and features let every member of your team, developers and non-
developers, no matter how technically savvy, contribute to your testing projects. Once you
start using TestComplete, you will be able to turn every test run into a key contribution to
your overall development efforts. TestComplete will keep your projects on schedule and on
spec, the team confident, and the work 100% productive.
With TestComplete you and your team can implement comprehensive software testing
strategies, “automating the non-automatable” for maximum return on investment:

“In my opinion, [TestComplete] is a must-have tool for any software developer who
believes in applying a rigorous testing methodology to his products. The ability to work
with Visual C++, Visual Basic, C++Builder, Delphi, Java and .NET applications means
that you’re virtually getting several tools in one, and the wide variety of scripting
languages means you can work in whatever language you’re most comfortable with.
Even if you have no interest in automated testing procedures, [TestComplete’s]
fascinating ability to ‘automate the non-automatable’ is sure to find a use on your
desktop!” Dave Jewell, Delphi Magazine

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Introduction 13

1.2 Who Should Read this Book


You should read this book if:

· You have never used TestComplete and want to learn what it's all about.
· You have worked in a QA environment and want to learn the AutomatedQA approach using
TestComplete.
· You have used TestComplete and want to make your knowledge more comprehensive.

1.3 How the Book is Organized

AutomatedQA
This section includes a brief history of how AutomatedQA came into being and its mission. The section
also includes a 1000 foot view of its award winning products TestComplete, Automated Build Studio,
AQtime, AQdevTeam, TestExecute and TestRecorder.

Overview of Testing and TestComplete


This section discusses an approach to organizing your efforts for maximum return on your automated-
testing investment. In this section you'll learn basic testing terminology, types of testing, strategies for
organizing and communicating your testing results, how to build a "smoke test" and best practices for
building durable tests that remain effective over time.

TestComplete IDE
This section introduces the basic tools you need to work effectively with TestComplete, including an
exploration of the TestComplete environment and debugging basics.

Projects and Suites


This chapter covers the structure of a TestComplete project and the parts that make up the various testing
functionality included in a project. This chapter discusses the difference between a Project and Project
Suite, the components of a Project, how to use the Project Wizard and how to create a simple test.

Project Items
This section provides an overview of all project item types with additional detail on the Tested Application.

Test Log
This section discusses the test log and the types of messages available in TestComplete. We will learn
how to email the test log and also how to reduce the size of the test log.

Name Mapping
This section introduces Named Mappings and Aliases used to handle long object identifiers and to provide
identifiers with meaningful names.

Unit Testing

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


14 TestComplete 7 Made Easy

This section discusses unit testing, the types of unit test frameworks supported by TestComplete and
provides an example of using an NUnit unit test.

Manual Testing
This section looks at the structure of a TestComplete project and the parts that make up the various
testing functionality included in a project.

Basic Record and Playback


This section demonstrates how to perform basic record and playback tasks.

Low Level Procedure


This section discusses TestComplete's Manual Testing features, how to construct a simple manual test
using one of the provided sample applications and how to interact with manual tests from scripts.

Stores and Checkpoints


This section explores how to compare various testing input including visual areas of the screen, files and
objects.

Data-Driven Testing
This section covers how the Data Driven Testing plug-in consumes common data types.

Event Handling
This section explains how to respond to events that occur during testing and explains how to handle
unexpected windows.

Working with Databases


TestComplete includes general-purpose mechanisms for connecting to external databases. This section
explains the connectivity options, how to connect and run queries during a test.

Web Page Testing


This section discusses how TestComplete represents web pages in the Object Browser, how to navigate
between web pages and how web checkpoints are used. This section also talks about strategies for
locating and testing dynamic HTML elements.

WebServices Testing
This section demonstrates how to test a web service, including how to import web service meta data,
calling simples methods, creating web service types and calling complex methods. This section also
explains how to create a web service checkpoint.

HTTP Performance Testing


This section explores HTTP performance testing and other types of performance testing (e.g. load, stress,
scalability). You will also learn about HTTP traffic recording and modification.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Introduction 15

Remote Agent
Remote Agent is a tool that allows for the distribution of HTTP loads tests across a network of computers.
This section explains how to install, configure and run Remote Agent.

Distributed Testing
This section explains how tests are run on several computers at the same time.

User Forms
This section demonstrates how to create user forms and manipulate them using scripts.

Best Practices
This section contains notes on best practices for testing in general and web pages in specific.

Cheat Sheet
Here you'll find a handy reference to TestComplete general keyboard shortcuts, shortcuts for Code
Completion, keyboard handling in the recorder, how to change global shortcuts and how to change
keyboard emulation.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

II
Keyword Testing
Keyword Testing 17

2 Keyword Testing
2.1 Objectives
In this section we'll take a look at the Keyword Testing features of TestComplete and you will learn how to:

· Record Keyword tests

· Add a checkpoint to a test

· Convert a recorded test to a Data Driven Test

The goal of Keyword Testing is to get developing testcases rapidly and in this chapter we'll do exactly that
by developing a frequently requested testcase scenario using Data Driven testing.

2.2 Recording Your First Test


For our first Keyword Test we'll start from scratch and record a simple data entry scenario using the Orders
sample application. To get started:

· Launch TestComplete

· Click Record a New Test on the Start Page

Record a New Test Test from the TestCom plete Start Page

You will be prompted to create a new project.

· In the Project Name field type: Keyword

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


18 TestComplete 7 Made Easy

· Click Create

Create a new Project

As soon as you click Create the TestComplete main window is hidden and you'll see the recording toolbar:

Recording a Keyword Test


You are now recording a test! At this point, we'll launch the Orders sample application, perform the data
entry below, end the recording and review the results.

NOTE: This test was recorded using Windows Vista and may vary slightly if you're using an older version
of Windows
1. Press the Windows key to display the Start menu

2. Type: c:\Program Files\Automated QA\TestComplete 7\samples\open


Apps\ordersdemo\c#\bin\debug\orders.exe and press the Enter key (if you're using Windows XP you
should select "Run" and use the Run dialog to start the application

3. You should now see the Orders sample application on screen

Next we're going to perform the following data entry for our test:

1. Select Order | New Order to view the Order dialog

2. Increment the Quantity to 2 by clicking on the up arrow of the UpDown control

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Keyword Testing 19

3. Type: "Jon Doe" in the Customer Name field, "123 Easy" in the street field, "CA" in the State field and
"95060" in the Zip field

4. Finally click the OK button to save the order

Order dialog

Now, click the Stop button on Recording toolbar (the blue square icon) and the TestComplete main window
will reappear with the Keyword Test Editor open. Congratulations, you've now recorded your first Keyword
test! TestComplete should now look like this:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


20 TestComplete 7 Made Easy

Recorded Keyw ord Test

2.3 Editing a Keyword Test


Now that we've recorded our first Keyword test let's take a closer look at the Keyword Test Editor. The
editor consists of three pages (see the tabs at the bottom of the editor):

· Test Steps (what you are currently looking at)

· Variables - used to specify values that are local to this test which can be passed from one operation to
the next

· Parameters - used to specify parameters to the test

The main parts of the Test Steps page are (moving clockwise from the top left):

· Operations palette - list all of the available operations you can perform in a Keyword test

· Keyword Test Editor toolbar

· Test Steps tree - displays all of the steps of the test

· Tabs to access the above editor pages

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Keyword Testing 21

Notice as you read through the Test Steps we recorded it's easy to make sense of the various operations.
The Keyword Testing feature is very powerful and automatically leverages other features of TestComplete
such as NameMapping, Aliases and TestedApps whereas in previous versions you had to configure each of
these features manually prior to recording.

Keyword Editor Toolbar


From the Keyword Editor Toolbar you can:

· Record a new test

· Append operations to an existing test

· Run a Keyword test

· Add Variables and Parameters to the test

· Manipulate Test Steps (move up/down, indent/outdent steps)

· Edit a test description

Editing Keyword Test Steps

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


22 TestComplete 7 Made Easy

The Test Steps tree allows you to manipulate the test by adding, deleting and editing steps. The Test Steps
tree supports many standard editing operations such as Undo, Redo, Select All, Cut, Copy and Paste
available from the right click menu or main menu. As is typical with recorded tests you'll want to review the
results of the recording and tidy up the test by removing any unnecessary or redundant steps. Next, we do
just that and illustrate how easy it is to edit Keyword tests.

Deleting Unnecessary Steps


In our recorded test you'll notice TestComplete created a step reading "Run TestedApp Orders" and as you
can see from the Project Explorer we now have an Orders subnode listed under TestedApps that it
launches. As a result, we can delete the steps recorded to manually launch the Orders application in favor
of using the Run TestedApp step. To do that simply:

1. Click the first step of the test starting with Explorer

2. Holding the Shift key down press the down arrow to highlight all of the steps up to, but not including the
Run Tested Apps step

3. Press the Delete key to delete them from the test

Delete com m ands used to start Orders.exe

At this point, you've completed your first test now, click the Run Test button on the toolbar and watch the
results!

Adding a Checkpoint Operation to a Test


Next, we'll add a Checkpoint operation to our test verifying the Total field on the Order dialog reflects the
correct value (Quantity x Price). To verify this data we're going to use a Checkpoint operation and add it to
our test after we've performed the data entry on the quantity field. To add a checkpoint perform the following
actions:

1. Click the Search box at the top of the Operations palette

2. Type: property

3. Drag the item Property Checkpoint onto the Steps tree and drop it on the step where we set the
Quantity to display the Create Property Checkpoint dialog

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Keyword Testing 23

4. Click on the Orders application and select Order | New Order to display the Order dialog

5. Use the Finder Tool on the Create Property Checkpoint dialog to select the Total edit box on the
Orders dialog

6. On the Create Property Checkpoint dialog click Next

7. Type: "wText" (without quotes) into the Search edit box at the top right hand of the dialog and click Next

8. Change the Value to "200" (without quotes) and click Finish

Your Keyword Test should now contain a step that looks like the If ... Then step below:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


24 TestComplete 7 Made Easy

Keyw ord Test w ith If ... Then operation inserted

2.4 Data Driven Keyword Testing


Building upon our existing Keyword test we can extend it to support Data Driven Testing and remove the
instances where we have hard coded data entry. Here is what we need to do:

· Create a CSV file with our test data

· Add the CSV file to the Files Store

· Modify the test to make it data driven

Creating a CSV File


Using Windows Notepad we can create a simple CSV text file that contains our test data, notice that the
first line of the file specifies the column names.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Keyword Testing 25

CSV file for data driven testing

To create this text file:

1. Start Windows Notepad

2. Enter the data pictured above

3. Save the file to disk as "names.csv"

Adding the CSV File to the Files Store


Next, we need to add this file to our Files Store.

1. From the TestComplete Project Explorer expand the Stores node, right click the Files subnode and
select New Item

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


26 TestComplete 7 Made Easy

Add nam es.csv to the Files Store

2. On the Add File dialog locate names.csv and add it to the Files Store

Modifying our Keyword Test to Perform Data Driven Testing


Now that we have data to work with we can modify our test making it data driven. Here are the tasks we
need to perform:

· Initialize the CSVDriver

· Create a loop that will iterate over all of the data

· Indent our test steps to use the loop

· Modify our data entry steps to use the data from the CSVDriver

· Add a step to move to the next record

Let's walk through each of these tasks:

1. Under Test Actions we'll add the Call Object Method operation by dragging it onto the Orders step:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Keyword Testing 27

Adding the Call Object Method operation to our test

2. On the Call Object Method dialog enter "DDT" (without the quotes) as the object and click Next >

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


28 TestComplete 7 Made Easy

3. Select CSVDriver as the method and click Next >

4. Click the ellipsis (...) next to the Filename parameter, select Code Expression from the Mode
dropdown and enter a Value of Files.FileNameByName('names.csv') then click OK

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Keyword Testing 29

5. Click the Finish button to complete the Call Object Method step

Next, we'll add some logic to iterate over our data.

1. On the Operations palette under Statements select While Loop and drop it onto the Orders step.

2. The While Loop dialog will appear and click the ellipsis (...) under the Value1 column then select Code

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


30 TestComplete 7 Made Easy

Expression from the Mode dropdown and enter a Value of:


DDT.CurrentDriver.EOF() then click OK

3. Click on the edit box on under the Value2 column type false then click OK

Now, we need to nest our existing test steps under the While Loop step by indenting the remaining steps.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Keyword Testing 31

1. Click the Orders step

2. Holding the Shift key down use the down arrow to multi-select the remaining test steps

3. Click the Indent button on the Keyword Editor Toolbar

Next, we need to change our data entry steps to use values from the CSVDriver. We'll walk through
changing the Customer data entry field and you can repeat the steps for the Street and Zip fields.

1. Double click where it says "Jon Doe" to display the On-Screen Action dialog

2. Click the ellipsis (...) under the Value column to display the Edit Parameter dialog

3. On the Mode dropdown select Code Expression and change the Value to read DDT.CurrentDriver.
Value('name') then click OK then Finish

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


32 TestComplete 7 Made Easy

4. Repeat the same steps for the Street and Zip edit fields only changing the parameter passed to DDT.
CurrentDriver.Value(...) to reflect the correct field.

At this point, we're almost done, the only thing remaining is to add a step that will move the CSV record
pointer to the next row of data.

1. On the Operations palette select Test Actions then drag and drop the Run Code Snippet operation to
the very bottom of our Keyword Test

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Keyword Testing 33

2. For the code snippet use DDT.CurrentDriver.Next() then click OK

3. Finally, click the Indent button on the toolbar to indent our Run Code Snippet step and we're done! Your
test should look like this:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


34 TestComplete 7 Made Easy

2.5 Summary
In this chapter we covered Keyword Testing including recording and editing Keyword Tests. You should be
familiar with how to record Keyword tests and edit them using the Keyword Test Editor.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

III
Overview of Testing and TestComplete
36 TestComplete 7 Made Easy

3 Overview of Testing and TestComplete


3.1 Objectives
In this section we'll discuss an approach to organizing your efforts to maximize the return on your
automated testing investment. The content in this section is based on years of experience "in the trenches"
from people who have worked to build a productive and efficient automated test environment.

In this section you'll learn about:


· Basic testing terminology
· Types of testing
· Strategies for organizing and communicating your testing results
· How to build a "smoke test"
· Best practices for building durable tests that remain effective over time.

3.2 Terminology
First, let's define a few terms to help facilitate a discussion on testing:

· QA - the Quality Assurance team


· R&D - the Research and Development team developing the application being tested
· Build - a specific revision of the application under test that is submitted to QA
· Application - the code that will be tested using TestComplete

3.3 Types of Testing

Manual Testing
Manual Testing is where a tester methodically exercises the features of a product or product area without
the aid of test automation. The single greatest strength of manual testing is that it is truly real-world testing,
meaning that the tester can utilize the application under test the same way an end user would. Through
manual testing the tester can provide a wide variety of feedback about the application under test not limited
to simply reproducing bugs.

The major weakness of manual testing is that it is time consuming, tedious and requires extended periods
of very focused attention which can be very difficult to perform on a regular basis. Manual testing tends to be
quite error prone, leading to situations where consistently reproducing a bug can be very difficult.

Functional Testing
Functional Testing focuses on interactions with an application's user interface (UI) via the mouse, keyboard
or other input device with particular attention to how the application visually responds to input. The goal of
Functional Testing is to methodically cover all of the various UI features exposed by an application.
Functional Testing should be highly organized and structured in a manner that allows for additional tests to
easily be incorporated as new features are added.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Overview of Testing and TestComplete 37

Unit Testing
Unit Testing is testing that focuses on smaller atomic portions of an application. Typically, Unit Testing
requires internal knowledge of how an application performs and seeks to test portions (objects, methods
and function) of an application in isolation. In many cases, applications have to be designed with Unit
Testing in mind in order for this type of testing to be truly effective. The benefit of unit testing is that it tends
to force application developers to write smaller more well defined routines with fewer dependencies allowing
for more highly specific tests to be developed.

Regression Testing
Regression Testing is the process of executing tests in a repeatable manner and comparing the latest
results with previous test executions to ensure that the same outcome is achieved. Regression Testing is
extremely important and is the means of realizing the value of test automation. Repeatedly executing tests
over time allows you to verify the application is still performing in the manner in which it was intended.

Distributed Testing
Distributed Testing is the act of farming different portions of a test out to separate machines for execution.
Distributed Testing is useful for simulating real world interactions on a networked application such as a web
site or web service and can exercise functionality designed to handle concurrent use of application
resources including, but not restricted to data.

HTTP Performance Testing


HTTP Performance Testing is the simulation of real-world interactions with a web application from multiple
machines. TestComplete provides the ability to leverage networked computers and virtual users to
simultaneously submit HTTP transactions to a web application.

Multi-Tier Explained
In software development there are typically three Tiers which are used to describe various aspects of an
application they are Client Tier, Middle Tier and Data Tier. These are each defined as:

Client - The user interface or presentation of an application and it's data which is typically covered through
Functional Testing.

Data Tier - The storage of an application's data which can be exercised by Functional Testing as well as
Unit Testing

Middle Tier - Refers to the portion of the application responsible for moving data back and forth between the
Client and the Data Tiers. The code that resides in this Tier can be tested from either the Client Tier via
Functional testing or through Unit Testing on the code in the Middle Tier itself. Keep in mind that these are
not strict rules as to which type of testing should be used but more illustrative how the different types of
testing can be used.

3.4 Before You Begin


There are a few things you should know before diving into writing test automation using TestComplete or any
test automation tool for that matter. In this section, we'll discuss the steps you should take to maximize the
utility of your test automation efforts.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


38 TestComplete 7 Made Easy

Communicating Test Results


Now you might be thinking "huh? I haven't even started yet and I have to think about communicating my
results?" The answer is a resounding YES! Unfortunately, Quality Assurance and test automation
specifically, at least in the software world, tends to get a bad rap. Creating solid test automation that can
stand up over time and provide valuable ongoing feedback is a difficult task which leads a lot of people (read
management) to think time and effort spent working on automation is wasted.

To solve this problem you'll want to focus on getting your test results published quickly and consistently to
prove that you're efforts are worth the investment. TestComplete provides some facilities for producing log
output though you'll want to be sure and iron out your strategy from the start. For example, you may want to
setup a web server where you can publish results in fact, TestComplete supports exporting log results to
HTML which could be a good starting place.

Plan your testing, but not that kind of planning...


The planning we're referring to has to do with your choice of testing tool, TestComplete. Planning sounds
like an obvious first task and although it's important to plan in terms of testing an applications features it's
also important to plan with respect to the testing facilities available in TestComplete. You should gain a
thorough understanding of TestComplete's features before you embark on writing test automation to avoid a
situation where you're weeks into test development only to discover a feature that could have saved you
numerous hours or days.

TestComplete is rich with features that make test automation easier although like any development tool it
provides many different ways to solve the same problem. For example, TestComplete has a powerful and
indeed almost alluring, recorder making it easy to quickly create automated tests. While a test recorder is a
great tool, recorded tests tend to be more brittle than hand written tests because they capture a single
iteration at a given point in time and don't take into account unexpected events like an error dialog popping
up. The alternative is handwritten tests where you can methodically plan how the test will react in
unexpected circumstances. The down side of handwritten tests is they tend to take longer to develop
though over the long run they'll likely require less maintenance because of the tendency to design the test
more rigorously. That said, it's not a bad idea to start with a recorded script and massage it into what
amounts to a handwritten test.

Organizing your TestComplete projects


TestComplete provides the ability to customize the Project Items that are included by default on a new
project using Project Templates. In order to maintain consistency across your testing organization you
should work towards creating a project template(s) that's pre-configured for your test environment. For
example, if you're testing a Window 32-bit GUI application, create a Project Template that has the Tested
Applications node with your application already added to it. Also, look closely at how you can utilize
Aliases to avoid using long dotted object names like:
Sys.Process("iexplore").IEFrame(0).Window("WorkerW", "", 1).Window(
"ReBarWindow32", "", 1).Window("ComboBoxEx32", "", 1).Window(
"ComboBox", "", 1).Window("Edit", "", 1)

In TestComplete 7, a new automatic NameMapping feature has been added to make this even easier.

Use a Source Control Repository


TestComplete is a development tool and as such the projects, scripts, data, etc. used in your tests should
be kept under version control. If this is something you're already doing, skip ahead. If not, you should
consider version control the next priority and work to get your test suites under version control. There are

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Overview of Testing and TestComplete 39

lots of options including some excellent Open Source projects which are freely available like Subversion,
otherwise known as SVN. While it's beyond the scope of this document to discuss the specific merits of
source control it's a subject that shouldn't be ignored.

3.5 Your Most Important Test


Arguably, the first test you should focus on is a "smoke test". In this section we'll discuss what a smoke
test is and provide guidance as to how to construct the test in such a way as to maximize its effectiveness.

Creating a Smoke Test


Probably the most important test you'll write is your smoke test, at least it should be. Typically, the goal of
a smoke test is to verify that the latest build delivered to QA is either worth further consideration or DOA
(dead on arrival). The smoke test is crucial because of the time savings it can provide both R&D and QA. A
good smoke test should:

· Run quickly - a smoke test should not last for hours but minutes and test the most crucial functionality
· Fail quickly - as soon as a failure is detected in the smoke test should end and trigger a failure
notification
· Cover a broad range of functionality, focusing on breadth not depth
· Require minimal setup/configuration of the application under test
· Be setup to run against every build
· Adapt over time as the application under test evolves

· Serve as a model for new test automation

If you take the time to organize your smoke test to cover these goals you will undoubtedly save time and
resources over the long run. Your smoke test should serve as an model that embodies your "best practices"
from which your QA team can draw from for their own tests.

If you've never written a smoke test before, start small. In the beginning simply get the smoke test to verify
even a single piece of functionality consistently. Over time, work to increase its coverage but remain
focused on the quality of the test. It's unacceptable to have a smoke test that can't run consistently and
without problems.

Executing your Tests Regularly


Once your smoke test is written and under version control the next step is to automate its execution.
AutomatedQA has a product called Automated Build Studio which can automate your TestComplete tests
and trigger them to execute when a new build is delivered to QA, a process called Continuous Integration
or CI. In addition to Automated Build Studio there are Open Source CI servers such as CruiseControl.NET.

The main benefit of a CI server is to reduce the amount of time it takes to execute your test automation as
well as ensure that it executes against every build. By setting up a CI server you can not only alleviate your
QA engineers from having to manually execute their tests but you'll quickly identify tests that are unable to
consistently run to completion and may require closer scrutiny. In addition, many CI servers include a
means of publishing test results providing for great visibility into the automation efforts.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


40 TestComplete 7 Made Easy

3.6 Summary
To best leverage your investment in test automation it's important to plan your overall testing strategy.
Before diving in and unleashing the full power of TestComplete be sure to organize your communication
strategy. Make communicating your results an important part of judging the success of your efforts. Also,
treat your test development like any other software development project and use the tools available to
maintain the quality and integrity of your test code.

Remember the Goal


Ultimately, the goal of test automation is to save time, money and improve quality. Test automation can
relieve you of the task of manually testing existing functionality allowing you to focus attention on areas not
already covered by automation. However, that statement is only true as long as your existing test
automation is working, being executed consistently and the results are clearly communicated to the people
who need them.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

IV
TestComplete IDE
42 TestComplete 7 Made Easy

4 TestComplete IDE
4.1 Objectives
This section introduces the basic tools you need to work effectively with TestComplete. In this section you
will:
· Get familiar with the TestComplete environment.
· Locate the Menus, Toolbars, Workspace areas, Object Browser and Project explorer.
· Gain a solid understanding of the Object Browser.
· Get familiar with the TestComplete Code Editor and all its features.
· Gain the necessary knowledge of debugging in the TestComplete Editor.

4.2 Menus and Toolbars

TestComplete Menus
The TestComplete menus are no different from many Integrated Development Environments menus. From
the figures below, you can see the File, Edit, View, Script, Tools and Help menus.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


TestComplete IDE 43

TestComplete Toolbar
The TestComplete Toolbar is an easy way to get at TestComplete functionality or deeper menu items with
only one click. Saving files, adding new units, recording, playing back, debugging, searching, formatting,
etc...

The great thing about the toolbar is that it is customizable. So if you ever use a TestComplete functionality
often and you don't see it on the toolbar, add it by right clicking on the toolbar and choose customize. Click
on the Commands tab and drag any functionality you desire to anywhere on the toolbar. Once you drag a

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


44 TestComplete 7 Made Easy

command to the toolbar, the icon is persisted there permanently.

4.3 Panels and Workspaces


4.3.1 Project Explorer

The TestComplete IDE as you might expect consists of several pluggable windows that facilitate project
management, code management, debugging, object browsing, main script and result logs workspaces.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


TestComplete IDE 45

The Project Workspace consists of two main windows, The Project Explorer and the Code
Explorer.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


46 TestComplete 7 Made Easy

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


TestComplete IDE 47

The Project Explorer will allow you to see all projects in a suite and all the specific Project Items that
are part of a specific Project. If you ever missed a Project Item from the Wizard at startup, you can
always right click on a Project in the Project Explorer and choose Add New Item, where you will be
presented with all TestComplete Project plug-ins to add to the project.
The Code Explorer on the other hand, is a different view into your code base that enables you to
navigate easily between functions in large files, rename functions, delete functions, sort functions by
name in the tree, etc...

4.3.2 Object Browser

The Object Browser is the most powerful part of TestComplete. It is where all the brains behind the
TestComplete muscle reside.

When you click on the Object Browser Window in TestComplete, the engine monitors all running processes
on your machine and extracts vital information about each process for display as you can see below. You

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


48 TestComplete 7 Made Easy

can filter the kind of processes you need to inspect or eliminate a category of processes by right-clicking on
the Object Tree below on the left and filter processes.

The Object Browser can also examine your system as a hardware unit and report on the CPU, CPU count,
amount of memory (RAM) on the machine, operating system in use, and other useful information, from a
testing perspective.

4.3.2.1 Process Tree Pane

The Process Tree Pane enables you to view all currently running processes on the machine and its toolbar
on top allows you to filter the processes from running application to system processes to chosen testapps
applications in your TestComplete project.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


TestComplete IDE 49

By Right clicking anywhere in the Object Tree Pane, the popup menu appears with options to refresh the
content of the tree, filter, terminate, copy to editor, sort and other useful functionality that we will discuss
later in this chapter.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


50 TestComplete 7 Made Easy

4.3.2.2 Object Properties Pane

From the Object Tree Pane, invoke the 3rd menu option from the top called Object Properties..., that will
invoke the following dialog when you need to quickly dissect a window on the screen.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


TestComplete IDE 51

As a Lab for this part of the chapter, let's use the Object Browser, Object Tree Pane and Object
Properties dialog to work with a Notepad window:
1. Open Notepad from the Windows directory or System32, depending of the version of Windows you are
running.
2. View the Object Browser in TestComplete to determine that the process of Notepad has been detected
by the Object Tree.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


52 TestComplete 7 Made Easy

Notice that the process of Notepad is displaying three windows underneath the process and the
Properties of the process itself are displayed on the right.
The main Notepad window is actually the 3rd one down. The other two windows (IME and MSCTFIME
UI) are other non-visible windows in Notepad for language direction reasons like Hebrew and Arabic,
etc...
3. To make sure that the main window of Notepad is the 3rd one underneath the process, right click on it
and choose Highlight on the Screen.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


TestComplete IDE 53

Note: The Notepad application is brought to the front and the main window starts flashing with a red
rectangle around the main window several times.

4. Notice in the Properties window that the properties that you can change have a small grey circle on the
left of them. That means these properties are READ-WRITE as far as the Object Browser is concerned,
all the other ones are READ ONLY and you will not be able to change their values in the Object Browser.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


54 TestComplete 7 Made Easy

5. One of the properties of that main window in Notepad is called "WndCaption" and it has the gray circle
next to it. That means it can be written to from the Object Browser. This property is actually the title of
the window. Push the CTRL key and click inside of the edit area of the property.
6. Type "Welcome to TestComplete 7" and press [Enter].

7. Now go back to the Notepad application and view the title area of the application.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


TestComplete IDE 55

Don't worry, you did not change Notepad forever :) it is only for this session until it is shutdown and
started up again.
8. Now let's use the Finder tool to capture the Edit window in Notepad (The white area only with no
Notepad title or menus).
9. Invoke the Object Properties dialog from the popup menu of the Object Tree. Drag the Finder tool to the
white area in Notepad until you see a red rectangle around the edit portion only.

10. The Object Properties will automatically refresh and show all the properties TestComplete was able to
see from the Window object in memory.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


56 TestComplete 7 Made Easy

The button pointed to by the number 1 above will allow you to highlight the window object in-place in
the Object Tree Pane as part of the Object Browser. This is a very handy button when your application
windows are numerous and have a deep hierarchy as is the case for Internet Explorer.
The button pointed to by number 2 above will allow you to highlight the object on the screen by flashing
it several times, similar to step 3 above.

4.3.2.3 Object Recognition


4.3.2.3.1 Introduction

From the previous sample with Notepad, you probably noticed that TestComplete recognized a lot of
properties of the main Notepad window as well as the Edit window. On the other hand, you probably also
noticed that the Fields and Events tab were blank. Even the Methods tab had only methods pertaining to
standard TestComplete functionality and actions.

So where are Notepad's methods, Fields and events?

Well, TestComplete will recognize objects and will go as deep as the application will allow it to. That
means, it is based on how the application was built, developed or compiled as to what TestComplete will be
able to see inside of it.

This brings up the topic of White Box Applications Vs. Black Box Applications.

TestComplete will be able to automatically see deeply inside .NET and Java application without any
changes to the application just because of the nature of metadata generation of .NET and Java application
which are easy to reflect. Reflection is the ability to retrieve internal objects, properties, methods and
events. So these are always called White Box Applications.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


TestComplete IDE 57

And with the introduction of TestComplete 7, Delphi, C and C++ application do not need to be compiled with
a special header to making it a White Box tested application. TC 7 enables these application by default.

4.3.2.3.2 White-Box Applications

While viewing the Object Browser, you will notice sometimes that a TestComplete icon will show next to a
specific process. That sign identifies the process as "OPEN" and means TestComplete can reflect its
content and get as much Runtime Type Information as possible.

In this sample, I used Visual Studio 2008 to generate a very simple C# based Windows application that
adds two numbers together

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


58 TestComplete 7 Made Easy

The only line of code in this example is:


private void btnAddition_Click(object sender, EventArgs e)
{
TxtResult.Text = (Convert.ToInt32(TxtNumberOne.Text) +
Convert.ToInt32(TxtNumberTwo.Text)).ToString();
}

In case you don't have Visual Studio, the executable is available through the book download as
"TCDotNetApp.exe".

Notice that TestComplete automatically figured out that we are dealing with a .NET application so it started
using the built in "WINFORMSOBJECT" identifier to make it easier to reach all .NET methods, fields,
events and properties associated with the application.
At this point, if we had a function in the TCDotNetApp.exe called "Hello" that was never called from the
User Interface, it will still show up in the Methods tab. We would be able to call it directly from the script
and it will be visible to TestComplete via reflection.

Note: TestComplete has many built in recognition objects for Delphi VCL objects, Java Swing objects,

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


TestComplete IDE 59

XAML WPF objects and others...

4.3.3 Editor
4.3.3.1 Code Completion

The Code Editor in TestComplete is easy to use and productive to get the job done.

One of the first features you will discover and love in the TestComplete Editor is the Code Completion
feature. I am not sure how we used to write code before this feature was introduced in major development
tools and in TestComplete.

Instead of having prior knowledge of the objects you need to deal with in TestComplete or have access to
the Help files, it is simple enough to let TestComplete do the job for you by entering the name of an object
and placing a "." period after the object. That will invoke the Code Completion window with all properties,
methods and events available for that object. Sometimes you even have the need to invoke the Code
Completion window in the middle of a statement. That is possible using the handy keyboard shortcut CTRL-
SPACE.

Another great feature of the TestComplete Editor is the Parameter Completion feature. For example,
when you need to know the count and type of a parameter that TestComplete recognizes, you can always
open a parenthesis and key in CTRL-SHIFT-SPACE to bring up the Parameter completion window:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


60 TestComplete 7 Made Easy

4.3.3.2 Bookmarks

Another great feature of the editor in TestComplete is the ability to place bookmarks in script units opened
in the IDE and be able to jump between them by a simple keystroke. You can set a bookmark by having the
cursor on that line and pressing CTRL - SHIFT - and a number between 1 and 9. NOTE: The project in the
screenshot below is for illustration purposes only, to work with Editor Bookmarks you can use any of the
courseware projects or create a new project.

In the figure above, please notice that the bookmarks are set on lines 5,15 and 18 (see the yellow glyph in
the gutter). Also, the Bookmarks window at the bottom of the editor will list all set bookmarks with their
numbers, their unit names and their line numbers. To jump to a specific bookmark at any time, press CTRL

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


TestComplete IDE 61

- 0 to 9 (without the SHIFT). To delete a bookmark, delete from the bookmark window or press CTRL-
SHIFT- 0 to 9 again while the cursor is on the bookmark.

4.3.3.3 Editor Options

From Tools | Options, you can get to the Editor options under Panels | Code Editor:

Under Display, you have the choice to change the Text specifications, background colors and margin,
gutter styles and capacity and also whether you want to show line numbers or not.
Another very useful feature of the editor in TestComplete is the ability to set Code Templates.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


62 TestComplete 7 Made Easy

Every scripting language has it own templates. Above you will see that I added a new Template called
TCTraining that contains a function name "test" with a comment in it. The script itself can be anything
that you expect to use a lot in your testing. Notice also the little pipe "|" sign inside the brackets. The
pipes indicates the position of the cursor in the code after the template has been inserted.
Now lets go back to the editor and try to enter this template:
1. Choose an empty area between two functions and press CTRL - J.

The following code template helper will appear:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


TestComplete IDE 63

2. Choose the TCTraining Template from the list and press Enter.

The code is inserted in the script unit and the cursor is blinking right before the comment starts.

4.3.3.4 Debugging
4.3.3.4.1 Breakpoints

The Debugger capabilities in the TestComplete's Editor are very helpful in finding script errors, flow problems
and also to evaluate the values of local and global variables.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


64 TestComplete 7 Made Easy

The Breakpoints window in TestComplete is very easy to use. You can set breakpoints in your editor
by clicking in the gutter next to the line you want to set a breakpoint on or by pressing F5 while the
cursor is on that line.
In the Breakpoints window you can:
· Enable or disable a specific breakpoint. That is better than deleting them and reentering them all over
based on different debug sessions.
· View the Location of the unit name it resides in and also the line number of where it resides.
· Include a description to explain the goal behind using the breakpoint.
· Finally, you have two powerful features in the breakpoints window which are Pass Count and
Condition. If you are debugging a "For Loop" that goes on for 1000 iterations, knowing that it will fail
some time after 900 times, it would be wise to place a Pass Count of 900 on the breakpoint instead
of having to step over the breakpoint 900 times. When the pass count is not known but a condition
has to be met, the Condition property can be set (e.g: x > 100).

4.3.3.4.2 Call Stack

The Call Stack window is very helpful when your scripts get called one from the other in a long chain of
execution. During a break in execution, the Call Stack window will show the order of execution for the
calling functions to get to that point of execution. The figure below shows the Call Stack at a break in
execution. Usually that is good information for pinpointing the offending procedure. Unfortunately, in many
cases "X" does not mark the spot like in an Indiana Jones' movie, so the problem you are trying to figure out

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


TestComplete IDE 65

has already manifested itself way before the break in execution occurred. These are tougher bugs to figure
out.

4.3.3.4.3 Locals

The Locals window is an easy and fast way to monitor the value of local variable inside of a specific
function. Like in the figure below, we created 2 local variables, "myString" and "myNumber", and assigned
specific values to both. To view their values, you only need to open the Locals window and they will be
there as long as you are breaking inside of the function that contains them.

So how do you view values of variables that are not local to a function? That is the functionality of the
Watch List.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


66 TestComplete 7 Made Easy

4.3.3.4.4 Watch List

Notice in the screenshot below that the Global variable "myGlobal" did not show up in the locals window.
This is correct, as the myGlobal variable is not a local of that function.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


TestComplete IDE 67

To evaluate the myGlobal variable, go to the Watch List window and add a new item by right-clicking in
the window.

The output in the Watch List window will allow you to monitor the value of that variable during the life of
the execution session.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


68 TestComplete 7 Made Easy

You can also use the Evaluate command available from the debug menu item in the editor:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


TestComplete IDE 69

The Evaluate dialog displays the current value of the expression.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


70 TestComplete 7 Made Easy

4.3.4 Visualizer
4.3.4.1 Objectives

In this section we'll take a look at TestComplete's Visualizers feature and you will learn how to:

· Enable Visualizers

· Work with Visualizer Gutter icons

The Visualizer can be particularly useful when providing feedback to people unfamiliar with a particular test
script. The recorded screenshots function as a storyboard for the script allowing the person reviewing the
results to more quickly understand what actions caused the problem.

4.3.4.2 Enabling the Visualizer

The Visualizer records screenshots during recording or script playback allowing you to see exactly where
the action took place. By default TestComplete's Visualizer feature is turned off and requires that you
manually enable it in order to capture Visualizer data.

To enable the Visualizer select Tools | Options... and select Engines | Visualizer:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


TestComplete IDE 71

Visualizer Options

You can enable the Visualizer before recording and/or before playback. You and also specify what part of
the screen will be captured using the Capture Style.

4.3.4.3 Working with Visualizer Images

Once you have enabled the Visualizer for recording and/or playback you will see cues in the Script Editor
gutter indicating images have been captured. Notice in the picture below lines 18, 20 and 23-25 all have a
image icon displayed in the editor gutter:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


72 TestComplete 7 Made Easy

Double clicking these image icons will display the Visualizer Images dialog allowing you to peruse the
captured images. The dialog displayed below appeared after double clicking the Visualizer icon in the gutter
on line 20 from the script above where you can clearly see the Orders | New Order... menu item was
clicked.

Visualizer Im ages dialog

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


TestComplete IDE 73

4.4 Summary
In this chapter:

· You got a tour of the TestComplete environment.


· Located the Menus, Toolbars, Workspace areas, Object Browser and Project explorer.
· Gained a good understanding of the Object Browser.
· Got familiar with the TestComplete Code Editor and all its features.
· Gained the necessary knowledge for debugging in the TestComplete Editor.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

V
Projects and Suites
Projects and Suites 75

5 Projects and Suites


5.1 Objectives
This section looks at the structure of a TestComplete project and the parts that make up the various testing
functionality included in a project.

In this section you'll learn about:


· The difference between a Project and Project Suite
· Understand the components of a Project
· Learn to use the Project Wizard
· Create a simple test

5.2 Project Anatomy


In TestComplete a Project is a container of test scripts and other Project Items used by the tests that
make up the project. A Project Suite is a container of projects providing a mechanism to logically group
related projects.

To create a new project select File | New | Project... and you will be presented with the Create New
Project dialog:

This is a much simplified dialog than previous versions of TestComplete that asks only for the Project
Name, the scripting language to use and the location to save the project.

If you would like to use the "classic" Create New Project dialog, feel free to click on the "Classic" button

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


76 TestComplete 7 Made Easy

and you will be presented with the following dialog:

The "Classic" Create New Project dialog presents you with a number of pre-configured Project Templates
that are geared towards specific types of testing. The templates are:

· General Purpose Test Project - useful for a wide variety of test scenarios
· Object Driven Testing - for working with custom data structures
· Unit Testing - for running MSTest, NUnit, JUnit, DUnit or TestComplete unit tests
· Distributed Testing - for managing test execution of projects on different computers
· HTTP Load Testing - for load testing web server applications
· [All Items] - template that includes all of TestComplete's available Project Items

Once you click OK on the Create New Project dialog you will be presented with the Project Wizard which
allows you to further customize your New Project. For more details refer to the following section on the New
Project Wizard.

After creating a new project you can view all of its Project Items and sub items from the Project Explorer.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Projects and Suites 77

The various parts of a project are as follows:

· MyProjectSuite - A Project Suite


· MyProject - A Project
· Name Mapping -
· Script - A Project Item
· Stores -
· Tested Apps -
· Unit1 - A Project Item Element

Structure of Projects in TestComplete


In TestComplete, Projects function as containers for different pieces of functionality related to testing and
are organized on disk in a similar file/folder structure. In fact, removing a node from Project Explorer only
removes it from the logical view presented by TestComplete and does not actually delete the item from disk
which means you can easily add removed items back to a project. Here is the above project viewed from
within Windows Explorer:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


78 TestComplete 7 Made Easy

Projects
Projects can contain the following:

· Project Items: Provide support for a specific type of testing.


· Project Item Elements: The child nodes that represent testing functionality of the Project Item or serve
to organize its contents.
· Folders: Provides a means of organizing Project Items and Project Item Elements within a Project.

When a project is initially created you have the opportunity to specify which Project Items you want
included. You can add and remove Project Items at any point. Adding them at the time a project is created
is a matter of convenience.

Both Project Suites and Projects provide a logical view of the files and folders that make up the project.
When removing nodes from the Project Explorer you are only removing them from this logical view. The
actual files and folders are not deleted from disk and may be added back to the project using the right-click
context menu and selecting Add | Existing Item...

Project Items
Project Items make up the specific types of testing functionality or assist in performing various test
operations. TestComplete includes a large collection of Project Items covering a wide variety of test
functionality. You can easily add and remove Project Items using the right-click menu on the Project node

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Projects and Suites 79

of the Project Explorer.

5.3 New Project Wizard


The New Project Wizard is provided as a convenience allowing you to configure a new project with a default
set of testing functionality. It's not crucial to know up front all of the necessary Project Items that your
project will require as Project Items can be added or removed directly from the Project Explorer after the
project has been created.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


80 TestComplete 7 Made Easy

Project Templates
Initially, accepting the defaults on this dialog will be the preferred choice until you're familiar enough with the
available Project Items and can identify the ones you use most frequently at which point you can create a
Project Template. To define a new template select the Project Items you use most frequently and click the
Save As... button to create a new Project Template that will be available on the Create New Project dialog.

Best Practice - Setting up a Custom Template


If you're testing a Windows Application you may want to setup a Project Template that's geared towards
that type of testing. Project templates are located in <TestComplete>\Bin\ProjectTemplates.xml making it
easy to share templates with your entire team. In any testing organization it's important to establish
standards like this to help maintain consistency across your testing organization. The following walk-
through demonstrates how to create a custom Project Template you may find useful for testing Windows
applications:

1. Select File | New | New Project...

2. On the Create New Project dialog from the list of Templates select the [All Items] template

3. Click the Unselect All button at the bottom of the Project Items checkbox

4. Check the following Project Items:

- Name Mapping
- Stores

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Projects and Suites 81

- Tested Applications

5. In the left hand column on the dialog click Tested Applications

6. At the bottom of the Items list click the Add button to add a specific Windows application to test against

7. On the Create New Item dialog fill in the name of your application and click Next

8. In the Tested application edit box, type the complete filename including the path to the Windows
application you wish to test, or use the ellipsis (...) button to select the application

9. Click the Finish button

10. In the left hand column of the dialog click Select Project Items

11. Click the Save As... button

12. On the Save Template dialog enter a Template Name and Description and click OK to create a new
project template that you can reuse

13. Click the Finish button

Deleting a Project Template


TestComplete 7 does not have built-in UI for editing or deleting Project Templates. However, you can
manually edit <TestComplete>\Bin\ProjectTemplates.xml using a plain text editor such as Windows
Notepad to delete or modify an existing template.

5.4 Hands on Lab: Create a Simple Test

Creating a Simple Project


1. Select File | New | New Project... Click on Classic

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


82 TestComplete 7 Made Easy

2. Select General Purpose Test Project and click the OK button

3. On the New Project Wizard click the Finish button, accepting the defaults

5.5 Summary
In this chapter we covered the structure of a TestComplete project and the parts that make up the various
testing functionality included in a project. You should be familiar with how to construct a Project Template
for use across your organization for greater consistency and ease of use when creating new test projects.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

VI
Project Items
84 TestComplete 7 Made Easy

6 Project Items
6.1 Objectives
This section provides an overview of all project item types with additional detail on the Tested Application.

6.2 Project Items


The Project Wizard Select Project Items tab allows you to select which project items are included in the
project.

· ActiveX - This project item allows you to load an ActiveX object in TestComplete's memory space and
use that object in your tests. For example you could use the Microsoft ADO Data Control to work with
databases.
· Events - This project item is used to hook to TestComplete events (and those of other application, such
as ActiveX controls). This item is required.
· HTTP Load Testing - Necessary for the creation of a load on a web server using TestComplete.
· Keyword Testing - Allows for the visual construction of scripting blocks to help build logic without
being familiar with code syntax.
· Low-Level Procedure Collection - A virtual folder for holding low-level (screen coordinate based tests)
procedures.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Project Items 85

· Manual Test - A virtual folder for holding manual tests.


· Name Mapping - Used to map the name of an object to a shorter name (aliasing).
· Network Suite - Used in distributed testing.
· ODT - Object Driven Testing used to add pseudo class structure to script code.
· Script - Holds a collection of script units. THIS ITEM IS REQUIRED.
· Stores - Holds collections of checkpoints used in a project
· Unit Testing - A virtual folder for holding Unit Tests.
· User Forms - A virtual folder for holding User Forms (Forms presented to the user during the test run,
such a progress dialog, etc).
· Web Services - A virtual folder for holding connection, methods and type of web services (Information
from the WSDL file).
· Tested Application - Holds information for managing the Application(s) under test.

6.2.1 Tested Applications

The screenshot below shows the configuration of a tested applications project item:

· Icon - Show the icon associated with the tested application


· Launch - If checked, this application will be run if TestedApps.RunAll command is used (either from
script or context menu).
· Name - Is the name that TestComplete uses to refer to the tested application (must be a name that the
scripting language can handle).
· File Name - Is the name of the application on the disk.
· Count - This is the number of instances of the application that TestComplete will launch. If the
application is already running TestComplete will post a warning message in the Test Log.
· File Path - By default, File Path is the relative path to the file name from the TestComplete project.
· Run Mode - How the application is launched.
· Parameters - Allows parameters to be set using the ellipses button.

Run Mode
· Simple - Launches the application under the same user account as TestComplete. Parameters can be
passed in Simple mode.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


86 TestComplete 7 Made Easy

· RunAs - Launches the application under the user account specified by the parameters dialog.

· Debug - Launches the application under the same user account as TestComplete, then TestComplete
attaches to the application as a "debugger". The stack trace of any exception that occurs in the
application while the test(s) are being run will be recorded in the TestLog. This option requires debug
information in the application under test.

· Profile - Launches the application inside of AQTime using the profile (or AQTime project) specified in
the parameters dialog. For example code coverage profiling could be used to see how much of the
code is being tested by your automated tests.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Project Items 87

6.3 Summary
In this section we had a brief overview of the project items of TestComplete. We also looked at the Tested
Application project item in more detail.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

VII
Test Log
Test Log 89

7 Test Log
7.1 Objective
This section discusses the test log and the types of messages available in TestComplete. We will learn
how to email the test log and also how to reduce the size of the test log. In this section you will:

· Learn about the basic Test (Results) Log.


· How to view the Test Log in Internet Explorer.
· How to reduce test log size using LockEvents.
· Learn how to email the test log.

7.2 Test Log


Logs are used to persist feedback from your tests including errors, warning messages and events as well
as entire files and images. Logs are stored in a directory as XML files.

Log Tree
This area will have a node for each Test Item level used to run the test. In the image above, for example, a
project suite was run. The project suite is the top (root) node and each project is represented by the child of
the project suite. The statuses of child items in the tree bubble up to the parent items. In the screenshot
above you can see that errors flagged in child level items (the red X indicates the error status) have bubbled
up to the project suite node.

The context menu for the Log Tree contains menu items to handle the log output including Export to IE,
Send Email and the ability to view closed Log Panels.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


90 TestComplete 7 Made Easy

Test Log
This area contains messages coming from both TestComplete and the script code. There are six different
types of messages:

· Message - Can come from TestComplete or from the script code (Log.Message), will not cause the test
to fail.
· Warning - Can come from TestComplete or from the script code (Log.Warning), not necessary a failure
for the test but could be an indicator for why a test failed.
· Error - Can come from TestComplete or from the script code (Log.Error), this indicates a failure for the
test.
· Events - Usually comes from TestComplete but can come from the script as well (Log.Event), does not
cause the test to fail. TestComplete generates an event for every mouse-click or keyboard entry in the
test.
· Image - Usually comes from script code (Log.Picture) but TestComplete can generate as well (Region
Checkpoints).
· File - There are two types of File log items. Log.File, will copy the file into the directory holding the log
XML file and creates a hyperlink to the file. Log.Link just creates a hyperlink to the file without copying
the file.

The test log area may have a hierarchical structure via creating and pushing log folders onto the log (Log.
AppendFolder, Log.CreateFolder/Log.PushLogFolder, Log.PopLogFolder). All messages by default
go into the last pushed log folder (i.e., the top of the stack).

7.3 Emailing Result


Sending the result via email can be done either by script code (see help file for examples) or after the test
run by selecting Send via Email... from the Log Tree context menu. Selecting Send via Email... creates
an email with a multi-part hypertext file attachment. To preview what this file will look like, select View
Results in IE from the context menu. View Results in IE also shows how TestExecute will display Test
Results after a test run.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Test Log 91

7.4 LockEvents
With any long running test, the test result log will be filled with hundreds if not thousands of events.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


92 TestComplete 7 Made Easy

Most of the time, the tester is not interested in events unless there is a problem in the test run.
TestComplete can eliminate events unless an error occurs. By adding Log.LockEvents to the script code,
no events will be placed into the test log unless an error occurs. By default the last 20 events are logged,
but this can be changed by adding a parameter to the Log.LockEvents command.

7.5 Summary
In this section we learned about the test log and the different type of messages available in TestComplete.
We learned how to email the test log and also how to reduce the size of the test log.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

VIII
Name Mapping
94 TestComplete 7 Made Easy

8 Name Mapping
8.1 Objectives
This section introduces Name Mapping and Aliases used to handle long object identifiers and to provide
identifiers with meaningful names. In this section you will learn about:

· Named Mapping.
· Aliases and how they are different from Name Mapping
· How TestComplete uses Alias and Name Mapping.

8.2 Map to Object


TestComplete 7 provides automatic Name Mapping and Aliases to tame extremely long object identifiers
that have somewhat unclear default names. For example:

Sys.Process("Hello").Panel1.Panel2.Container1.Container2.button1

Clearly there are numerous issues with this identifier, its long and awkward not to mention we have no clue
about the purpose or identity of "Container1", "Container2" or "button1". Named Mappings allow you to
rename Panel1, Panel2, Container1, Container2 and button1 to useful names like MyPanel, myInsidePanel,
myTabs, myPages and btnSubmit. The issue here is that you still need to type:

NameMappings.Sys.Process("Hello").MyPanel.myInsidePanel.myTabs.myPages.btnSubmit

TestComplete 7 creates an Alias to represent this long string. If you create the Alias "btnSubmit", you only
need to type:

Aliases.btnSubmit

Consider the Orders.exe applications that comes as an example with TestComplete 7, located under Vista
in "C:\Users\Public\Documents\TestComplete 7 Samples\Open Apps\OrdersDemo\C#\bin\Debug":

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Name Mapping 95

For Example, if I want to have access to the header control in the table, TestComplete already sees the
header as "Sys.Process("Orders").WinFormsObject("MainForm").WinFormsObject("OrdersView").Window
("SysHeader32", "", 1)" but in TestComplete 7, during recording, the automatic NameMapping feature takes
place and records the mapping as "NameMapping.Orders.MainForm.OrdersView.SysHeader32" which
makes it much easier to understand and work with in scripts.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


96 TestComplete 7 Made Easy

The main difference between the NameMapping section and the Aliases section is the fact that the Name
Mapping has to respect the parenthood of the hierarchy of the controls on the form, but the Aliases section
can make the line of script much smaller by creating a specific Alias to a specific control that can be
referred to anytime directly in the script.

So, with that said, we can access the Header Control in 3 different ways based on the example above:

 Sys.Process("Orders").WinFormsObject("MainForm").WinFormsObject("OrdersView").Window
("SysHeader32", "", 1)

 NameMapping.Orders.MainForm.OrdersView.SysHeader32

 Aliases.Orders.MainForm.OrdersView.SysHeader32

But we can also drag the SysHeader32 from the NameMapping Section to the Aliases Section to make it at
the same level as "Sys" like so:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Name Mapping 97

That would allow us to access the Header in a fourth way as:

Aliases.SysHeader32

In this way, Aliases allow you to ignore on-screen objects that were used for design but are not necessary
to the test automation process.

Let's say now you need to manually add the Toolbar to your Name Mapping Project Item:

From the Object Browser tab, right click on the Toolbar window item and choose "Map the Object Name"

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


98 TestComplete 7 Made Easy

The Object Name Mapping Window appear that allow you to specify a new name for the Toolbar, if you
wish, give it a description, and mainly select the properties that would make the component unique on the
form.

By moving properties from the "Available" list to the "selected" list, it make TestComplete identify that
control on the form by these attributes. Of course, the more properties you select the more unique the
control would be.

The reason that is important is the fact of what happens if there are TWO controls at the same ownership
level with the same selected properties that are equal to each other, how does TestComplete know how to
differentiate between them at runtime when the script is run?

That is why it is very important that you differentiate between your instances of controls or components with
the least amount of properties (for speed) to make the call in the script not ambiguous.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Name Mapping 99

8.3 Highlight Objects


During mapping or after the fact, objects being referred to can be highlighted on the screen. In the Name
Mapping dialog, this is done by pressing the Highlight button.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


100 TestComplete 7 Made Easy

In the NameMapping project item editor, highlighting is done by selecting Highlight on Screen from
the context menu (right-clicking).

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Name Mapping 101

8.4 Mapping Dialog


The parts of the Mapping dialog are listed below:

· Mapped Name - lets you define the name for an on screen object

· Description - short note about the object

· Selected Properties - the properties that are used to define this on screen object for name
mapping.

· Available Properties - additional properties that can be use to help refine the name mapping.

· Template Name - which template that TestComplete used to define the Selected Properties
initially.

· Select - if the on screen object matches one than one possible template, this button allows you to
choose which template to use.

· Templates - Allows you to add/edit Templates.

· Highlight - Highlights the currently selected object on the screen if possible.

· OK - Add the selected object to both the Mapped Objects and the Aliases sections of the
NameMapping project item.

· Skip - Add the selected object to the Mapped Objects only.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


102 TestComplete 7 Made Easy

· Cancel - Cancel the mapping at this point (all items mapped before will still be mapped).

· Help - Brings up the help on this dialog.

8.5 Aliases in Scripts


If you are recording a script and have the NameMapping project item in the current project, TestComplete
will first try to use the Aliases project item in the recording. If that does not work, it will use the
NameMapping project item. In manual coding you can use the Aliases as well. If the Alias object is
available in the Object Browser, then TestComplete will present all the properties and methods for that
object. If the object is not available in the Object Browser, TestComplete will present a smaller subset of
methods and properties. This can be changed in the Options dialog (Tools | Options| Engines | Name
Mapping) by selecting the Store CodeCompletion Information. This does increase the size of the
NameMapping project item file but allows you to code without having the tested application open.

8.6 Summary
We learned about what name mapping is and what it is used for. The difference between Aliases and Name
Mapping was explained. And we learned how to map an object from the screen.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

IX
Unit Testing
104 TestComplete 7 Made Easy

9 Unit Testing
9.1 Objectives
This section discusses unit testing, the types of unit test frameworks supported by TestComplete and
provides an example of using an NUnit unit test. In this section you will:

· Learn about the types of unit test framework supported by TestComplete.


· See an example of using a Unit Test.

9.2 Supported Unit Testing Types


Running unit tests within TestComplete has several advantages:

· Management gets a single report that includes both unit and automated tests.
· Provides an easy way for Quality Assurance to run unit tests (in addition to Developers running unit
tests).
· Can make it possible to run unit tests as part of the build process.

TestComplete supports five different types of Unit Testing:

· DUnit - A unit test framework for Delphi Applications, require that the test application be compiled as
open and include the tcDUnitSupport.pas file.
· JUnit - A de-facto standard unit test framework for Java Applications.
· MSTest - A unit test framework designed by Microsoft for unit testing .NET applications, comes with
Visual Studio 2008 and Visual Studio 2005 Team Edition.
· NUnit - An open-source unit test framework based on JUnit, used for unit testing .NET applications.
· TCUnitTest - A unit test frame work that allows unit testing of any open application.

Some of the unit test frameworks require that TestComplete know where the test runner application is
located on the test machine. The information can be entered in the Options Dialog (Tool | Options from the
main menu). From the Options Dialog select Engines | Unit Testing.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Unit Testing 105

9.3 NUnit Example


NUnit is a popular .NET unit testing framework (available at http://www.nunit.org). When it is installed, it
includes a sample unit test assembly.
1. Add a Unit Testing Project Item to your project.
2. Add a NUnit Project Item under the Unit Testing Project Item.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


106 TestComplete 7 Made Easy

3. Click the ellipses button for the Assembly file name. Add the Assembly that holds the NUnit tests.
4. Push the OK button. This will open the NUnit editor in TestComplete.

5. Right-Click the NUnit1 Project Item and run the test.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Unit Testing 107

The screenshots below show sample output and logging for the test run.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


108 TestComplete 7 Made Easy

9.4 Hands on Lab: Running a Unit Test


1. Create a new project
2. Add the "TestedApps" Project Item.
3. Add the "UnitTestingDemo" application to the project from the directory "<TestComplete Install
Dir>\Samples\Unit Testing\C#\bin\"
4. Run the Application (Right-Click on the "UnitTestingDemo" Project Item).

5. Add a "Unit Testing" Project Item


6. Add a "TCUnitTest" Project Item to the "Unit Testing" Project Item.

7. Click the ellipsis button (...) next to the process.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Unit Testing 109

8. Select the "UnitTestingDemo" Process.


9. Select the Mode of "Run selected tests only".
10. Click the Load button.
11. Uncheck the "ShowNum" Method (this method has a UI which we do not want to handle in a unit test).
12. Click Run on the "TCUnitTest1" Project Item.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


110 TestComplete 7 Made Easy

Most of the work for Test Cases in the Unit Test is done by the developer in the Application.

9.5 Summary
We learned about the types of unit test frameworks supported by TestComplete and how to use an NUnit
unit test.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

X
Manual Testing
112 TestComplete 7 Made Easy

10 Manual Testing
10.1 Objectives
This section discusses TestComplete's Manual Testing features, how to construct a simple manual test
using one of the provided sample applications and how to interact with manual tests from scripts.

In this section you'll learn:


· What a Manual Test is
· How to setup a Manual Test Project
· How to create a Manual Test
· How to use script within a Manual Test

10.2 Setting up a Manual Test Project


A Manual Test in TestComplete is a test that is performed by an individual who is directed by instructions
presented on screen. TestComplete Manual Tests allow the person performing the test to indicate whether
or not the test passed or failed and provide additional feedback in the event of a failure.

Creating a New Manual Test


There is no default template for creating a Manual Test so we'll walk through setting up a new project for
Manual Testing:

1. From the main menu select File | New | New Project... which will display the Create New Project
dialog

2. Select General Purpose Test Project and click OK

3. On the Project Wizard dialog click the Unselect All button then under Project Items check Manual Test
and Tested Applications items

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Manual Testing 113

You now have a test that's setup for Manual Testing.

10.3 Hands on Lab: Create a Manual Test


The step-by-step walk-through below demonstrates how to create a manual testing project, set up a manual
test, add steps to the manual test and how to run the manual test.

Creating a Manual Testing Project


1. Create a Project in TestComplete (with a new Project Suite)

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


114 TestComplete 7 Made Easy

2. Select General-Purpose Test Project Template and click OK

3. On the Project Wizard dialog click Unselect All and then check Manual Test and Tested Application

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Manual Testing 115

4. Click Finish

Setting up a Manual Test


Here we'll walk through setting up a Manual Test using a sample application provided with TestComplete
called Orders.exe.

1. Right click on TestedApps and select Add | New Item...

2. Select Orders.exe (which is a sample application included with TestComplete)

3. Double click on ManualTest1 to open the editor in the Workspace

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


116 TestComplete 7 Made Easy

4. Change Test caption to "Manual Test" and Test description to "Hands on Lab"

5. Under Test instructions type "Orders application must be running to complete this test"

6. Under Test Steps right-click and select Preview Step Dialog... (click Yes on the prompt to save the
dialog)

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Manual Testing 117

7. Click Cancel to close the dialog

Adding Steps to a Manual Test

1. Under Test Steps click the Add Step button

2. In the Step caption edit box type "open"

3. Add the directions for opening a table to the Step Instructions

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


118 TestComplete 7 Made Easy

4. Add another step using the Add Step button and set the caption to "Add Order and Verify Quantity"

5. Enter the following Step Instructions:


a. Select Order | New Order... from the main menu
b. Enter 2 in the Quantity Field
c. Verify that the Total Field equals 200

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Manual Testing 119

Running a Manual Test


In this section we'll walk through running a manual test and logging mock failures along the way.

1. In the Project Explorer right click ManualTest1 and select Run ManualTest1

2. Click Begin Test

3. Click Fail

4. Enter "Unable to find table" in the comment field

5. Click Try Again

6. Follow the rest of the step's instructions

7. Click Success

8. Click Fail on the next step

9. Click Continue

At this point, you should see the following test log:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


120 TestComplete 7 Made Easy

10.4 Hands on Lab: Scripting and Manual Testing


In this section we'll illustrate using Scripts with manual tests and cover how to hook Manual test events.

Using Manual Tests from Script Code


1. Create a new TestComplete project.
2. Add the Orders.exe sample application to the TestedApps Project Item.
3. Under the Scripts node in the Project Explorer double click Unit1 to open the code editor. VBScript is
used in this example. NOTE: Your code will differ if you're using a scripting language other than
VBScript though the basic concepts still apply.
4. In the Main routine, add a blank line under the "Enter Code Here" comment
5. Press Ctrl-Space to display the Code Completion window
6. Select TestedApps from the list. Note: Once the list appears you can begin typing to select the item
from the list.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Manual Testing 121

7. With the cursor at the end of TestedApps type a period "." to invoke the Code Complete again and
select Orders
8. Type another period and select Run
9. Press Return to add a new blank line below TestedApps.Orders.Run()
10. Press Ctrl-Space to display the Code Completion window
11. Select ManualTest1
12. Type "." and select Start
13. Press Return to add a new line below ManualTest1.Start
14. Press Ctrl-Space to display the Code Completion window
15. Select TestedApps
16. Type a period "." and select TerminateAll

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


122 TestComplete 7 Made Easy

Script Interactions with Manual Tests


In this example, we'll illustrate using Events and Script to interact with a user during a Manual Test. This
example will build upon the Manual Test created in the previous step.
1. With the previous project still open expand the Events node in the Project Explorer
2. Double click the GeneralEvents node

3. In the Workspace under Available Events expand the Manual Testing Events node

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Manual Testing 123

4. Double click the OnBeforeStep event to add the event to your test
5. Under Events to Handle scroll the list down and locate the Manual Testing Events node

6. Click on the OnBeforeStep item then click the New button

7. Click OK on the New Routine dialog to add a new function to the Unit1 test script

8. In your Unit1 script file add a new blank line below the function declaration and type 'BuiltIn.
ShowMessage("Hi from script")'

9. Run the Project and click the Begin Test button. Notice the ShowMessage dialog appears:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


124 TestComplete 7 Made Easy

10.5 Summary
In this section, we learned about TestComplete's Manual Testing features and constructed a simple manual
test using one of the provided sample applications. We also illustrated how you can interact with manual
tests from scripts.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

XI
Basic Record and Playback
126 TestComplete 7 Made Easy

11 Basic Record and Playback


11.1 Objectives
This section demonstrates how to perform basic record and playback tasks including:
· Understanding the recording toolbar.
· How to start a recording.
· How to use buttons on the Recording Toolbar.
· Perform a basic recording.

11.2 Overview
TestComplete has rich Record/Playback functionality allowing you to quickly record new test scripts.
TestComplete has several options that allow you to control how recording is performed. To view/change
these options select Tools | Options... and click the Engines folder and select Recording. You should see
the following options:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Basic Record and Playback 127

11.3 Recording Toolbar Anatomy

TestComplete Recording Toolbar


The TestComplete recording toolbar looks like this:

The buttons are as follows:

Add Comment to Test

Run Tested Application

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


128 TestComplete 7 Made Easy

Run a Script Extension

Add Checkpoint From the List

Start Recording

Stop Recording

Pause Recording

Record Keyword Test

Record Low Level Procedure (screen coordinates)

Record Low Level Procedure (window coordinates)

Record Script

Record an HTTP Task

More Details

Clicking the More Details button will expand the toolbar so that it displays Parent and Object name data
for the item underneath the mouse cursor.

Starting a Recording
To start a recording you must have a project loaded. You can load an existing project or start a new project.
Once you have a project loaded there are two ways to begin a new recording:

1. Selecting Test | Record from the TestComplete main menu

2. Press the Record toolbar button on the Test Engine toolbar:

11.3.1 Adding Text

The Add Text to Script toolbar button allows you to insert either script or comments into the routine
that's currently being recorded. Clicking this button displays the Add Text to Script dialog:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Basic Record and Playback 129

Notice there is a checkbox at the bottom that allows you to indicate that the text is to be inserted as a
comment. There is also a Pick Object... button that allows you to insert a line of code that references a
specific onscreen object.

11.3.2 Changing Recording Types

The recording toolbar has several buttons (see circled buttons below) that allow you to control the type of
recording being performed.

The different recording types are:

Record a Keyword Test

Record Low Level Procedure based on screen coordinates

Record Low Level Procedure based on window coordinates

Record a Script (default)

Record an HTTP task

To switch the type of recording simply click the appropriate button.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


130 TestComplete 7 Made Easy

11.3.3 Pausing

TestComplete allows you to pause in the middle of a recording by clicking on the Pause button. Pausing
a test allows you to manipulate the application under test or change the environment without recording any
of those actions into the script. To resume a paused test click the Start Recording button.

11.3.4 Stopping

To stop a recording click the Stop button. Clicking the Stop button will close the Recording toolbar and
restore the TestComplete main window leaving you in the Code Editor on the newly recorded script.

11.4 Hands on Lab: Perform a Basic Recording

Recording a Basic Script


1. Create a new project and project suite using the General Purpose Test Project template:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Basic Record and Playback 131

2. Click the Record button on the toolbar

3. Click the Windows Start button

4. Select Run...

5. Type "notepad.exe" and click the OK button

6. Once Windows Notepad starts type "this is a test from TestComplete"

7. Click the Stop button on the recording toolbar to end the recording

11.5 Summary
In this section you learned how to perform basic record and playback tasks. We discussed the
functionality available on the toolbar including how to record various types of activity.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

XII
Low Level Procedure
Low Level Procedure 133

12 Low Level Procedure


12.1 Objectives
In this section you will:
· Get a clear understanding of when to use Low Level Procedure
· Understand the choices for Low Level Procedure during recording
· Understand the editing screen of Low Level Procedure after the recording session
· How to play back a Low Level Procedure session successfully

12.2 Recording
The reason you want to use the Low Level Procedure feature in TestComplete is when the need arises for
recording specific mouse or keyboard operations on the screen for playback that are not automatically
recorded during a regular recording session.

For example, if TestComplete would record every mouse and keyboard operation automatically during each
recording session, we would have ended up with thousands of lines of script identifying the mouse
movement coordinates and clicks, while in most cases these are not necessary.

On the other hand, if you are trying to Paint in a program like MS Paint or trigger a Hover event inside of
Internet Explorer or Firefox, it is very much necessary that the recorder brings in the valuable mouse and
keyboard coordinates, clicks and keystrokes.

1. Start a new project normally in TestComplete as shown in the figure below:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


134 TestComplete 7 Made Easy

2. Make sure to enable Low Level Procedure Collection in the Project Wizard. If you forget, no worries.
You will still be able to add it to the project after the fact using the Add New Item menu of the project in
the Project Explorer.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Low Level Procedure 135

3. When you start a recording session in TestComplete, you are presented with the recording tool bar
shown below. On the recording tool bar are two buttons that enable Low Level Procedure recording:

· The Screen Coordinates based button, which automatically set the coordinates for the recording as
(0,0) to be the top most left of the screen.
· The Window Coordinates based button, which sets the (0,0) coordinates starting from top most left
window under recording.

Tip: For a smoother playback and easier implementation between different resolutions on the
screen, we recommend the "Window Coordinates" button to be used.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


136 TestComplete 7 Made Easy

12.3 Hands on Lab: MS Paint Test


In this lab, we will record a Low Level Procedure to sign a name on the screen with MS Paint.
1. Start a new Project
2. Enable Low Level Procedure Collection in the Wizard.
3. Start MS Paint in the Windows Directory or System32 directory depending on your version of
Windows.
4. Start recording
5. Choose the Low Level Procedure - window coordinates button from the recording toolbar.
6. Drag the button from step 5 above to the MS Paint main window of the application until you see a red
line around the entire MS Paint window.
7. The Create Project item dialog below will appear. Name your collection "MSPaintCollection" and click
OK to close the dialog.

8. Start signing your name or painting anything in the MS Paint application

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Low Level Procedure 137

9. Upon completion of your masterpiece, stop the recorder from the TestComplete recording toolbar.

10. Notice that TestComplete did not record any of the clicks on the MS Paint application, but added one
line of code to function Test1 to execute the collection of mouse movements and clicks collected during
the recorded session.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


138 TestComplete 7 Made Easy

11. TestComplete collected all the mouse movement and clicks from the recorded session into an
LLCollection item in the project called "MSPaintCollection" (see above).

12. Double click the MSPaintColection item in the project Explorer.

13. Notice the 900 + entries that were added to the collection to record all the mouse movement and clicks.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Low Level Procedure 139

14. Each record contains the mouse operation (down, up, move), the number of the operation, the event
name itself, the parameters of the mouse at that time (X & Y coordinates) and finally the delay in
milliseconds between operations.

15. The nice thing about this workspace area is that you are able to modify 1 or a bunch of these 900
records at will. You can reduce the amount of time between operations, delete meaningless mouse
movements that are not needed or even change the mouse coordinates on the screen after the fact.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


140 TestComplete 7 Made Easy

You can now try to playback the recording by running the routine. What happened? Are you surprised?

Well, you probably saw the mouse moving on top of the TestComplete Editor in a pattern exactly as you
expected would happen in MS Paint. That is because nothing caused the MS Paint application to come to
the front or be activated.

To fix that issue for your script, always activate the window that needs to be focused and top-most before
running your low level procedures.

[JScript]
function Test1()
{
Sys.Process("MSPAINT").Window("MSPaintApp", "*").Activate();
LLCollection1.MSPaintCollection.Execute(
Sys.Process("MSPAINT").Window("MSPaintApp", "*"));
}

12.4 Summary
In this section we covered how and when to use a Low Level Procedure, recording choices, editing a
recording and used the Low Level procedure workspace to change coordinates, delays and events. We also
fixed a situation where the testing environment did not work as first expected.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

XIII
Stores and Checkpoints
142 TestComplete 7 Made Easy

13 Stores and Checkpoints


13.1 Objectives
This section explores how to compare various testing input including visual areas of the screen, files and
objects.
In this section you'll learn:
· What a Region is.
· How to create a Region Checkpoint.
· How to do a File Comparison.
· How to compare multiple properties of an object.

13.2 Region Checkpoints


Region Checkpoints allow for the comparison of an area of the screen with a baseline. The baseline is
stored in the Project Item called "Regions" under the Project Item called "Stores". A Region Checkpoint
can be created either while recording or from the toolbar at test design time.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Stores and Checkpoints 143

Creating a Region Checkpoint Interactively


An example of creating a region checkpoint:
1. Open Internet Explorer to www.google.com.
2. Open a project in TestComplete.
3. Click Create Region Checkpoint from the Editor's Tools toolbar of TestComplete.
4. Add the Stores project item if not already in the TestComplete project.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


144 TestComplete 7 Made Easy

5.

6. Use the Finder tool to select the Google logo

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Stores and Checkpoints 145

7.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


146 TestComplete 7 Made Easy

8.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Stores and Checkpoints 147

9.

The tolerance property is measured in PIXELS and will allow you to define how many pixels can differ
between the two regions before the compare would error out.

10. Name the picture "imageLogo" and click OK in the "Create Region Checkpoint" dialog.

11. Copy the code into a method in TestComplete.


[VBScript]
Sub RegionCompareExample
If (Not Regions.Compare("imageLogo", Aliases.Sys.iexplore.pageGoogle.imageLogo,
False, False, True, 0)) Then
Call Log.Error("The regions are not identical.")
End If
End Sub

[JScript]
function RegionCompareExample()
{
if(!Regions.Compare("imageLogo", Aliases.Sys.iexplore.pageGoogle.imageLogo,
false, false, true, 0))
Log.Error("The regions are not identical.");
}
12.Run the method. No errors should be part of the test log.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


148 TestComplete 7 Made Easy

13.Double-click on the Regions project item to bring up the editor.

14.Notice that the Tooltip saying "Google" is part of the image


15.Run the method again. There will be an error in the test log.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Stores and Checkpoints 149

The log results show:

· The first picture in the log is the expected image (the one stored in the Region project item).
· The second picture in the log is the actual image.
· The third picture in the log (the one shown) is the difference between the two images (shown in red
pixels).

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


150 TestComplete 7 Made Easy

Creating a Region Checkpoint in Script


Image comparison can also be done by using the Picture object of any OnScreen Object:
[VBScript]
Sub PictureComplareExample
if not Sys.Process("iexplore").Page("http://www.google.com/"). _
Table(0).Cell(1, 0).Link(0).Image("nav_r1_c1"). _
Picture.Compare(Regions.GetPicture("Logo")) then
Call Log.Error("The OnScreen Object is different")
End if
End Sub

[JScript]
function PictureCompareExample()
{
if (!Sys.Process("iexplore").
Page("http://www.google.com/").Table(0).
Cell(1, 0).Link(0).Image("nav_r1_c1").Picture().
Compare(Regions.GetPicture("Logo")))
{
Log.Error("The OnScreen Object is different")
}
}

13.3 File Comparisons


TestComplete can compare files using:

· A simple byte by byte comparison (Checkpoint) of two files.


· Comparing file hash values (see Hash Values below).
· A third-party difference engine. Settings for the third party difference engine can be set through Tools |
Options to open the Options dialog, then select Engines | Stores.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Stores and Checkpoints 151

Create a File Checkpoint


To create a File Checkpoint:
1. Select File Checkpoint from the "Tools" toolbar.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


152 TestComplete 7 Made Easy

2. This will display the Create File Checkpoint dialog.

3. Select two files to compare. You can find them either on disk or using the "Files" Project Item.
4. If you know the files are different and want to compare them, click the "Calculator" button next to the
Hash value edit box.
5. Press the OK button.
6. Copy the code to a new method.
[VBScript]
Sub FileCompareExample
If (Not Files.Compare("Sample1.txt", "Sample2.txt", 0, True)) Then
Call Log.Error("The files are not identical.")
End If
End Sub

[JScript]

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Stores and Checkpoints 153

function FileCompareExample()
{
if(!Files.Compare("Sample1.txt", "Sample2.txt", 0, true))
Log.Error("The files are not identical.");
}

Using Hash Values


If there are known difference between files, you can still compare the files by using a hash value. For
example, consider the two xml files below:
[XML (Contacts.XML)]
<?xml version="1.0" encoding="utf-8" ?>
<Contacts>
<Contact>
<Name>Eric</Name>
<Company>Falafel</Company>
<Phone>888 GOT-FALAFEL</Phone>
</Contact>
<Contact>
<Name>Lino</Name>
<Company>Falafel</Company>
<Phone>888 GOT-FALAFEL</Phone>
</Contact>
<Contact>
<Name>Drew</Name>
<Company>AutomatedQA</Company>
<Phone>(978) 236-7900</Phone>
</Contact>
<Contact>
<Name>Derek</Name>
<Company>AutomatedQA</Company>
<Phone>(978) 236-7900</Phone>
</Contact>
</Contacts>

[XML (Test.XML)]
<?xml version="1.0" standalone="yes" ?>
<Contacts>
<Contact>
<Name>Eric</Name>
<Company>Falafel</Company>
<Phone>888 GOT-FALAFEL</Phone>
</Contact>
<Contact>
<Name>Lino</Name>
<Company>Falafel</Company>
<Phone>888 GOT-FALAFEL</Phone>
</Contact>
<Contact>
<Name>Drew</Name>
<Company>AutomatedQA</Company>
<Phone>(978) 236-7900</Phone>
</Contact>
<Contact>
<Name>Derek</Name>
<Company>AutomatedQA</Company>
<Phone>(978) 236-7900</Phone>
</Contact>

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


154 TestComplete 7 Made Easy

<Contact>
<Name>Test</Name>
<Company>Test</Company>
</Contact>
</Contacts>

If there are known difference between files, you can still compare the files by using a hash value. To
compare these two files, the code would look like the example below:

Caution: The order that the files are compared makes a difference in the calculated Hash Value.
For example, consider the two xml files below. The hash value from TestComplete if "Contacts.XML"
is the first file in the comparison is 1812515919, if "Test.XML" is the first file the hash value is
1883158225. So the order of the comparison makes a difference in what the final hash value used
in the Compare() function is.

[VBScript]
Files.Compare("Contacts.XML","Test.XML",1812515919,True)

[JScript]
Files.Compare("Contacts.XML","Test.XML",1812515919,true)

To get the hash value for two files:


[VBScript/JScript]
Hash = Files.CalculateHashValue("Contacts.XML","Test.XML")

Note: Use the XML checkpoint to compare XML files.

13.4 Object Comparisons


Object Comparisons allow the comparison of multiple properties of an Onscreen Object (and the children of
that object, if desired). Create Object Checkpoint can be invoked with either the recording toolbar or the
"Tools" toolbar:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Stores and Checkpoints 155

· Use the finder icon to select the onscreen object.


· If the object had children, TestComplete will ask if you want to save the properties of the child objects.

· Depending on the type of OnScreen object, TestComplete will select certain properties for you for
comparison. Any of the unselected properties can be added for comparison.
[VBScript]
Sub ObjectCompareExample
If (Not Objects.Compare(Sys.Process("iexplore").
Page("http://www.activefocus.net/").Panel(0), "Panel", True)) Then

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


156 TestComplete 7 Made Easy

Call Log.Error("The objects are not identical.")


End If
End Sub

[JScript]
function ObjectCompareExample()
{
if(!Objects.Compare(Sys.Process("iexplore").
Page("http://www.activefocus.net/").Panel(0), "Panel", true))
Log.Error("The objects are not identical.");
}
· TestComplete will report the difference on the first object found with difference only.

13.5 Hands on Lab: Comparing File, Picture and a Property

Comparing Files
1. Create a new project with Events, Script, Stores, and TestedApps Project Items.
2. Add the "StoresSampleProgram" to the TestedApps.
3. Add the "Contacts.XML" to the "Files" Project Item (Copy to Stores).
4. Click the Record button in TestComplete.
5. Run the "StoresSampleProgram"
6. Open "Contacts.XML" in the StoresSampleProgram" (File | Open...)
7. Save the file as "Test.XML" in the StoresSampleProgram (File | Save)
8. Click "Create File Checkpoint" in the recording toolbar.
9. Select "Contacts.XML" as the first file.
10. Select "Test.XML" as the second file.
11. Press the OK button.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Stores and Checkpoints 157

12. Click the Add button on the Add Text to Script dialog.

13. Add a new contact (+ button) and enter contact information.

14. Save as "Test.XML" (File | Save).

15. Click Create File Checkpoint in the recording toolbar

16. Select "Contacts.XML" as the first file.

17. Select "Test.XML" as the second file.

18. Press the OK button.

19. Click the Add button on the Add Text to Script dialog.

20. Close the "StoresSampleProgram" program.

21. Stop the recording.


[VBScript] (Your recording maybe different)
Sub Test1
Dim p1
Dim w1
Dim w2
Dim w3
Dim w4
Dim w5
TestedApps.StoresSampleProgram.Run
Set p1 = Sys.Process("StoresSampleProgram")
Set w1 = p1.Form1
Call w1.StripMainMenu.Click("File|Open...")
Set w2 = p1.Window("#32770", "Open Contacts XML")
Call w2.Window("SHELLDLL_DefView").Window("SysListView32", "FolderView").
ClickItem("Contacts.xml", 0)
w2.Window("Button", "&Open").ClickButton
Call w1.StripMainMenu.Click("File|Save...")
Set w2 = p1.Window("#32770", "Save Contacts File")
Call w2.Window("ComboBoxEx32").Window("ComboBox").Window("Edit").
Keys("Test.XML")
w2.Window("Button", "&Save").ClickButton
If (Not Files.Compare("Contacts.xml","C:\Training\Stores\Test.XML",0,True))
Then
Call Log.Error("The files are not identical.")
End If
Set w2 = w1.WinFormsObject("panel1")
Set w3 = w2.toolStrip1
Call w3.ClickItem("+")
Set w3 = w1.WinFormsObject("dataGridView1")
Call w3.ClickCell(4, "Name")
Set w4 = w2.textBox1
Call w4.Click(17, 11)
Call w4.Keys("Test[Tab]")
Set w4 = w2.textBox2
Call w4.Keys("Test")
Set w5 = w2.textBox3
Call w5.Click(15, 6)
Call w5.Keys("Test")
Call w4.Click(71, 4)
Call w3.ClickCell(3, "Name")

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


158 TestComplete 7 Made Easy

Call w1.StripMainMenu.Click("File|Save...")
p1.Window("#32770", "Save Contacts File").Window("Button", "&Save").
ClickButton
p1.Window("#32770", "Save Contacts File", 1).Window("Button", "&Yes").
ClickButton
If (Not Files.Compare("Contacts.xml", "C:\Training\Stores\Test.XML", 0, True))
Then
Call Log.Error("The files are not identical.")
End If
w1.Close
End Sub

[JScript]
function Test1()
{
var p1;
var w1;
var w2;
var w3;
TestedApps.StoresSampleProgram.Run();
p1 = Sys.Process("StoresSampleProgram");
w1 = p1.Form1;
w1.StripMainMenu.Click("File|Open...");
w2 = p1.Window("#32770", "Open Contacts XML");
w2.Window("SHELLDLL_DefView").Window("SysListView32", "FolderView").
ClickItem("Contacts.xml", 0);
w2.Window("Button", "&Open").ClickButton();
w1.StripMainMenu.Click("File|Save...");
w2 = p1.Window("#32770", "Save Contacts File");
w2.Window("ComboBoxEx32").Window("ComboBox").Window("Edit").Keys("Test.XML");
w2.Window("Button", "&Save").ClickButton();
if(!Files.Compare("Contacts.xml", "C:\\Training\\Test.XML", 0, true))
Log.Error("The files are not identical.");
w2 = w1.WinFormsObject("panel1");
w3 = w2.toolStrip1;
w3.ClickItem("+");
w1.WinFormsObject("dataGridView1").ClickCell(4, "Name");
w3 = w2.textBox1;
w3.Click(52, 5);
w3.Keys("Test");
w3 = w2.textBox2;
w3.Click(53, 11);
w3.Keys("Test");
w2.Click(205, 102);
w3 = w2.textBox3;
w3.Click(52, 7);
w3.Keys("Test");
w1.StripMainMenu.Click("File|Save...");
p1.Window("#32770", "Save Contacts File").Window("Button", "&Save").
ClickButton();
p1.Window("#32770", "Save Contacts File", 1).Window("Button", "&Yes").
ClickButton();
if(!Files.Compare("Contacts.xml", "C:\\Training\\Test.XML", 0, true))
Log.Error("The files are not identical.");
w1.Close();
}
22. Delete the "Test.XML" file from your system.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Stores and Checkpoints 159

23. Run the new method. The test log will show a file comparison error.

Comparing Regions (Images)


1. Click the record button in TestComplete
2. Run the "StoresSampleProgram"
3. Open "Contacts.XML" in the StoresSampleProgram" (File | Open...)
4. Click the "Create Region Checkpoint" in the recording toolbar.

5. Use the finder tool to select the grid from the "StoreSampleProgram"

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


160 TestComplete 7 Made Easy

6. Push the "OK" button.


7. Click the "Add" button in the "Add Text to Script" dialog.
8. Close the "StoresSampleProgram"
9. Stop the recording.
10. Run the new method.
[VBScript]
Sub Test2
Dim p1
Dim w1
Dim w2
TestedApps.StoresSampleProgram.Run
Set p1 = Sys.Process("StoresSampleProgram")
Set w1 = p1.Form1
Call w1.StripMainMenu.Click("File|Open...")
Set w2 = p1.Window("#32770", "Open Contacts XML")
Call w2.Window("SHELLDLL_DefView").Window("SysListView32", "FolderView").
ClickItem("Contacts.xml", 0)
w2.Window("Button", "&Open").ClickButton
If (Not Regions.Compare("WinFormsObject_dataGridView",
Sys.Process("StoresSampleProgram").WinFormsObject("Form1").
WinFormsObject("dataGridView1"),False, False, True, 0)) Then
Call Log.Error("The regions are not identical.")
End If
w1.Close
End Sub

[JScript]
function Test2()
{

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Stores and Checkpoints 161

var p1;
var w1;
var w2;
TestedApps.StoresSampleProgram.Run();
p1 = Sys.Process("StoresSampleProgram");
w1 = p1.Form1;
w1.StripMainMenu.Click("File|Open...");
w2 = p1.Window("#32770", "Open Contacts XML");
w2.Window("SHELLDLL_DefView").Window("SysListView32", "FolderView").
ClickItem("Contacts.xml", 0);
w2.Window("Button", "&Open").ClickButton();
if(!Regions.Compare("WinFormsObject_dataGridView",
Sys.Process("StoresSampleProgram").WinFormsObject("Form1").
WinFormsObject("dataGridView1"),false, false, true, 0))
Log.Error("The regions are not identical.");
w1.Close();
}
11. Add the line below before the If in the code. .
[VBScript]
Call w1.WinFormsObject("dataGridView1").ClickCell(1, "Name")

[JScript]
w1.WinFormsObject("dataGridView1").ClickCell(1, "Name");
12. Run the method.

Comparing A Single Property


1. Click the record button in TestComplete

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


162 TestComplete 7 Made Easy

2. Run the "StoresSampleProgram"


3. Open "Contacts.XML" in the StoresSampleProgram" (File | Open...)
4. Click the "Create Property CheckPoint"

5. User the finder tool to select the DataGrid.

6. Click the ellipse button (...) on the Property textbox.

7. Select the "RowCount" property.

8. Click the "Add" button in the "Add Text to Script" dialog

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Stores and Checkpoints 163

9. Close the "StoresSampleProgram"


10. Stop the record.
[VBScript]
Sub Test3
Dim p1
Dim w1
Dim w2
TestedApps.StoresSampleProgram.Run
Set p1 = Sys.Process("StoresSampleProgram")
Set w1 = p1.Form1
Call w1.StripMainMenu.Click("File|Open...")
Set w2 = p1.Window("#32770", "Open Contacts XML")
Call w2.Window("SHELLDLL_DefView").Window("SysListView32", "FolderView").
ClickItem("Contacts.xml", 0)
w2.Window("Button", "&Open").ClickButton
If (Sys.Process("StoresSampleProgram").WinFormsObject("Form1").
WinFormsObject("dataGridView1").RowCount <> 5) Then
Call Log.Error("The property value does not equal the template value.")
End If
w1.Close
End Sub

[JScript]
function Test3()
{
var p1;
var w1;
var w2;
var w3;
TestedApps.StoresSampleProgram.Run();
p1 = Sys.Process("StoresSampleProgram");
w1 = p1.Form1;
w1.StripMainMenu.Click("File|Open...");
w2 = p1.Window("#32770", "Open Contacts XML");
w3 = w2.Window("SHELLDLL_DefView").Window("SysListView32", "FolderView");
w3.ClickItem("Log", 0);
w3.ClickItem("Contacts.xml", 0);
w2.Window("Button", "&Open").ClickButton();
if(Sys.Process("StoresSampleProgram").WinFormsObject("Form1").
WinFormsObject("dataGridView1").RowCount != 5)
Log.Error("The property value does not equal the template value.");
w1.Close();
}
11. Run the routine.

13.6 Summary
In this section we learned about Region (Images) and how to compare two regions. We learn how
TestComplete compares files. And also how to compare multiple properties of an OnScreen object.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

XIV
Data-Driven Testing
Data-Driven Testing 165

14 Data-Driven Testing
14.1 Objectives
This section covers how the Data Driven Testing plug-in consumes various common data types. In this
section you'll learn about:

· The data driven plug-in.

· The different type of drivers available.

· How to modify a script to use a driver.

14.2 Overview
The Data Driven Plug-In (DDT) uses ADO to access different data elements, such a text files, Excel
Spreadsheets, or any ADO compatible database. Once a driver has been initialized, the DDT plug-in
provides a common interface to columns and rows in the data source. These methods/properties are:

· ColumnCount: The number of columns in the data source.


· ColumnName: The name of a given column from the data source.
· Name: The Name of the Driver.
· Value: Returns the value of a column based on the column name or index.
· EOF: Indicates if the driver is at the end of the data source.
· DriveMethod: Iterates through all the records of the database, and executes a script routine for each
record.
· Next: Move to the next record in the data source

The DDT plug-in supports the creation of three different types of drivers, CSVDriver, ExcelDriver, and
ADODriver:

· CSVDriver is used to read text files, such as comma delimited (default) or tab delimited (using a
schema.ini file). By default the first row is the header information (or column names) for the driver.
Example:
Case,User,Password
1,"admin","admin"
2,"user1","pass1"
· ExcelDriver is used to read an Excel spreadsheet. The first row of the sheet is the header information
for the driver.
· ADODriver is a generic driver to read in ADO compatible data source.

14.3 Modifying Scripts


You can modify a simple data entry script to use an outside data as an input source. For example suppose
we have a script that enters a word into notepad:

[VBScript]

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


166 TestComplete 7 Made Easy

Sub Test1
Dim p1
Dim w1
Dim w2
Set p1 = Sys.Process("Notepad")
Set w1 = p1.Window("Notepad", "*")
Set w2 = w1.Window("Edit")
w2.VScroll.Pos = 0
Call w2.Click(144, 26)
Call w2.Keys("TestComplete")
End Sub

[JScript]
function Test1()
{
var w1;
w1 = Sys.Process("notepad").Window("Notepad", "*").Window("Edit");
w1.VScroll.Pos = 0;
w1.Click(274, 105);
w1.Keys("TestComplete");
}

We can modify the script to enter in multiple words from an outside data source. In the example below we
create a list of customers from the AdventureWorksDB:

[VBScript]
Dim MyDriver

Sub Main
Dim SQLStatement
Dim ConnectionString
' Start Notepad
TestedApps.Notepad.Run
' Limit to 100 records
SQLStatement = "SELECT TOP (100) CustomerID, FirstName, LastName FROM" & _
" Sales.vIndividualCustomer"
ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;" & _
"Persist Security Info=False;" & _
"Initial Catalog=AdventureWorks;Data Source=.\SQLExpress"
' Create Driver
Set MyDriver = DDT.ADODriver(ConnectionString,SQLStatement)
' Call Method 100 times
MyDriver.DriveMethod("Unit1.Test1")
End Sub

Sub Test1
Dim p1
Dim w1
Dim w2
Dim KeyStr
Set p1 = Sys.Process("Notepad")
Set w1 = p1.Window("Notepad", "*")
Set w2 = w1.Window("Edit")
w2.VScroll.Pos = 0
' Create String with Customer Information
KeyStr = MyDriver.Value("CustomerID")& "," & _

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Data-Driven Testing 167

MyDriver.Value("FirstName")& "," & _


MyDriver.Value("LastName")& "[Enter]"
Call w2.Keys( KeyStr)
End Sub

[JScript]
var MyDriver

function Main()
{
try
{
var SQLStatement;
var ConnectionString;
// Start Notepad
TestedApps.Notepad.Run();
// Limit to 100 records
SQLStatement = "SELECT TOP (100) CustomerID, FirstName, LastName FROM" +
" Sales.vIndividualCustomer";
ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;" +
"Persist Security Info=False;" +
"Initial Catalog=AdventureWorks;Data Source=.\\SQLExpress";
// Create Driver
MyDriver = DDT.ADODriver(ConnectionString,SQLStatement);
// Call Method 100 times
MyDriver.DriveMethod("Unit1.Test1")
}
catch(exception)
{
Log.Error("Exception", exception.description);
}
}

function Test1()
{
var w1;
var KeyStr;
w1 = Sys.Process("notepad").Window("Notepad", "*").Window("Edit");
w1.VScroll.Pos = 0;
w1.Click(274, 105);
KeyStr = MyDriver.Value("CustomerID")+ "," +
MyDriver.Value("FirstName")+ "," +
MyDriver.Value("LastName")+ "[Enter]";
w1.Keys(KeyStr);
}

As you can see there is very little modification of the initial recording needed to make it ready for Data
Driven Testing. Most of the work is in the setup of the driving method. This example illustrated connecting
to an MS SQL database using an ADO Driver.

14.4 Hands on Lab: Modifying Recording for Data-Driven Testing


1. Create a new project and project Suite.
2. Add the “All Pairs Sample” Sample Application

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


168 TestComplete 7 Made Easy

3. Under the Stores Project Item, right-click the Files and select Add New Item…
4. Add the TestData.txt and the Schema.ini files to the Stores, and click Yes on the Add Files to Stores
dialog.
5. Run the "All Pairs Sample" application.
6. Click Record in TestComplete
7. Select 10 from the track bar in the sample application

8. Select Fair Share from the Allocation Strategy Combo Box

9. Select All Stores from Store Selection Combo Box

10. Check mark the Greedy checkbox.


11. Click the Run Button
12. Select Fair Share from the Allocation Strategy Combo Box again. This is important for later as this
causes the error message to be posted into the correct test case.

13. Stop the recording.


[VBScript]
Sub Test1
Dim w1
Dim w2
Set w1 = Sys.Process("All Pairs Sample").MainForm
w1.WinFormsObject("trackBar1").wPosition = 10
Set w2 = w1.WinFormsObject("comboBox1")
Call w2.ClickItem("Fair Share")
Call w1.WinFormsObject("comboBox2").ClickItem("All Stores")
w1.WinFormsObject("checkBox3").ClickButton
w1.WinFormsObject("button1").ClickButton
Call w2.ClickItem("Fair Share")
End Sub

[JScript]
function Test5()
{
var w1;
var w2;

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Data-Driven Testing 169

w1 = Sys.Process("All Pairs Sample").MainForm;


w1.WinFormsObject("trackBar1").wPosition = 10;
w2 = w1.WinFormsObject("comboBox1");
w2.ClickItem("Fair Share");
w1.WinFormsObject("comboBox2").ClickItem("All Stores");
w1.WinFormsObject("checkBox3").ClickButton();
w1.WinFormsObject("button1").ClickButton();
w2.ClickItem("Fair Share");
}

14. Modify the checkbox line to get rid of the call to Click Button() substitute Checked = true. See the
example code snippet below.

[VBScript]
w1.WinFormsObject("checkBox3").Checked = true

[JScript]
w1.WinFormsObject("checkBox3").Checked = true;

15. We now need to create a routine for reading the data file. In the main routine add a new line.

16. Type in "DDT.CSVDriver()"

17. Move the cursor inside the parentheses, type in "Files.FileNameByName()"

18. Inside the FileNameByName parentheses, type in “TestData.txt” (including the quotes).

19. Add a new line.

20. Type in "DDT.CurrentDriver.DriveMethod()".

21. In the parentheses, add “Unit1.Test1”. Your script should now look something like the example below:
[VBScript]
Sub Main
DDT.CSVDriver(Files.FileNameByName("TestData.txt"))
DDT.CurrentDriver.DriveMethod("Unit1.Test1")
End Sub

[JScript]
function Main()
{
DDT.CSVDriver(Files.FileNameByName("TestData.txt"));
DDT.CurrentDriver.DriveMethod("Unit1.Test1");
}

22. Now to modify the inputs, change the input lines to:
[VBScript]
Sub Test1
Dim w1
Dim w2
Log.AppendFolder(DDT.CurrentDriver.Value("case"))
Set w1 = Sys.Process("All Pairs Sample").MainForm

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


170 TestComplete 7 Made Easy

w1.WinFormsObject("trackBar1").wPosition =
DDT.CurrentDriver.Value("Iterations")
Call w1.WinFormsObject("comboBox2").
ClickItem(DDT.CurrentDriver.Value("Stores"))
Set w2 = w1.WinFormsObject("comboBox1")
Call w2.ClickItem(DDT.CurrentDriver.Value("Strategy"))
w1.WinFormsObject("checkBox3").Checked =
(DDT.CurrentDriver.Value("Greedy") = "Y")
w1.WinFormsObject("button1").ClickButton
Call w2.ClickItem("Fair Share")
Log.PopLogFolder()
End Sub

[JScript]
function Test5()
{
var w1;
var w2;
Log.AppendFolder(DDT.CurrentDriver.Value("case"));
w1 = Sys.Process("All Pairs Sample").MainForm;
w1.WinFormsObject("trackBar1").wPosition =
DDT.CurrentDriver.Value("Iterations");
w2 = w1.WinFormsObject("comboBox1");
w2.ClickItem(DDT.CurrentDriver.Value("Strategy"));
w1.WinFormsObject("comboBox2").ClickItem(DDT.CurrentDriver.Value("Stores"));
w1.WinFormsObject("checkBox3").Checked =
(DDT.CurrentDriver.Value("Greedy") == "Y");
w1.WinFormsObject("button1").ClickButton();
w2.ClickItem("Fair Share");
Log.PopLogFolder();
}

23. Run the project.

Caution: DO NOT TOUCH THE COMPUTER WHILE THE TEST IS RUNNING. There will be an
unexpected window during the test run that TestComplete will handle.

The test log should look something like the example screenshot below:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Data-Driven Testing 171

14.5 Summary
In this section we learned about how the DDT plug-in works and the different types of drivers. We learned
how to modify a script to get values from the DDT driver.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

XV
Event Handling
Event Handling 173

15 Event Handling
15.1 Objectives
This section explains how to respond to events that occur during testing. In this section you'll learn about:

· What Events are.


· How to create script code that responds to an event.
· How to respond to unexpected windows.

15.2 General Events Definition


Events occur based on certain actions and activities that occur in TestComplete, or some other application
that is being tested. For example, every time an error is logged (by TestComplete or your script),
TestComplete generates an OnLogError event. TestComplete has a rich set of events for handling
common scenarios:

General Events

Name Description

OnLogCloseNode Occurs when a log folder is pop off the log.

OnLogCreateNode Occurs when a new log folder is appended on the log.

OnLogError Occurs when an error message is posted to the log.

OnLogEvent Occurs when an event message is posted to the log.

OnLogFile Occurs when a file is posted to the log.

OnLogLink Occurs when a file reference (link) is posted to the log.

OnLogMessage Occurs when a information message is posted to the log.

OnLogPicture Occurs when a picture (image) is posted to the log.

OnLogWarning Occurs when a warning message is posted to the log.

OnOverlappingWindow Occurs when a overlapping window appears.

OnTimeout Occurs when a timeout expires in a project or project suite.

OnUnexpectedWindow Occurs when an unexpected window appears.

OnValidate Occurs when the objects Validate method is called.

HTTP LoadTesting Events

Name Description

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


174 TestComplete 7 Made Easy

OnLoadTestingRequest Occurs just before TestComplete send an HTTP request to the tested Web
Server.

OnLoadTestingResponse Occurs just after TestComplete receives a response to an HTTP request.

Manual Testing Events

Name Description

OnBeforeStep Occurs before the next step is display to the user

OnGetNextStep Occurs when TestComplete get the information about what the next step is to
be executed

OnResume Occurs when a manual test is about to be resumed.

OnStepFailed Occurs when a user click the Fail button in the Step Dialog

OnStepSuccess Occurs when a user click the Success button in the Step Dialog

OnSuspend Occurs when the manual test is suspended

OnTestStep Occurs when the user stops the manual test.

NetworkSuite Events

Name Desciption

OnNetJobStateChange Occurs when a job's state changes.

OnNetSuiteStateChange Occurs when the Network Suite's state changes.

OnNetTaskStateChange Occurs when a task's state changes.

OnNetVarChange Occurs when the value of a Network Suite variable changes.

Test Engine Events

Name Description

OnStartTest Occurs when a TestComplete test starts.

OnStopTest Occurs when a test is over.

Web Testing Events

Name Description

OnWebBeforeNavigate Occurs before the browser navigates to the specified web page

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Event Handling 175

OnWebDownloadStarted Occurs when the download of a web page is starting.

OnWebDownloadComplete Occurs when the download of a web page has completed, failed or halted.

OnWebPageDownloaded Occurs after the browser loads the specified page (or frame)

OnWebQuit Occurs before the browser closes.

15.2.1 OnLogError

One of the most commonly used events, OnLogError can be used to gather addition information about the
state of the system when the error occurred. For example:
1. Expand the "Events" Project Item.
2. Double click the "GeneralEvents" Project Item.
3. Add an "OnLogError" handler to your project by clicking the new button next to the OnLogError event .

4. Click the OK button in the "New Routine" dialog.

TestComplete will create a new routine for you with two parameters: "Sender," which represents the
event handler controller and "LogParams," which contains information on the message just about to be
posted to the TestComplete log file.

Note: If you set LogParams.Locked = true, TestComplete will not post a message at all to the log.

The following code will post a picture of the desktop to the test log along with a duplication of the error

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


176 TestComplete 7 Made Easy

message:

[VBScript]
Sub GeneralEvents_OnLogError(Sender, LogParams)
Call Log.Picture(Sys.Desktop,LogParams.Str)
End Sub

[JScript]
function GeneralEvents_OnLogError(Sender, LogParams)
{
Log.Picture(Sys.Desktop,LogParams.Str)
}

15.3 Unexpected Windows


An unexpected window is defined by TestComplete as a modal dialog (a window that wants all keyboard
and mouse activity for the application) that opens up over the application under test AND TestComplete is
trying to interact with one of the other windows of the application under test.

TestComplete has default handling for an unexpected window if "Ignore unexpected window" is not checked:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Event Handling 177

Default Unexpected Window Handling Behavior


TestComplete performs the following when an unexpected window appears:
1. Waits for the window to disappear on its own up to the Auto-Timeout period (10 seconds by default).
2. Calls the OnUnexpectedWindow event handler if any have been defined.
3. Logs an Error with a picture of the unexpected window.
4. If "Stop On Error" is checked (playback options), the test will stop.
5. If "Stop execution" is checked (playback options), the test will stop.

6. TestComplete will then attempt to close the unexpected window and continue the test.
7. Clicks the focused button (if checked in playback options).
8. Send an ESC key to the window (if checked in playback options).
9. Send an Enter key to the window (if checked in playback options).
10. Send a WM_CLOSE message to the window (if checked in playback options).
11. If TestComplete gets here without being able to close the unexpected window, the test will stop.

15.4 Hands on Lab: Create Unexpected Window Handler


1. Create a project in TestComplete.
2. Add the UnexpectWindow Application to the TestedApps project Item.
3. Click the record button in TestComplete.
4. From the recording toolbar, start the UnexpectedWindow application.
5. Enter "1" in to each of the edit boxes.
6. Click the "Calculate" button.

7. Close the application and stop the recording.


8. Comment out the code for the setting the value of the "numericUpDown2" control.
9. Run the created script.

Example Script:
[VBScript]
Sub Test1

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


178 TestComplete 7 Made Easy

Dim w1
Dim w2
TestedApps.UnexpectedWindow.Run
Set w1 = Sys.Process("UnexpectedWindow").UnexpectedWindow
Set w2 = w1.WinFormsObject("numericUpDown1").WinFormsObject("UpDownEdit", "")
Call w2.Click()
Call w2.Keys("1[Tab]")
'Call w1.WinFormsObject("numericUpDown2").WinFormsObject("UpDownEdit", "").
Keys("1")
w1.WinFormsObject("button1").ClickButton
w1.Close
End Sub

[JScript]
function Test1()
{
var w1;
var w2;
TestedApps.UnexpectedWindow.Run();
w1 = Sys.Process("UnexpectedWindow").UnexpectedWindow;
w2 = w1.WinFormsObject("numericUpDown1");
w2.Click();
w2.Keys("1[Tab]");
//w1.WinFormsObject("numericUpDown2").WinFormsObject("UpDownEdit", "").
Keys("1");
w1.WinFormsObject("button1").ClickButton();
w1.Close();
}

You will get an unexpected window. This unexpected window contains additional information that the
developer can use to track down the issue. So, we will create a event handler for the unexpected
window that will retrieve this information.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Event Handling 179

10. Expand the Events Project Item.


11. Double-click the GeneralEvents Project Item.

12. Click the new Button next to the OnUnexpectedWindow event in the GeneralEvents Editor.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


180 TestComplete 7 Made Easy

13. Click the OK button.


14. In the event add the following code:

[VBScript]
Sub GeneralEvents_OnUnexpectedWindow(Sender, Window, LogParams)
Call Log.Message("Additional Error Information", _
Window.WinFormsObject("TextBox", "").Text)
End Sub

[JScript]
function GeneralEvents_OnUnexpectedWindow(Sender, Window, LogParams)
{
Log.Message("Additional Error Information",
Window.WinFormsObject("TextBox", "").Text);
}

15. Run the created script from above.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Event Handling 181

15.5 Summary
In this section, we have learned about events and the types of events that TestComplete provides. We have
also learned how to attach script code to events. During this time, we learned about one of the most
important events caused by unexpected windows and different options for handling unexpected windows.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

XVI
Working with Databases
Working with Databases 183

16 Working with Databases


16.1 Objectives
TestComplete includes general-purpose mechanisms for connecting to external databases. You can
connect to ActiveX Data Object (ADO) and Borland Database Engine (BDE) data sources. In this section
you will learn:

· How to connect to an ADO database.


· The commands available to manipulate ADO and BDE data sources.
· How to retrieve ADO data and use the data in your tests.

16.2 ADO
ADO stands for "ActiveX Data Object". ADO allows TestComplete to access and manipulate data in a
variety of data source (mostly databases). TestComplete offers two implementations to access ADO
datasources. One route uses native Microsoft methods, the other through Borland (Codegear) methods.

The table below shows the available methods:

Microsoft Borland

CreateCommand CreateADOCommand

CreateConnection CreateADOConnection

CreateADODataSet

CreateADOQuery

CreateADOStoredProc

CreateADOTable

The following Borland methods are specialized extensions of CreateADOCommand: CreateADODataSet,


CreateADOQuery, CreateADOStoredProc, CreateADOTable.

One of the hardest parts to using ADO is getting the connection string correct. You can get this information
from the developer of the project you're testing, or look at http://www.connectionstrings.com.

Caution: TestComplete can not use the .NET-only connection string (for example the
SqlConnection for SQL Server 2005).

To query a database using ADO:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


184 TestComplete 7 Made Easy

1. Create an Connection to the database.


2. Open the Connection.
3. Create an Query Command.
4. Execute the Query Command.
5. Do something with the returned RecordSet.
6. Close the Connection.

The following example uses the AdventureWorkDB (http://www.codeplex.com/MSFTDBProdSamples/


Release/ProjectReleases.aspx?ReleaseId=4004) and SQL Server 2005. The example reads through the
Sales table, logging a customer and account number for each record.

[VBScript]
Sub Main
' Create a new Connection object
Set AConnection = ADO.CreateConnection
' Note that you can also create an ADO connection using the following code:
' Set AConnection = CreateObject("ADODB.Connection")

' Specify the connection string


AConnection.ConnectionString = _
"Provider=SQLOLEDB.1;Integrated Security=SSPI;" & _
"Persist Security Info=False;" & _
"Initial Catalog=AdventureWorks;Data Source=.\SQLExpress"
' Activate the connection
AConnection.Open
' Create a new Command object
Set Cmd = ADO.CreateCommand
' To create an ADO command you can also use the following code:
' Set Cmd = CreateObject("ADODB.Command")
' Specify the connection
Cmd.ActiveConnection = AConnection
' Specify command type and text
Cmd.CommandText = _
"SELECT CustomerID, TerritoryID, AccountNumber, CustomerType," & _
" rowguid, ModifiedDate FROM Sales.Customer WHERE (CustomerType = ?)"
Cmd.CommandType = adCmdText
' Create a new parameter
Set Prm = Cmd.CreateParameter("@CustType",DB.adVarChar, DB.adParamInput)
' Specify the parameter value
Prm.Size= 1
Prm.Value = "S"
Cmd.Parameters.Append(Prm)
' Execute the command
Set RecSet = Cmd.Execute
' Execute the command
RecSet.MoveFirst
While Not RecSet.EOF
Log.Message(RecSet("CustomerID").Value & " has account " & _
RecSet("AccountNumber").Value)
RecSet.MoveNext
WEnd
AConnection.Close

End Sub

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Working with Databases 185

[JScript]
function Main()
{
try
{
var AConnection, RecSet, Cmd, Prm;
// Create a new Connection object
AConnection = ADO.CreateConnection();
// Note that you can also create an ADO connection using the following code:
// AConnection = new ActiveXObject("ADODB.Connection");

// Specify the connection string


AConnection.ConnectionString =
"Provider=SQLOLEDB.1;Integrated Security=SSPI;" +
"Persist Security Info=False;" +
"Initial Catalog=AdventureWorks;Data Source=.\\SQLExpress";
// Activate the connection
AConnection.Open();
// Create a new Command object
Cmd = ADO.CreateCommand();
// To create an ADO command you can also use the following code:
// Cmd = new ActiveXObject("ADODB.Command");
// Specify the connection
Cmd.ActiveConnection = AConnection;
// Specify command type and text
Cmd.CommandType = adCmdText;
Cmd.CommandText =
"SELECT CustomerID, TerritoryID, AccountNumber, CustomerType," +
" rowguid, ModifiedDate FROM Sales.Customer WHERE (CustomerType = ?)"
// Create a new parameter
Prm = Cmd.CreateParameter("@CustType",DB.adVarChar, DB.adParamInput);
// Specify the parameter value
Prm.Size = 1;
Prm.Value = "S";
Cmd.Parameters.Append(Prm);
// Execute the command
RecSet = Cmd.Execute();
// Process the results
RecSet.MoveFirst();
while (! RecSet.EOF )
{
Log.Message(RecSet("CustomerID").Value + " has account " +
RecSet("AccountNumber").Value)
RecSet.MoveNext();
}
AConnection.Close();
}
catch(exception)
{
Log.Error("Exception", exception.description);
}
}

For more information on ADO see Microsoft web site (http://msdn2.microsoft.com/en-us/library/ms675532


(VS.85).aspx)

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


186 TestComplete 7 Made Easy

16.3 Hands on Lab: Query Database


In this lab we are going to query the AdventureWorkDB. The example below will read the Sales table and
extract a total sales figure for a given customer. The SQL to get the sales order details for any customer is
the following parameterized query:
SELECT * FROM Sales.SalesOrderDetail AS d INNER JOIN
Sales.SalesOrderHeader AS h ON d.SalesOrderID = h.SalesOrderID
WHERE (h.CustomerID = ?)

In the example we will build the code step-by-step, adding the following features as we go:

· Connect to the ADO datasource.


· Create an ADO command.
· Create a parameter for the ADO command. The parameter will contain the customer number.
· Execute the command and get a result set.
· Iterate the result set, calculate the total sales and log the amount.
1. Create an ADO connection to the server, run the script to make sure the connection string is correct.

[VBScript]
Sub Main
' Create a new Connection object
Set AConnection = ADO.CreateConnection
' Note that you can also create an ADO connection using the following code:
' Set AConnection = CreateObject("ADODB.Connection")

' Specify the connection string


AConnection.ConnectionString = _
"Provider=SQLOLEDB.1;Integrated Security=SSPI;" &
"Persist Security Info=False;" & _
"Initial Catalog=AdventureWorks;Data Source=.\SQLExpress"
' Activate the connection
AConnection.Open
AConnection.Close

End Sub

[JScript]
function Main()
{
try
{
var AConnection, RecSet, Cmd, Prm;
// Create a new Connection object
AConnection = ADO.CreateConnection();
// Note that you can also create an ADO connection using the following code:
// AConnection = new ActiveXObject("ADODB.Connection");

// Specify the connection string


AConnection.ConnectionString =
"Provider=SQLOLEDB.1;Integrated Security=SSPI;" +
"Persist Security Info=False;" +

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Working with Databases 187

"Initial Catalog=AdventureWorks;Data Source=.\\SQLExpress";


// Activate the connection
AConnection.Open();

AConnection.Close();
}
catch(exception)
{
Log.Error("Exception", exception.description);
}
}

2. Create an ADO command.


[VBScript]
Sub Main
' Create a new Connection object
Set AConnection = ADO.CreateConnection
' Note that you can also create an ADO connection using the following code:
' Set AConnection = CreateObject("ADODB.Connection")

' Specify the connection string


AConnection.ConnectionString = _
"Provider=SQLOLEDB.1;Integrated Security=SSPI;" & _
"Persist Security Info=False;" & _
"Initial Catalog=AdventureWorks;Data Source=.\SQLExpress"
' Activate the connection
AConnection.Open
' Create a new Command object
Set Cmd = ADO.CreateCommand
' To create an ADO command you can also use the following code:
' Set Cmd = CreateObject("ADODB.Command")
' Specify the connection
Cmd.ActiveConnection = AConnection
' Specify command type and text
Cmd.CommandText =
"SELECT * FROM Sales.SalesOrderDetail AS d INNER JOIN " & _
"Sales.SalesOrderHeader AS h ON d.SalesOrderID = h.SalesOrderID " & _
" WHERE (h.CustomerID = ?)"
Cmd.CommandType = adCmdText
' Create a new parameter

AConnection.Close

End Sub

[JScript]
function Main()
{
try
{
var AConnection, RecSet, Cmd, Prm;
// Create a new Connection object
AConnection = ADO.CreateConnection();
// Note that you can also create an ADO connection using the following code:
// AConnection = new ActiveXObject("ADODB.Connection");

// Specify the connection string

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


188 TestComplete 7 Made Easy

AConnection.ConnectionString = _
"Provider=SQLOLEDB.1;Integrated Security=SSPI;" +
"Persist Security Info=False;" +
"Initial Catalog=AdventureWorks;Data Source=.\\SQLExpress";
// Activate the connection
AConnection.Open();
// Create a new Command object
Cmd = ADO.CreateCommand();
// To create an ADO command you can also use the following code:
// Cmd = new ActiveXObject("ADODB.Command");
// Specify the connection
Cmd.ActiveConnection = AConnection;
// Specify command type and text
Cmd.CommandType = adCmdText;
Cmd.CommandText =
"SELECT * FROM Sales.SalesOrderDetail AS d INNER JOIN " +
"Sales.SalesOrderHeader AS h ON d.SalesOrderID = h.SalesOrderID" +
" WHERE (h.CustomerID = ?)"
AConnection.Close();
}
catch(exception)
{
Log.Error("Exception", exception.description);
}
}

3. Create the parameter for customer number.


[VBScript]
Sub Main
' Create a new Connection object
Set AConnection = ADO.CreateConnection
' Note that you can also create an ADO connection using the following code:
' Set AConnection = CreateObject("ADODB.Connection")

' Specify the connection string


AConnection.ConnectionString = _
"Provider=SQLOLEDB.1;Integrated Security=SSPI;" & _
"Persist Security Info=False;" & _
"Initial Catalog=AdventureWorks;Data Source=.\SQLExpress"
' Activate the connection
AConnection.Open
' Create a new Command object
Set Cmd = ADO.CreateCommand
' To create an ADO command you can also use the following code:
' Set Cmd = CreateObject("ADODB.Command")
' Specify the connection
Cmd.ActiveConnection = AConnection
' Specify command type and text
Cmd.CommandText =
"SELECT * FROM Sales.SalesOrderDetail AS d INNER JOIN" &
" Sales.SalesOrderHeader AS h ON d.SalesOrderID = h.SalesOrderID " & _
" WHERE (h.CustomerID = ?)"
Cmd.CommandType = adCmdText
' Create a new parameter
Set Prm = Cmd.CreateParameter("@CustID",DB.adInteger, DB.adParamInput)
' Specify the parameter value
Prm.Size= 4
Prm.Value = 676

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Working with Databases 189

End Sub

[JScript]
function Main()
{
try
{
var AConnection, RecSet, Cmd, Prm;
// Create a new Connection object
AConnection = ADO.CreateConnection();
// Note that you can also create an ADO connection using the following code:
// AConnection = new ActiveXObject("ADODB.Connection");

// Specify the connection string


AConnection.ConnectionString =
"Provider=SQLOLEDB.1;Integrated Security=SSPI;" +
"Persist Security Info=False;" +
"Initial Catalog=AdventureWorks;Data Source=.\\SQLExpress";
// Activate the connection
AConnection.Open();
// Create a new Command object
Cmd = ADO.CreateCommand();
// To create an ADO command you can also use the following code:
// Cmd = new ActiveXObject("ADODB.Command");
// Specify the connection
Cmd.ActiveConnection = AConnection;
// Specify command type and text
Cmd.CommandType = adCmdText;
Cmd.CommandText =
"SELECT * FROM Sales.SalesOrderDetail AS d INNER JOIN " +
"Sales.SalesOrderHeader AS h ON d.SalesOrderID = h.SalesOrderID" +
" WHERE (h.CustomerID = ?)"
// Create a new parameter
Prm = Cmd.CreateParameter("@CustID",DB.adInteger, DB.adParamInput);
// Specify the parameter value
Prm.Size = 4;
Prm.Value = 676;

AConnection.Close();
}
catch(exception)
{
Log.Error("Exception", exception.description);
}
}

4. Insert the parameter into the command object.


[VBScript]
Sub Main
' Create a new Connection object
Set AConnection = ADO.CreateConnection
' Note that you can also create an ADO connection using the following code:
' Set AConnection = CreateObject("ADODB.Connection")

' Specify the connection string

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


190 TestComplete 7 Made Easy

AConnection.ConnectionString = _
"Provider=SQLOLEDB.1;Integrated Security=SSPI;" & _
"Persist Security Info=False;" & _
"Initial Catalog=AdventureWorks;Data Source=.\SQLExpress"
' Activate the connection
AConnection.Open
' Create a new Command object
Set Cmd = ADO.CreateCommand
' To create an ADO command you can also use the following code:
' Set Cmd = CreateObject("ADODB.Command")
' Specify the connection
Cmd.ActiveConnection = AConnection
' Specify command type and text
Cmd.CommandText = _
"SELECT * FROM Sales.SalesOrderDetail AS d INNER JOIN " & _
":Sales.SalesOrderHeader AS h ON d.SalesOrderID = h.SalesOrderID " & _
" WHERE (h.CustomerID = ?)"
Cmd.CommandType = adCmdText
' Create a new parameter
Set Prm = Cmd.CreateParameter("@CustID",DB.adInteger, DB.adParamInput)
' Specify the parameter value
Prm.Size= 4
Prm.Value = 676

Cmd.Parameters.Append(Prm)
AConnection.Close

End Sub

[JScript]
function Main()
{
try
{
var AConnection, RecSet, Cmd, Prm;
// Create a new Connection object
AConnection = ADO.CreateConnection();
// Note that you can also create an ADO connection using the following code:
// AConnection = new ActiveXObject("ADODB.Connection");

// Specify the connection string


AConnection.ConnectionString =
"Provider=SQLOLEDB.1;Integrated Security=SSPI;" +
"Persist Security Info=False;" +
"Initial Catalog=AdventureWorks;Data Source=.\\SQLExpress";
// Activate the connection
AConnection.Open();
// Create a new Command object
Cmd = ADO.CreateCommand();
// To create an ADO command you can also use the following code:
// Cmd = new ActiveXObject("ADODB.Command");
// Specify the connection
Cmd.ActiveConnection = AConnection;
// Specify command type and text
Cmd.CommandType = adCmdText;
Cmd.CommandText =
"SELECT * FROM Sales.SalesOrderDetail AS d INNER JOIN " +
"Sales.SalesOrderHeader AS h ON d.SalesOrderID = h.SalesOrderID" +
" WHERE (h.CustomerID = ?)"

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Working with Databases 191

// Create a new parameter


Prm = Cmd.CreateParameter("@CustID",DB.adInteger, DB.adParamInput);
// Specify the parameter value
Prm.Size = 4;
Prm.Value = 676;
Cmd.Parameters.Append(Prm);

AConnection.Close();
}
catch(exception)
{
Log.Error("Exception", exception.description);
}
}

5. Execute the command object and get the ResultSet.


[VBScript]
Sub Main
' Create a new Connection object
Set AConnection = ADO.CreateConnection
' Note that you can also create an ADO connection using the following code:
' Set AConnection = CreateObject("ADODB.Connection")

' Specify the connection string


AConnection.ConnectionString = _
"Provider=SQLOLEDB.1;Integrated Security=SSPI;" & _
"Persist Security Info=False;" & _
"Initial Catalog=AdventureWorks;Data Source=.\SQLExpress"
' Activate the connection
AConnection.Open
' Create a new Command object
Set Cmd = ADO.CreateCommand
' To create an ADO command you can also use the following code:
' Set Cmd = CreateObject("ADODB.Command")
' Specify the connection
Cmd.ActiveConnection = AConnection
' Specify command type and text
Cmd.CommandText = _
"SELECT * FROM Sales.SalesOrderDetail AS d INNER JOIN " & _
"Sales.SalesOrderHeader AS h ON d.SalesOrderID = h.SalesOrderID " & _
" WHERE (h.CustomerID = ?)"
Cmd.CommandType = adCmdText
' Create a new parameter
Set Prm = Cmd.CreateParameter("@CustID",DB.adInteger, DB.adParamInput)
' Specify the parameter value
Prm.Size= 4
Prm.Value = 676

' Execute the command


Set RecSet = Cmd.Execute
' Execute the command
AConnection.Close
End Sub

[JScript]
function Main()
{

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


192 TestComplete 7 Made Easy

try
{
var AConnection, RecSet, Cmd, Prm;
// Create a new Connection object
AConnection = ADO.CreateConnection();
// Note that you can also create an ADO connection using the following code:
// AConnection = new ActiveXObject("ADODB.Connection");

// Specify the connection string


AConnection.ConnectionString =
"Provider=SQLOLEDB.1;Integrated Security=SSPI;" +
"Persist Security Info=False;" +
"Initial Catalog=AdventureWorks;Data Source=.\\SQLExpress";
// Activate the connection
AConnection.Open();
// Create a new Command object
Cmd = ADO.CreateCommand();
// To create an ADO command you can also use the following code:
// Cmd = new ActiveXObject("ADODB.Command");
// Specify the connection
Cmd.ActiveConnection = AConnection;
// Specify command type and text
Cmd.CommandType = adCmdText;
Cmd.CommandText =
"SELECT * FROM Sales.SalesOrderDetail AS d INNER JOIN " +
"Sales.SalesOrderHeader AS h ON d.SalesOrderID = h.SalesOrderID" +
" WHERE (h.CustomerID = ?)"
// Create a new parameter
Prm = Cmd.CreateParameter("@CustID",DB.adInteger, DB.adParamInput);
// Specify the parameter value
Prm.Size = 4;
Prm.Value = 676;
Cmd.Parameters.Append(Prm);
// Execute the command
RecSet = Cmd.Execute();

AConnection.Close();
}
catch(exception)
{
Log.Error("Exception", exception.description);
}
}
6. Iterate through the result set to total the orders (this could have been done with a single sql query).
[VBScript]
Sub Main
' Create a new Connection object
Set AConnection = ADO.CreateConnection
' Note that you can also create an ADO connection using the following code:
' Set AConnection = CreateObject("ADODB.Connection")

' Specify the connection string


AConnection.ConnectionString = _
"Provider=SQLOLEDB.1;Integrated Security=SSPI;" & _
"Persist Security Info=False;" & _
"Initial Catalog=AdventureWorks;Data Source=.\SQLExpress"
' Activate the connection
AConnection.Open
' Create a new Command object

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Working with Databases 193

Set Cmd = ADO.CreateCommand


' To create an ADO command you can also use the following code:
' Set Cmd = CreateObject("ADODB.Command")
' Specify the connection
Cmd.ActiveConnection = AConnection
' Specify command type and text
Cmd.CommandText = _
"SELECT * FROM Sales.SalesOrderDetail AS d INNER JOIN " & _
"Sales.SalesOrderHeader AS h ON d.SalesOrderID" & _
" = h.SalesOrderID WHERE (h.CustomerID = ?)"
Cmd.CommandType = adCmdText
' Create a new parameter
Set Prm = Cmd.CreateParameter("@CustID",DB.adInteger, DB.adParamInput)
' Specify the parameter value
Prm.Size= 4
Prm.Value = 676
Cmd.Parameters.Append(Prm)

' Execute the command


Set RecSet = Cmd.Execute
' Execute the command
Dim Sales
Sales = 0
While Not RecSet.EOF
Sales = Sales + VarToFloat(RecSet("LineTotal").Value)
RecSet.MoveNext
WEnd
Log.Message("Total Sales = " ^ Sales)

AConnection.Close
End Sub

[JScript]
function Main()
{
try
{
var AConnection, RecSet, Cmd, Prm;
// Create a new Connection object
AConnection = ADO.CreateConnection();
// Note that you can also create an ADO connection using the following code:
// AConnection = new ActiveXObject("ADODB.Connection");

// Specify the connection string


AConnection.ConnectionString =
"Provider=SQLOLEDB.1;Integrated Security=SSPI;" +
"Persist Security Info=False;" +
"Initial Catalog=AdventureWorks;Data Source=.\\SQLExpress";
// Activate the connection
AConnection.Open();
// Create a new Command object
Cmd = ADO.CreateCommand();
// To create an ADO command you can also use the following code:
// Cmd = new ActiveXObject("ADODB.Command");
// Specify the connection
Cmd.ActiveConnection = AConnection;
// Specify command type and text
Cmd.CommandType = adCmdText;
Cmd.CommandText =

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


194 TestComplete 7 Made Easy

"SELECT * FROM Sales.SalesOrderDetail AS d INNER JOIN" +


" Sales.SalesOrderHeader AS h ON d.SalesOrderID = h.SalesOrderID" +
" WHERE (h.CustomerID = ?)"
// Create a new parameter
Prm = Cmd.CreateParameter("@CustID",DB.adInteger, DB.adParamInput);
// Specify the parameter value
Prm.Size = 4;
Prm.Value = 676;
Cmd.Parameters.Append(Prm);
// Execute the command
RecSet = Cmd.Execute();
var Sales;
Sales = 0;
while (! RecSet.EOF )
{
Sales = Sales + RecSet("LineTotal").Value;
RecSet.MoveNext();
}
Log.Message("Total Sales = " + Sales);
AConnection.Close();

AConnection.Close();
}
catch(exception)
{
Log.Error("Exception", exception.description);
}
}

You should get a log file like:

16.4 Summary
In this section we discussed options for connecting and manipulating datasources using ADO and BDE.
You learned how to retrieve ADO data for use within your tests.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

XVII
Web Page Testing
196 TestComplete 7 Made Easy

17 Web Page Testing


17.1 Objectives
This section discusses how TestComplete represents web pages in the Object Browser, how to navigate
between web pages and how web checkpoints are used. This section also talks about strategies for
locating and testing dynamic HTML elements. In this section you'll learn about:

· Web Page Models.


· How TestComplete names web page elements.
· Web Comparison Checkpoint.
· Web Accessibility Checkpoint.
· How to find web page object based on properties.
· How to handle dynamic HTML elements using mouse hovers.

17.2 Web Page Model


TestComplete supports four web page models:

· DOM - Document Object Model, the native way that Internet Explorer looks at web pages. The DOM
model creates a very flat tree in the Object Browser. All items on the web page need to be re-read each
time the web page is updated. This is the slowest method for using web pages.
· TAG - All HTML elements are sorted by their TAG value. If a link (<A> HTML tag) gets created, only the
"A" node part of the Object Browser tree gets updated.
· Tree - Treats a web page like a normal application. This model creates a very deep tree for most web
pages. This is the fastest method for using web pages.
· Hybrid - This uses both DOM and Tree. All new recording will use the Tree model, while any old
TestComplete code using the DOM will continue to work.

To set the web page model used for the project:


1. Select the Project Project Item and then click on Properties.
2. Select Open Application | Web Testing.
3. Select the desired Tree model.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Web Page Testing 197

17.3 Naming Conventions


The naming convention for HTML elements used by TestComplete depends on the web page model used:

· DOM - HTML elements are in the form of Item(index). The index will be either the ID or Name attribute, if
any (with the Identification attribute having priority). If the element does not have either attribute,
TestComplete will assign an index number based on the order the item was created.

· TAG - HTML elements have the same form as DOM but are sorted by type.

· Tree - HTML elements have the form ObjectType(Index), for example: Panel(0) - div element, Image
("Logo.gif") - image element.

17.4 Web Comparison Checkpoint


A Web Comparison checkpoint is used to compare two web pages.
1. To access the Web Comparison checkpoint, use either the checkpoint drop down from the recording
toolbar...

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


198 TestComplete 7 Made Easy

...or the checkpoint drop down from on the Editor toolbar of TestComplete.

2. Selecting either option displays the Create Web Comparison Checkpoint dialog.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Web Page Testing 199

3. Use the target icon to select the web page.


4. The extent of the comparison is controlled by the options below the "Page object" in the dialog.

· Compare entire page - The whole HTML page is saved and is compared.
· Compare only tab structure - Only tag names are compared, not attributes, attributes' values and
elements' values.
· Compare only specified tags - Only the selected elements will be compared.
o Links - Only A elements are compared (text and attributes of the element are compared as
well).
o Images - Only IMG elements are compared.

o Input elements - Only INPUT elements are compared.

o Read content from a server - Read content from the browser's window or the web server

5. Press the OK button and you will be presented with the Copy Text to Clipboard dialog. The dialog has
the script code that will perform the web page comparison.

Note: In this case the dialog contents will be placed into the clipboard so you can paste them into
your script routine. If you do the comparison while recording, TestComplete puts the code in for you
automatically.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


200 TestComplete 7 Made Easy

Tip: If you have a web page that has dynamically created items, you can set a timeout for the web
comparison to wait for the page to be populated before doing the comparison (default is the Auto-
wait timeout).

17.5 Web Accessibility Checkpoint


It is increasingly important to check that your web pages are accessible. Use the Web Accessibility
Checkpoint to verify accessibility compliance.
1. To create a Web Accessbility Checkpoint use either the recording toolbar...

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Web Page Testing 201

... or the Editor toolbar in TestComplete.

2. Selecting either option will display the Create Web Accessibility Checkpoint dialog.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


202 TestComplete 7 Made Easy

3. The types of accessibilities that TestComplete can check for are:

· Check "alt" attribute - All IMG, APPLET, AREA and INPUT elements must have a non-empty ALT
attribute.
· Check "mailto:" - Web page must have at least one A element (link), whose HREF attribute starts
with mailto:
· Check image sizes - All IMG elements must have the WIDTH and HEIGHT attributes specified.
· Check "title" tag - The web page must have a non-empty TITLE elment.
· Check tab indexes - All INPUT, SELECT, and TEXTAREA elements must have the TABINDEX
attribute.
· Check link accessibility - Checks for broken links.
· Check ActiveX objects - Verifies there are no ActiveX objects on the web page.
· Check Applet object - Verifies there are no Applet objects on the web page.
· Check multimedia links - Verifies there are not AVI or SWF files on the web page.
· Check server-side images - Verifies that none of the IMG elements contain SRC attribute with
parameters.
4. Press the OK button and TestComplete will present you with a dialog showing code for the Web
Accessibility Checkpoint.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Web Page Testing 203

17.6 Finding Web Page Elements


Since not all web elements have an ID or Name property (or they might have been created dynamically),
TestComplete provides a couple of ways to find elements by using properties of the element. The first one
uses the Page object's NativeWebObject.Find() method.
NativeWebObject.Find takes three parameters, two required and one optional. Find returns the found
element or an empty element with the Exists property set to false. The first parameter is the name of the
property you are searching for, such as innerText. The second parameter is the value to search for. The
optional last parameter is the Tag type to search for, such as "A".
For example on http://www.automatedqa.com, the Products link on the header does not have a name or an
id. The example below uses Sys.Process to retrieve the Page object. The Page object uses
NativeWebObject.Find to search for a link with title element "Products":

[VBScript]
Sub NativeFind
Dim PageObj
Dim ProductLink
Set PageObj = Sys.Process("iexplore").
Page("http://www.automatedqa.com/")
Set ProductLink = PageObj.NativeWebObject.Find("title","Products","A")
if ProductLink.Exists Then
ProductLink.Click
End If
End Sub

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


204 TestComplete 7 Made Easy

[JScript]
function NativeFind()
{
var PageObj
var ProductLink
PageObj = Sys.Process("iexplore").Page("http://www.automatedqa.com/")
ProductLink = PageObj.NativeWebObject.Find("title","Products","A")
if (ProductLink.Exists)
ProductLink.Click()
}

The second method to find objects on a web (or any other application), is to use the TestedObject.Find()
method. This method allows you to use multiple properties and values to select a web element. The
example below uses the page object again, not the TestedObject. In this case the page object is the
TestedObject, TestedObject can be any on-screen object. To perform the same search as above:

[VBScript]
Sub TestedObjFind
Dim PropArray, ValuesArray
Dim PageObj
Dim ProductLink

' Creates arrays of properties and values


PropArray = CreateVariantArray(0, 1)
ValuesArray = CreateVariantArray(0, 1)

' Specifies property names


PropArray(0) = "title"
PropArray(1) = "tagName"

' Specifies the property values


ValuesArray(0) = "Products"
ValuesArray(1) = "A"

Set PageObj = Sys.Process("iexplore").Page("http://www.automatedqa.com/")


Set ProductLink = PageObj.Find(PropArray,ValuesArray,3)
if ProductLink.Exists Then
ProductLink.Click
End If
End Sub

[JScript]
function ConvertArray(AArray)
{
// Uses the Dictionary object to convert a JScript array
var objDict = Sys.OleObject("Scripting.Dictionary");
objDict.RemoveAll();
for (var j in AArray)
objDict.Add(j, AArray[j]);
return objDict.Items();
}

function TestedObjFind()
{

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Web Page Testing 205

var PropArray, ValuesArray, ConvertedPropArray, ConvertedValuesArray;


var PageObj;
var ProductLink;

// Creates arrays of properties and values


PropArray = new Array(2);
ValuesArray = new Array(2);

// Specifies property names


PropArray[0] = "title";
PropArray[1] = "tagName";

// Specifies the property values


ValuesArray[0] = "Products";
ValuesArray[1] = "A";

// Converts arrays
ConvertedPropArray = ConvertArray(PropArray);
ConvertedValuesArray = ConvertArray(ValuesArray);

PageObj = Sys.Process("iexplore").Page("http://www.automatedqa.com/")
ProductLink = PageObj.Find(ConvertedPropArray,ConvertedValuesArray,3)
if (ProductLink.Exists)
ProductLink.Click()
}

Note: Notice that the Find() method passes a depth value of 3. The depth value indicates that at most,
TestComplete will search the object tree three levels below the current selected TestedObject.

Choosing the method to use depends on how far down the object tree you are and how complex a search
you require. If you are using the page object, NativeWebObject.Find() is the fastest. Below the page object,
it will depend on the current depth and how far down you need to search. For more complex searches,
TestedObject.Find() provides more flexibility.

17.7 Dynamic HTML


Script recording in TestComplete does not record mouse movements, only mouse click and keyboard entry.
The lack of mouse movement information can present a problem in dealing with dynamic HTML elements
such a Hover Menus which require the mouse to hover (move over) the menu to active. For example the web
page http://www.asp.net/AJAX/AjaxControlToolkit/Samples/HoverMenu/HoverMenu.aspx has a hover menu
attached to the word "Have project idea". If you were to attempt recording interaction with this menu, the
playback would fail as the menu would not be visible to click on. This can be solved by using the
HoverMouse method in the script. To get the HoverMouse method in the record you can do the following:

Note: This example may vary depending on your OS version (Vista or XP) as well as your browser
version. For Vista you must run Internet Explorer with administrator privledges. You can refer to
the Hands On Lab for this chapter to set this up.
1. Start Internet Explorer
2. Browse to http://www.asp.net/AJAX/AjaxControlToolkit/Samples/HoverMenu/HoverMenu.aspx

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


206 TestComplete 7 Made Easy

3. Hover the mouse over the first row until the popup menu appears then click the Edit link.

4. Stop the recording

[VBScript - Recorded Code]


Sub Test2
Dim page
Set page = Aliases.iexplore.pageHovermenuSample
Call page.ToURL(
"http://www.asp.net/AJAX/AjaxControlToolkit/Samples/HoverMenu/HoverMenu.aspx")
page.formAspnetform.panelMasterPage.panelMasterContent
.panelMasterContentplaceholder.panelDemoarea.panelCtl00SamplecontentUp1
.panel.tableCtl00SamplecontentGridview1.cell
.panelCtl00SamplecontentGridview11.panel.panel
.linkCtl00SamplecontentGridview1C.Click
End Sub

[JScript - Recorded Code]


function Test1()
{
var page;
page = Aliases.iexplore.pageHovermenuSample;
page.ToURL(
"http://www.asp.net/AJAX/AjaxControlToolkit/Samples/HoverMenu/HoverMenu.aspx");
page.formAspnetform.panelMasterPage.panelMasterContent
.panelMasterContentplaceholder.panelDemoarea.panelCtl00SamplecontentUp1.panel
.tableCtl00SamplecontentGridview1.cell.panelCtl00SamplecontentGridview11
.panel.panel.linkCtl00SamplecontentGridview1C.Click();
}
At this point, if we playback this recording it will fail as the popup menu will not be on screen. We need to
use the HoverMouse method on an object within the first row to allow the popup menu time to appear.
1. Use the Object Browser to locate a textnode within the first row of the grid (you can use the Object
Properties window and its Finder tool to make this easier)

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Web Page Testing 207

2. With the information pertaining to this text node we can modify our code to call the HoverMouse
method allowing the popup menu to appear on screen.
[VBScript - Modified Code]
Sub Test1
Dim page
Dim cell
Dim textNode
Set page = Aliases.iexplore.pageHovermenuSample
Call page.ToURL(
"http://www.asp.net/AJAX/AjaxControlToolkit/Samples/HoverMenu/HoverMenu.aspx")
' Code to hover the mouse over the text of the first cell of the table
Set cell = page.formAspnetform.panelMasterPage.panelMasterContent
.panelMasterContentplaceholder.panelDemoarea.panelCtl00SamplecontentUp1
.panel.tableCtl00SamplecontentGridview1.cell
Set textNode = cell.panelCtl00SamplecontentGridview1.table.cell
.textnodeCtl00SamplecontentGridvi
Call textNode.HoverMouse(5, 5)
Call cell.panelCtl00SamplecontentGridview11.panel.panel
.linkCtl00SamplecontentGridview1C.Click()
End Sub

[JScript - Modified Code]


function Test2()

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


208 TestComplete 7 Made Easy

{
var page;
var cell;
var textNode;
page = Aliases.iexplore.pageHovermenuSample;
page.ToURL(
"http://www.asp.net/AJAX/AjaxControlToolkit/Samples/HoverMenu/HoverMenu.aspx");
// Code to hover the mouse over the text of the first cell of the table
cell = page.formAspnetform.panelMasterPage.panelMasterContent
.panelMasterContentplaceholder.panelDemoarea.panelCtl00SamplecontentUp1.panel
.tableCtl00SamplecontentGridview1.cell;
textNode = cell.panelCtl00SamplecontentGridview1.table.cell
.textnodeCtl00SamplecontentGridvi;
textNode.HoverMouse(5, 5);
cell.panelCtl00SamplecontentGridview11.panel.panel
.linkCtl00SamplecontentGridview1C.Click();
}

The code above will now hover the mouse over the first row of the grid allowing the popup menu to
appear and thus allowing the click to work.

17.8 Hands on Lab: Work with Web Pages

Basic Web Page


1. Create a new project.
2. Add "Tested Apps" project item to the project.
3. Add Internet Explorer as the tested application.
4. Click the ellipse button (...) next to the application and add "http://www.google.com/" as the command
line parameter.

Note: Your recordings may differ depending on which version of Windows you're using and which
version of Internet Explorer you're testing with. With Vista, you need to change the run mode from
simple to run as, and run as administrator see below for an example.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Web Page Testing 209

5. Press the recording button in the test engine toolbar.


6. Click the run application button in the recording toolbar to start Internet Explorer
7. Type "Falafel Software" (without the quotes) into the Google Search box
8. Click the Google Search button
9. Stop the recording (Your code may not exactly match the example below).

Sub Test1
Dim iexplore
Dim page
Dim form
TestedApps.iexplore.Run
Set iexplore = Aliases.iexplore
Set page = iexplore.pageGoogle
Call page.ToURL("http://www.google.com/")
Set form = page.formF
Call form.table.cell.textboxQ.Keys("falafel software")
form.tableGacM.cell.panelGacBt.buttonGoogleSearch.Click
'Please wait until download completes:
"http://www.google.com/search?hl=en&q=falafel+software&aq=f&oq=&aqi=g1"
iexplore.pageFalafelSoftwareGoogleSearch.Wait
End Sub

[Jscript]

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


210 TestComplete 7 Made Easy

function Test1()
{
var iexplore;
var page;
var form;
TestedApps.iexplore.Run();
iexplore = Aliases.iexplore;
page = iexplore.pageGoogle;
page.ToURL("http://www.google.com/");
form = page.formF;
form.table.cell.textboxQ.Keys("falafel software");
form.tableGacM.cell.panelGacBt.buttonGoogleSearch.Click();
//Please wait until download completes:
"http://www.google.com/search?hl=en&q=falafel+software&aq=f&oq=&aqi=g1"
iexplore.pageFalafelSoftwareGoogleSearch.Wait();
}

10. Close the Tested Application


11. Run the recorded test.

Using NativeWebObject.Find Method


1. Copy the recording above to a new method.
2. Change the last line to below (notice the extra space).

[VBScript]
iexplore.pageFalafelSoftwareGoogleSearch.NativeWebObject.Find(
"innerText", "Falafel Software*", "A").Click

[JScript]
iexplore.pageFalafelSoftwareGoogleSearch.NativeWebObject.Find(
"innerText", "Falafel Software*", "A").Click();

3. Run the script.


4. Close the Tested Application (IE or Firefox).

Using TestComplete's Find Method


1. Copy the code from above into a new method.
2. Change the code to look like the example below.

[VBScript]
Sub FindTest
Dim iexplore
Dim page
Dim form
TestedApps.iexplore.Run
Set iexplore = Aliases.iexplore
Set page = iexplore.pageGoogle
Call page.ToURL("http://www.google.com/")
Set form = page.formF

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Web Page Testing 211

Call form.table.cell.textboxQ.Keys("falafel software")


form.tableGacM.cell.panelGacBt.buttonGoogleSearch.Click
'Please wait until download completes:
"http://www.google.com/search?hl=en&q=falafel+software&aq=f&oq=&aqi=g1"
iexplore.pageFalafelSoftwareGoogleSearch.Wait

Dim PropArray, ValuesArray


' Creates arrays of properties and values
PropArray = CreateVariantArray(0, 1)
ValuesArray = CreateVariantArray(0, 1)

' Specifies property names


PropArray(0) = "tagName"
PropArray(1) = "innerText"

' Specifies the property values


ValuesArray(0) = "A"
ValuesArray(1) = "Falafel Software*"

iexplore.pageFalafelSoftwareGoogleSearch.Refresh
iexplore.pageFalafelSoftwareGoogleSearch.Find(PropArray,ValuesArray,100).Click
End Sub

[JScript]
function ConvertArray(AArray)
{
// Uses the Dictionary object to convert a JScript array
var objDict = Sys.OleObject("Scripting.Dictionary");
objDict.RemoveAll();
for (var j in AArray)
objDict.Add(j, AArray[j]);
return objDict.Items();
}

function FindTest()
{
var iexplore;
var page;
var form;
TestedApps.iexplore.Run();
iexplore = Aliases.iexplore;
page = iexplore.pageGoogle;
page.ToURL("http://www.google.com/");
form = page.formF;
form.table.cell.textboxQ.Keys("falafel software");
form.tableGacM.cell.panelGacBt.buttonGoogleSearch.Click();
//Please wait until download completes:
"http://www.google.com/search?hl=en&q=falafel+software&aq=f&oq=&aqi=g1"
iexplore.pageFalafelSoftwareGoogleSearch.Wait();

// New Stuff below


var PropArray, ValuesArray, ConvertedPropArray, ConvertedValuesArray;

// Creates arrays of properties and values


PropArray = new Array(2);
ValuesArray = new Array(2);

// Specifies property names


PropArray[0] = "tagName";

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


212 TestComplete 7 Made Easy

PropArray[1] = "innerText";

// Specifies the property values


ValuesArray[0] = "A";
ValuesArray[1] = "Falafel Software*";

// Converts arrays
ConvertedPropArray = ConvertArray(PropArray);
ConvertedValuesArray = ConvertArray(ValuesArray);

iexplore.pageFalafelSoftwareGoogleSearch.Refresh();
iexplore.pageFalafelSoftwareGoogleSearch
.Find(ConvertedPropArray,ConvertedValuesArray,100).Click();
}

3. Run the script.

4. Close the Tested Application

17.9 Summary
In this section we learned about web page testing, how TestComplete represents web pages in the Object
Browser and how to switch between them. In addition, we learned about the different types of web
checkpoints TestComplete has, and how to use them. The Find methods made it easier for us to deal with
unnamed web elements and the HoverMouse method made it so we could test dynamic HTML elements.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

XVIII
WebServices Testing
214 TestComplete 7 Made Easy

18 WebServices Testing
18.1 Objectives
This section demonstrates how to test a web service. In this section you'll learn:

· Importing Web Services into TestComplete.


· Calling Simple Methods of Web Services in TestComplete.
· Creating Web Service Types (objects) in TestComplete.
· Calling Complex Method of Web Services.
· Creating a Web Service Checkpoint.

18.2 Testing against WSDL


TestComplete uses a WSDL (Web Service Definition Language) file to discover information about Web
services, web service methods and parameters. The Web services project item is used to perform functional
testing of web services. Using the Web services project item, you can perform the following actions:

· Explore methods and objects used by the tested Web service.


· Create script code that will call the service’s methods.
· Check the service response to determine if the methods function properly.

Importing Web Service Information into TestComplete


In order to use a Web service in TestComplete:
1. Add the Web services project item to your project (a place holder for all the child Web Service Project
Items)
a. Right-Click on the project, select Add | New Item… from the context menu.
b. Select the Web services project item
2. Add a Web Service project item to the Web services Project Item.
a. Right-Click the newly added Web services project item and select Add | New Item… from the context
menu.
b. Name the Web Service project Item (SimpleProjectTracker) and click the OK button.
3. Select the WSDL file for the web service.
a. Click the Select button for the Web Service Definition URL.
b. Enter the URL (location) into the web service.
c. Click the Get Services button.
d. Select the Web Service to test from the drop down list.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


WebServices Testing 215

e. Click the OK button

A list of types and methods that are available for the selected Web service is displayed.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


216 TestComplete 7 Made Easy

Working with the Web Service: Simple Methods


Our definition of a “simple” method is one that takes primitive data values (string, numbers, Boolean) as
parameters and returns a primitive data value. For example, inside of a method of the project enter:
[JScript]

Log.Message(WebServices.SimpleProjectTracker.HelloWorld());

[VBScript]

Call Log.Message(WebServices.SimpleProjectTracker.HelloWorld)

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


WebServices Testing 217

Using the TestComplete AutoCompletion feature you can import the example Web Service supplied with the
book. The previous example above can be generated using AutoCompletion:
1. Type “Log.m” in the code editor.
2. Press the "[Enter]" key.
3. Move the cursor between the parenthesis.
4. Type “W[Enter].”
5. Select the Web Service from the code completion (MyWebServiceName).
6. Type “.”.
7. Select the “HelloWorld” method from the code completion.

Working with the Web service: Complex Methods


In order to send a complex data element to a web service, an object to hold the data will need to be
created. Luckily, TestComplete has a code generator to make the creation of the object easy. The following
code sample demonstrates creating a user data element as generated by TestComplete.

[JScript]

function User()
{
var Result;
var TypeFactory;
//Get the type factory for the web service
TypeFactory = WebServices.SimpleProjectTracker.TypeFactory;
Result = TypeFactory.User;
return Result;
}

[VBScript]

Function User
Dim TypeFactory
'Get the type factory for the web service
Set TypeFactory = WebServices.SimpleProjectTracker.TypeFactory
Set User = TypeFactory.User
End Function

This code creates the User object for use with the Web Service (such as invoking the AddNewUser
method).

To access the code generator:


1. Expand the list of types in your web service.
2. Select the type desired.

3. Click the “Code” button at the end of the line with the type.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


218 TestComplete 7 Made Easy

4. Copy the generated code to the clipboard.

5. Paste the generated code into the script editor using either "<ctrl>-V" or the Edit | Paste menu option.

Now that we have the method to create a User, we can use this method to add a new user to the
database using the Web service. The method we are calling in the Web service is AddNewUser().

[JScript]
function AddAUser()
{
var aUser;
aUser = User();
aUser.Name = "Test";
aUser.Email = "test@test.com";
Log.Message("New User Id is " +
WebServices.SimpleProjectTracker.AddNewUser(aUser));
}

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


WebServices Testing 219

[VBScript]
Sub AddAUser
Dim aUser
Set aUser = User()
aUser.Name = "Test"
aUser.Email = "test@test.com"
Log.Message("New User Id is " &
WebServices.SimpleProjectTracker.AddNewUser(aUser))
End Sub

18.3 WebServices Checkpoint


You can perform all of the operations needed to call a web service’s method and check the results yourself,
or you can use the Create Web Service Checkpoint Wizard to walk you through the process. In general,
performing the operations by hand is more flexible, but the wizard helps you create the checkpoints faster
and more conveniently, which is important if you are new to TestComplete.

The wizard helps you perform the following actions:

· Create an XMLCheckpoint project item that stores a baseline copy of a web service’s response.
· Generate script code that calls the web service’s method and checks the result.

You can invoke the wizard when recording a test or at design time:

To display the wizard when recording a test, select Create Web Service Checkpoint from the Recording
toolbar:

To display the wizard at design time, select the Create Web Service Checkpoint from the Tools toolbar.
If this toolbar is hidden, right-click somewhere in the toolbar area and select Tools from the ensuing context
menu:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


220 TestComplete 7 Made Easy

In the wizard, the following actions will take place:


· Selecting the desired web service.
· Selecting the method to be called.
· Specifying the method parameters.
· Specifying the expected result.
1. Invoke the wizard. On the "Select Web Service" page of the wizard, select the Web Service project item
that corresponds to the tested web service.

2. On the "Select Web Service Method" page of the wizard, choose the web service method to be called.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


WebServices Testing 221

3. On the "Specify Method Parameters" page, enter the method parameter values. If the parameters have a
simple value type (a string, integer, Boolean and so on), enter its value directly on the page.

Note: To specify complex parameter values (that refer to objects), invoke the special "Complex
Parameter" dialog.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


222 TestComplete 7 Made Easy

4. On the "Store Expected Response" page of the wizard, specify the XMLCheckpoint project item that will
store the expected response of the web service method.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


WebServices Testing 223

The response can be saved to a new or to an existing XMLCheckpoint project item.


When creating a new project item, remember that TestComplete will use the project item’s name to
address this project item from scripts. So, the name must be a valid script identifier. Scripting languages
supported by TestComplete use different naming rules. To specify a name that will conform to the rules of
any language, enter a string that starts with a letter and that only contains letters, digits and underscore
symbols.

TestComplete automatically generates the expected response of a method call. By default,


TestComplete uses predefined values for XML document elements that correspond to the result value (or
values). For instance, if the method returns an integer value, then TestComplete generates the 0 value
for the element that holds the result value. You should replace this pre-defined value with the expected
value. Else, the comparison will be meaningless.

5. Press "Finish" to close the wizard. TestComplete automatically creates (or updates) the specified
XMLCheckpoint project item and then generates script code that calls the method and compares the
result with the data stored by the project item.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


224 TestComplete 7 Made Easy

Part of the Project Explorer w ith a Web


Services checkpoint

If the checkpoint was created during recording, TestComplete displays the generated code in the Add Text
to Script dialog. Using this dialog you can insert the generated script instructions into the recorded code.
If the checkpoint was created at design time, TestComplete displays the Copy Text to Clipboard dialog.
Here, the generated code can be copied to the clipboard and then pasted into the script code.

[VBScript]
Call WebServices.SimpleProjectTracker.AddNewProject(XML.project)
If (Not XML.AddNewProject.Compare(WebServices.SimpleProjectTracker)) Then
Call Log.Error("The AddNewProject method of the SimpleProjectTracker web" _
" service returned an incorrect value.")
End If

[JScript]
WebServices.SimpleProjectTracker.AddNewProject(XML.project);
if(!XML.AddNewProject.Compare(WebServices.SimpleProjectTracker))
Log.Error("The AddNewProject method of the SimpleProjectTracker web" +
" service returned an incorrect value.");

18.4 WebServices Testing Dialogs


The testing of web services can occur across multiple computers. TestComplete has settings to ensure that
the test will complete even if one of the computers involved gets disconnected. Using the "Web Services
Options" dialog, you can configure the HTTP Proxy settings as well as the timeout values used to close
inactive connection. TestComplete will throw an exception if a timeout occurs.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


WebServices Testing 225

Web Services Options Settings


Proxy Settings: Select the "Use HTTP Proxy" checkbox if your computer requires a proxy server to
connect to the web service. You can obtain proxy connection information from your IT department.

Timeout Settings: The timeout settings are used by TestComplete to close inactive connections to the
web service. The timeout logic works with the connect, receive and send timeout settings in the following
order:

· TestComplete will first make a connection request to the web service. If the web service does not
respond in the time specified by the "Connect" timeout, TestComplete treats the connection as inactive
and raises an exception.
· TestComplete then sends the request to the web service, if the request takes longer than the "Send"
timeout, TestComplete treats the connection as inactive and raises an exception.
· After sending the request, TestComplete waits for a response, if this takes longer than the "Receive"
timeout, TestComplete will treat the connection as inactive and raises an exception.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


226 TestComplete 7 Made Easy

18.5 XML Checkpoint


The XML checkpoint is used to compare two different XML documents (such as the response from a Web
Service method call). TestComplete stores the XML checkpoint information under the "Stores | XML "
project item folder.

TestComplete compares two XML documents by moving down the hierarchy of document elements and
comparing each document node. The comparison starts at the root node for each document. The following
steps are performed for each node:

· Finds the "matching" node from each document and compares each of the node values. Nodes are
matched on the baseName, namespaceURI properties as well as node prefix and type.
· Compares node attributes and namespace declarations.
· Gets a list of child nodes and performs a comparison.
If the node or any of the child nodes are different, TestComplete will report the differences.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


WebServices Testing 227

By configuring the checkpoint options of an XML checkpoint, the default behavior of the comparison can be
changed.

The checkpoint options are:


· Ignore node order - TestComplete does not check if the node was found in the same place in both

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


228 TestComplete 7 Made Easy

documents.
· Ignore attributes - TestComplete only compares names and values for the XML elements.
· Ignore namespace declarations - TestComplete does not check the namespace attribute of the XML
nodes.
· Ignore prefixes - TestComplete does not check the prefix on the name of the XML node.
· Compare in subtree mode - The comparison results will not include nodes that only exist in the
actual document and not in the stored (expected) document (Good for checking only part of an XML
document).

18.6 Hands on Lab: Testing a SOAP 1.2 Web Service


In this lab, we will:

· Call a simple Web service method.


· Create a Web service type (object) and use the object for calling a method.
· Create a Web service checkpoint.

Calling a Simple Web Service Method


1. Create a new project in TestComplete.
2. Add the "Web Services" project Item to the project.
3. Right-click the "Web Services" project item and select Add | New Item….
4. Name the Web service “TrainingWS”.
5. Click the Select button in the “TrainingWS” workspace editor.
6. If you have IIS installed on your computer, enter the URL:

http://localhost/SimpleProjectTracker/SimpleProjectTrackerWebService.asmx?WSDL
If IIS is not installed, enter the following URL:
<supplied.by.instructor>/SimpleProjectTracker/SimpleProjectTrackerWebService.asmx?WSDL

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


WebServices Testing 229

7. Click the "Get Services" button.


8. Select the SimpleProjectTrackerWS (SOAP 1.2) as the tested service.
9. Click the "OK" button.
10. Create a new method in the script editor. Call the method "GetTask".
11. Create a variable for your scripting language. Call the variable "ReturnValue".
12. Assign the value to the results of " WebServices.TrainingWS.GetTaskByID(1) ".

Caution: This result is actually a complex value (object) so be careful with the assignment (use
SET for VBScript).
13. Add a line to Log the value of "ReturnValue.Name"

[VBScript]
Sub GetTask
Dim ReturnValue
Set ReturnValue = WebServices.TrainingWS.GetTaskByID(1)
Log.Message("Task 1 is " & ReturnValue.Name)
End Sub

[JScript]
function GetTask()
{
var ReturnValue;
ReturnValue = WebServices.TrainingWS.GetTaskByID(1);
Log.Message("Task 1 is " + ReturnValue.Name);
}

14. Right-click inside the method just created and select Run Current Routine.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


230 TestComplete 7 Made Easy

Create a Web Service Type and Call a Method


1. In the project created above, select the Web Service Workspace editor for the TrainingWS (the tab
named TrainingWS or double click the TrainingWS project Item).
2. Expand the Types in the Objects and Methods section of the editor.
3. Select the “Project” Type.
4. Click the Code button in the editor.
5. Rename the function from "Project" to "ProjectType".

Note: Project is a keyword in TestComplete. In VBScript the Set Project = TypeFactory.Project


needs to be changed to Set ProjectType = TypeFactory.Project.
6. Click the Copy button in the Generated Code dialog.
7. Move to the script editor and paste the code in the editor.
8. Create a new method in the editor called “ AddProject”.
9. Add a variable to the method called “Prj”.
10. Set the value of "Prj" to the results of the “ProjectType” method.

11. Assign the value of “TestComplete Training Lab” to the “Name” property of the “Prj”. Object.
12. Assign the value of 1 to the “Manager” property of the “Prj” Object.
13. Assign the value of Utilities.Date()+7 to the "DueDate" property of the "Prj" Object.
14. Create another variable. Call the variable "ReturnValue".
15. Assign the result of the "WebServices.TrainingWS.AddNewProject using the "Prj" variable as the input
parameter to the web service method call to "ReturnValue"
16. Log the result:

[VBScript]
Function ProjectType
Dim TypeFactory
'Get the type factory for the web service
Set TypeFactory = WebServices.TrainingWS.TypeFactory
Set ProjectType = TypeFactory.Project
End Function

Sub AddProject
Dim Prj

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


WebServices Testing 231

Set Prj = ProjectType


Prj.Name = "TestComplete Training Lab"
Prj.Manager = 1
Prj.DueDate = Date() + 7
Dim ReturnValue
ReturnValue = WebServices.TrainingWS.AddNewProject(Prj)
Log.Message("New Project Id is " & ReturnValue)
End Sub

[JScript]
function ProjectType()
{
var Result;
var TypeFactory;
//Get the type factory for the web service
TypeFactory = WebServices.TrainingWS.TypeFactory;
Result = TypeFactory.Project;
return Result;
}

function AddProject()
{
var Prj;
Prj = ProjectType();
Prj.Name = "TestComplete Training Lab"
Prj.Manager = 1;
Prj.DueDate = Utilities.Date() + 7;
var ReturnValue;
ReturnValue = WebServices.TrainingWS.AddNewProject(Prj);
Log.Message("New Project Id is " + ReturnValue);
}

17. Right Click inside the method just created and select "Run Current Routine"

Creating a Web Service Checkpoint


1. Click the Web services checkpoint button ( ) in the Tools toolbar.
2. Select the TrainingWS Web Service and click the Next button.
3. Select the “GetProjectByID” method from the list.
4. Set the 'id' parameter value to 1 and click the Next button.
5. Set the values on the node to match the values shown in the image below inside the soap:Body area
only.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


232 TestComplete 7 Made Easy

6. Click the Finish button.

7. Click the Copy button of the Copy Text to Clipboard dialog.

8. Create a new method in the script edited called "Checkpoint1".

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


WebServices Testing 233

9. Paste the copied code into the routine.

[VBScript]
Sub CheckPoint1
Call WebServices.TrainingWS.GetProjectByID(1)
If (Not XML.GetProjectByID.Compare(WebServices.TrainingWS)) Then
Call Log.Error(_
"The GetProjectByID method of the TrainingWS web service returned an"_
" incorrect value.")
End If
End Sub

[JScript]
function CheckPoint1()
{
WebServices.TrainingWS.GetProjectByID(1);
if(!XML.GetProjectByID.Compare(WebServices.TrainingWS))
Log.Error(
"The GetProjectByID method of the TrainingWS web service returned an incorrect"+
"value.");
}

10. Right click in the routine and select Run Current Routine.

11. An error message is displayed in the test log. Expand the details of the XML node in the test log to
see the errors.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


234 TestComplete 7 Made Easy

12. Double-click the "GetProjectByID" project item of the "Stores | XML" project item.
13. Expand the nodes until the Description and DueDate nodes are shown.
14. Delete the Description and DueDate nodes.

15. Check the "Compare in subtree mode"


16. Re-run the "Checkpoint1" Routine. No error will be displayed in the test log.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


WebServices Testing 235

18.7 Summary
In the section we learned how to retrieve information about web services in order to perform web service
testing. We started by testing with a simple web service method using primitive types and worked up to
testing a web service with a complex interface. We also learned how to change the default behavior of
TestComplete for timeouts and about XML checkpoints.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

XIX
HTTP Performance Testing
HTTP Performance Testing 237

19 HTTP Performance Testing


19.1 Objectives
This section explores HTTP performance testing and other types of performance testing (e.g. load, stress,
scalability). You will also learn about HTTP traffic recording and modification. In this section you will learn:

· What is HTTP performance testing?


· The different types of HTTP performance testing
· How TestComplete records HTTP traffic
· How to modify the HTTP traffic

19.2 Performance Testing Your Web Applications


Performance testing of a web application is an important part of the development process. It will let you
know if your application is multi-user friendly and at what point does the application "break-down". Some of
the things that TestComplete can show through analysis are:

· Scalability Testing: Do hardware changes to the web server cause change to the performance of the
web application?
· Load Testing: Do the server's change with different number of users?
· Stress Testing: Will enough users cause the web server to crash?
· Load Testing or Stress Testing: At what number of users does the web server break or slow down too
much?

By recording different HTTP tasks, you can create realistic scenarios of user interaction with the web site.

Note: TestComplete can record traffic against HTTP as well as HTTPS connections.

19.3 HTTP Load Testing Options


1. Select Tools | Options from TestComplete main menu.
2. Select Engines | HTTP Load Testing from the options tree on the left of the dialog. The default HTTP
Load Testing options will display:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


238 TestComplete 7 Made Easy

TestComplete can record both HTTP and HTTPS web traffic and automatically captures these protocols
without any specific proxy setting requirements.

Traffic Transponder
· Cookie handling - Configures how TestComplete handles sending of cookies during playback. See the
cookie handling section below for more information.
· Send timeout - The number of seconds that TestComplete will wait for a acknowledgement from the
web server that a connection has been made.
· Receive times - The number of seconds that TestComplete will wait for a reply from the web server.
· Simulate request to third-party site - If checked, TestComplete will not ask for images or other
information from other sites that the web page might request.
· Store request details - If unchecked, TestComplete will only store the header information and not the
details of a web request.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


HTTP Performance Testing 239

· Synchronize requests - Forces the order of requests to remain the same as when recording, i.e. get
the web page before the images on the page. Requests can get out of order if network traffic is high.

HTML Hidden Controls


Certain web pages, like ASP.NET, utilize hidden HTML controls to transfer information from server to
client and back. TestComplete allows you to specify which hidden values should be updated during
playback to better simulate interaction with the server. You can specify which controls TestComplete
should update during playback by editing the HTTP Load Testing Project Item. Simply right click and
select "Edit" (see Hidden Controls editor below). By default, TestComplete populates the list with common
ASP.NET hidden field names though you can add any values necessary for your testing requirements.

19.4 Cookie Handling


A cookie is data stored on the client side, such as a user security token used to authorize an request to a
secured web site. The type of cookies that a web site generates makes a difference in how a web server
responds to a request. Cookie data can change from run to run of a load test and TestComplete allows
different methods for handling cookies:

· Do not use cookies - This is the same as disabling cookies in your Internet browser. TestComplete will
ignore all cookies while running the load test.
· Use recorded cookies - Cookies will affect the server response and the server should produce the
same responses as recorded. However, since cookies can have expiration dates, the response may be
an error.
· Use real-time cookies - The default selection, TestComplete will replace the cookies as needed from
the web server responses.

The default for a visually created test is to set the ClearCookies property of the virtual users to true. When
the ClearCookies property is true, all cookies are automatically recreated. If you want cookies to be
recreated, cookies need to be cleared before starting a load test for virtual users created in script.

19.5 Recording
Recording HTTP traffic is similar to standard recording. One difference - it is easier if you have your client
application (Internet Explorer, Firefox, etc) started, and in the case of web browsers, on the web page you
want to start on.

Note: It is also a good idea to clear the cache of the web browser you are using before recording.

Tip: If you are planning to modify the recorded HTTP traffic and using 'classic' ASP.NET (using
viewstate), turn off HTTP 1.1 in the web browser before recording. This will prevent the web server

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


240 TestComplete 7 Made Easy

from using HTTP compression, but makes it easier to modify the traffic.
1. Start by clicking the record button in TestComplete. On the recording toolbar, click the "Record an
HTTP task" button.

2. To select a load testing task either:

Enter a name under Record a new task for a new task.


Select Append traffic to the following task and select an existing task. This will add the http traffic
to an existing task.

3. When the recording is done, you will end up with a script for running a load test with one single virtual
user.

[VBScript]
Sub Test1
Dim HTTPTask
Dim VirtualUser
Set HTTPTask = LoadTesting.HTTPTaskByName("Task")
Set VirtualUser = LoadTesting.CreateVirtualUser("VirtualUser1")
Set VirtualUser.Task = HTTPTask
Call VirtualUser.Run("Task")
End Sub

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


HTTP Performance Testing 241

[JScript]
function Test1()
{
var HTTPTask;
var VirtualUser;
HTTPTask = LoadTesting.HTTPTaskByName("Task");
VirtualUser = LoadTesting.CreateVirtualUser("VirtualUser1");
VirtualUser.Task = HTTPTask;
VirtualUser.Run("Task");
}

4. The recorded task will be under the Tasks project item under the LoadTesting project item in the
Project Explorer.

5. Double-click on the Task to get a look at the recorded HTTP traffic.

19.6 Connections, Requests and Responses


A load testing task in TestComplete will consist of one or more connections to the web server. Within these
connections are requests that TestComplete sends and the recorded or expected response that
TestComplete receives.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


242 TestComplete 7 Made Easy

The request page holds the properties of the currently selected request in the Connections tree. The fields
of the request header are shown in the table. All of these fields can be modified directly or in script code.
The request method (POST or GET) is shown in the edit box above the fields (note: the protocol version is
also shown). The "Raise Events" option is used to indicate this request will trigger an
OnLoadTestingRequest event during playback. OnLoadTestingRequest will allow modification of the
request before sending it to the web server.

The response page shows the properties and contents of the response from the web server for the selected
request. Depending on the Content-Type, TestComplete will show the response content below the
properties grid. For example, an image request will show the image, a SOAP request will show the SOAP
response, etc. Again, the information can be edited here or changed in script code. The "Raise Events"
checkmark will call the OnLoadTestingResponse for the selected request/response pair.

19.7 Visual Creation of a Load Test


Load Tests can be created both visually and in script. To create a load test visually:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


HTTP Performance Testing 243

1. Select the "Tests" project item under the Load Testing project item

2. Right-click and select Add | New Item...


3. Name the Test.

4. Enter a "Description" for the test


5. Enter or select a "Result Group". Result groups are used to categorize groups of test runs for analysis.
6. Right-click in the Virtual Users area and select New Item.

7. Enter a name for the group of users

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


244 TestComplete 7 Made Easy

8. Enter the number of virtual user you want for this group (it is not recommend that more the 300 virtual
users be assigned to a computer).
9. Choose which task this group of user is going to perform.
10. Assign the group to run on a particular computer (Master is the local computer).
11. Choose which browser to simulate in the request.
12. The start delay is how long after the test starts to kick off this group (simulating a gradual increase in
load).
13. Change the connection speed to simulate the speed of the download.

Once you are finished creating the test, you can run the test by right clicking and selecting Run.

19.8 Analysis of the Test Log


The load test log is broken up into parts. The top part shows how each virtual user did overall.

The column headings are as follows:

· Virtual User # in the order they complete their task.


· Did the user complete the task without error/warnings.
· Virtual User Name.
· The task performed.
· Which station performed the task.
· The total time needed to complete the task.
· The number of connections simulated in the task.

The middle section shows how each of the connections did for the currently selected user from the users
section.

The green line in the graph shows the actual request execution sum, the red line show the total time to
perform all requests. Column heading are:

· State (did this connection pass or fail).

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


HTTP Performance Testing 245

· Host that the connection was run against.


· Which port the connection used.
· How long it took to Initialize the connection.
· Number of requests in this connect.
· The total time to simulate this connection.
· Total Bytes received from the web server for this connection.
· Total Bytes sent to the web server for this connection.
· How long after the start of the load test was this request sent.

· How many bytes per a second where sent/received.


· The time of day the connection was started.
· How long it took to do the request.
· The minimum response time for all the requests in this connection
· The maximum response time for all the requests in this connection

The bottom section is divided into two parts, Requests and Headers:

Requests columns are:

· Request # in the selected connection.


· The State of the request.
· The time to do the request.
· # of bytes sent.
· how long until a response.
· # of bytes received.
· # of bytes sent/received per a second.
· # of bytes sent per second.
· # of bytes received per a second.

The Headers area shows the actual headers sent and received for the selected request.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


246 TestComplete 7 Made Easy

Comparing Multiple Test Runs


There is another type of log created that allows comparisons of multiple test runs. Found in the project
explorer under the project suite name and ending with the word "Analysis"

Select the named group you are interested in and you will get the results of all the test runs for that group.

19.9 Modifying HTTP Traffic


With TestComplete you can modify HTTP traffic as necessary. For example, you may want to change the
properties of the HTTP request and modify it directly before running the HTTP task.
[VBScript]
Sub Test1
Dim HTTPTask
Dim Request
Dim VirtualUser
Set HTTPTask = LoadTesting.HTTPTaskByName("Order")

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


HTTP Performance Testing 247

Set Request = HTTPTask.Connection(0).Request(0)


Randomize
Request.Variables.Item("paints") = Int(1000 * Rnd()) + 1
Request.Variables.Item("pencils") = Int(1000 * Rnd()) + 1
Request.Variables.Item("albums") = Int(1000 * Rnd()) + 1
Set VirtualUser = LoadTesting.CreateVirtualUser("VirtualUser1")
Set VirtualUser.Task = HTTPTask
Call VirtualUser.Run("Order")
End Sub

[JScript]
function Test1()
{
var HTTPTask
var Request
var VirtualUser
HTTPTask = LoadTesting.HTTPTaskByName("Order")
Request = HTTPTask.Connection(0).Request(0)
Request.Variables.Item("paints") = Math.round(100 * Math.random()) + 1
Request.Variables.Item("pencils") = Math.round(100 * Math.random()) + 1
Request.Variables.Item("albums") = Math.round(100 * Math.random()) + 1
VirtualUser = LoadTesting.CreateVirtualUser("VirtualUser1")
VirtualUser.Task = HTTPTask
VirtualUser.Run("Order")
}

Caution: There is one warning with this method, since you are making a copy of the HTTP task for
each virtual user, it is possible to consume too much memory causing a slow down of the test.

The Second method is to use the OnLoadTestingRequest event to modify the traffic. To use
OnLoadTestingRequest, first checkmark the raise events on all the request you wish to modify.

You can also configure events to be raised in code:

[VBScript]
Sub Test1
Dim HTTPTask
Dim VirtualUser

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


248 TestComplete 7 Made Easy

Set HTTPTask = LoadTesting.HTTPTaskByName("Task")


HTTPTask.Connection(0).Request(0).RequestEventTrigger = True
Set VirtualUser = LoadTesting.CreateVirtualUser("VirtualUser1")
Set VirtualUser.Task = HTTPTask
Call VirtualUser.Run("Task")
End Sub

[JScript]
function Test4()
{
var HTTPTask;
var VirtualUser
HTTPTask = LoadTesting.HTTPTaskByName("Order")
HTTPTask.Connection(0).Request(0).RequestEventTrigger = true
VirtualUser = LoadTesting.CreateVirtualUser("VirtualUser1");
VirtualUser.Task = HTTPTask;
VirtualUser.Run("Task");
}

Next, add the OnLoadTestingRequest event handler. Open the editor for Events from the Project
Explorer and click the New button next to the OnLoadTestingRequest in the HTTP LoadTesting Events
category.

Click OK in the New Routine Dialog and add script code to modify the request:

[VBScript]
Sub GeneralEvents_OnLoadTestingRequest(Sender, User, Request)
Request.Variables.Item("paints") = Int(1000 * Rnd()) + 1
Request.Variables.Item("pencils") = Int(1000 * Rnd()) + 1
Request.Variables.Item("albums") = Int(1000 * Rnd()) + 1
End Sub

[JScript]
function GeneralEvents_OnLoadTestingRequest(Sender, User, Request)
{
Request.Variables.Item("paints") = Math.round(100 * Math.random()) + 1
Request.Variables.Item("pencils") = Math.round(100 * Math.random()) + 1
Request.Variables.Item("albums") = Math.round(100 * Math.random()) + 1
}

19.10 Hands on Lab: Working with HTTP Traffic

Basic HTTP Recording and Playback


1. Create a new project and project suite using HTTP load testing template.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


HTTP Performance Testing 249

2. Start up Internet Explorer and open the www.automatedqa.com web page.


3. Switch from recording a script to recording HTTP traffic.

4. Record an HTTP Load Test.

· Enter ‘TestComplete in the search and hit the Enter key.


· Click the ‘Contact Us’ link.
· Click the ‘Home’ link.
· Stop the recording.
5. Double-click the newly created Task in the Project Explorer.
6. In the task editor, delete connections that do not point to www.automatedqa.com:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


250 TestComplete 7 Made Easy

7. Right-click on the Tests Project Item of the LoadTesting Project Item in the Project Explorer and
Select Add | New Item...
8. Press OK in the Create Project Item Dialog.
9. Create an HTTP Load Test with five virtual users.

· Add a description "HTTP Lab"


· Add a Result Group "HTTP Lab"
· Make sure that "Run concurrently" is check marked.
· Right-click the white area under virtual users and select New Item from the context menu.
· Change the User Count to 5
· Set the Task to the name of new created task.
· Set the workstation to "Master"
10. Right-click the newly created Test and select Run from the context menu.
11. Examine the newly created test log.

Modify Traffic Using the OnLoadTestingRequest Event.


1. In the HTTP Task select the first request and check mark Raise Events.

2. In the Events Editor, select OnLoadTestingRequest and click the New button.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


HTTP Performance Testing 251

3. Click the OK button in the New Routine dialog.


4. Add the following code:

[VBScript]
Dim SearchValues
SearchValues = Array("TestComplete","AQtime","Automated Build Studio")
Randomize

Sub GeneralEvents_OnLoadTestingRequest(Sender, User, Request)


Request.Variables.Item("search") = Escape(SearchValues(Int(3 * Rnd())))
End Sub

[Jscript]
var SearchValues = new Array("TestComplete","AQtime","Automated Build Studio");

function GeneralEvents_OnLoadTestingRequest(Sender, User, Request)


{
Request.Variables.Item("search") =
escape(SearchValues[Math.round(3 * Math.random())])
}

5. Right-click on the Test created from the first part of the lab and select Run from the context menu.

6. Examine the Headers for the different user to see the changes in the traffic.

19.11 Summary
In this section, we have learned about HTTP Performance testing and the types of performance testing such
as load, stress and scalability. We have learned how to record HTTP traffic and how to modify the traffic
before sending request to the web server.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

XX
Remote Agent
Remote Agent 253

20 Remote Agent
20.1 Objectives
Remote Agent is a tool that allows for the distribution of HTTP loads tests across a network of computers.
In this section you will learn:

· Installing Remote Agent


· Running Remote Agent
· Configuring Remote Agent
· Using Remote Agent for HTTP Load Testing

20.2 Installing Remote Agent


AutomatedQA provides a separate, standalone installation of Remote Agent allowing for easy deployment to
other machines on a network. Remote Agent can be installed in two modes, console mode which runs on
your Windows Desktop or as a Windows service. In both instances Remote Agent is started when the
machine starts though if there is no active user logged onto the machine the Service mode will still be
available for use whereas console mode requires a user to be logged onto the machine.

During installation, you will be prompted to select which mode you want Remote Agent to use:

20.3 Running Remote Agent


During the installation of Remote Agent you selected a mode indicating how it should be executed either
console mode or as a Windows service. In both cases, Remote agent is launched automatically when
Windows starts. In the case of console mode, Remote Agent is started as soon as a user logs onto the
machine whereas in service mode, Remote Agent is started when Windows is started regardless of whether
or not a user is logged on.

Console Mode
When running Remote Agent in console mode you'll see this window on your Windows Desktop:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


254 TestComplete 7 Made Easy

To exit Remote Agent from this mode simply activate the window by clicking on it and press Escape.

Service Mode
When Remote Agent is installed in service mode there is no visible UI that will appear. To control the
execution of Remote Agent you need to change the settings under Windows Services. In XP, you can
view Windows Services Window by running the command "services.msc" from the Run command on
the Windows Start menu.

You should see a window that looks like this:

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Remote Agent 255

From this window you can right click on TestComplete 6 HTTP Load Testing Remote Agent and
change its Startup Type.

20.4 Configuring Remote Agent


Remote Agent supports several different configuration settings stored in an XML file located in \Program
Files\Automated QA\TestComplete 6\RAS\Bin\ras.config which is created when Remote Agent is executed
for the first time. This file is an XML file that can be edited using any plain text file editor such as Windows
Notepad. Below is a table listing the available options that can be configured via the ras.config XML file:

NOTE: In TestComplete 6.3 and later Remote Agent (RA) is implemented as a Distributed COM (DCOM)
server meaning it listens in on the standard Microsoft DCOM port of 135. Additionally, TestComplete will try
to connect to Remote Agent through port 135 as well.

Setting Description

ra port As of TestComplete 6.3 this setting is obsolete.

description Any descriptive string concerning the Remote Agent instance on the computer.

use proxy 0-1. Set this option to 1, if --

· There is a proxy server between the computer where the Remote Agent and the

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


256 TestComplete 7 Made Easy

tested Web server is installed.

· There is a proxy server between the Remote Agent computer and the computer
where TestComplete executes.

· If the Remote Agent has direct access to the tested Web site and the TestComplete
computer, you may set this option to 0.

Default value: 0.

proxy host Specifies the proxy server that the Remote Agent uses to connect to the tested Web site
and to the computer where TestComplete runs. This can be either the computer name, or
IP address. This option is ignored if the use proxy option is set to 0.

proxy port Specifies the port which the Remote Agent uses to connect to the proxy server specified
by proxy host. Default value: 8080. This option is ignored if the use proxy option is set to
0.

proxy login Specifies the user name under which you want to connect to the proxy server (if it requires
user authentication).

proxy Specifies the password that confirms the identity of the user under whose name you want
password to connect to the proxy server (if it requires user authentication).

Note: Do not forget to end the RA process (stop its service) before changing its settings and then
restarting RA afterwards.

The XML file appears as follows:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>


<!DOCTYPE Nodes [

<!ENTITY % NameValue "CDATA">


<!ENTITY % PropType "(I|S|D|L|H|B)">
<!ENTITY % VersionValue "CDATA">

<!ELEMENT Prp (#PCDATA)>


<!ELEMENT Node (Node|Prp)*>
<!ELEMENT Nodes (Node)+>

<!ATTLIST Nodes version CDATA "1">

<!ATTLIST Node name CDATA #REQUIRED>

<!ATTLIST Prp name CDATA #REQUIRED>


<!ATTLIST Prp type CDATA #REQUIRED>
<!ATTLIST Prp value CDATA #REQUIRED>
]>
<Nodes version="1">
<Node name="root">
<Prp name="proxy host" type="S" value="proxy.domain (undefined)"/>

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Remote Agent 257

<Prp name="description" type="S" value="Workstation's Load Testing service"/>


<Prp name="proxy password" type="S" value=""/>
<Prp name="use proxy" type="B" value="0"/>
<Prp name="proxy port" type="I" value="8080"/>
<Prp name="proxy login" type="S" value=""/>
<Prp name="ra port" type="I" value="9191"/>
</Node>
</Nodes>

Configuring a Proxy Server


If your organization uses a proxy server to connect to the web you'll need to configure Remote Agent to use
the proxy server. To do that you need to edit the above XML file using any plain text editor like Windows
Notepad. For example, to configure a proxy server you would:
1. Start Windows Notepad
2. Open \Program Files\Automated QA\TestComplete 6\RAS\Bin\ras.config
3. Look for the <Prp> with the following Name attributes and change them accordingly:

· proxy host - change the value attribute to the server domain name or IP address of the proxy server
· proxy password - change the value attribute to the password for the proxy server, if any
· use proxy - change the value attribute to 1 to enable the proxy
· proxy port - change the value attribute to the port number used for the proxy

20.5 Hands on Lab: Working with Remote Agent for HTTP Load
Testing
To use Remote Agent you need to setup an HTTP Load Testing project in TestComplete. The Load Testing
project has features that allow you to leverage Remote Agent running on multiple machines for testing web
applications or services.

Creating an HTTP Load Testing Project


1. Start TestComplete and select File|New|Project

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


258 TestComplete 7 Made Easy

2. On the Create New Project dialog select HTTP Load Testing and click OK
3. Click the Finish button on the Project Wizard dialog to create your new project

Once created the new project will display the following nodes (based on your TestComplete settings
your project may vary slightly):

The LoadTesting node contains the items of interest for conducting HTTP Load testing. These nodes

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Remote Agent 259

are:
· Stations - represents the machines that will be conducting the tests. The Master sub-node
represents the machine that TestComplete is running on.
· Tasks - is the HTTP traffic you’re interested in testing.
· Tests - allows you to assign tasks to various stations for test execution.

Working with Stations


In order to leverage Remote Agent running on networked machines you'll need to configure the machines
under the Stations node. To add a machine that is running Remote Agent do the following:
1. Right click the stations node and select Add|New Item... You will see a dialog that allows you to
configure a networked machine that's running Remote Agent.

2. In the Host edit box enter the machine name or IP address.


3. Change the Name edit box to something more meaningful.

Note: You'll be able to change all of these settings from the project's Workspace so don't worry if
you make a mistake. You can add and remove Stations from your project as necessary from the
Project Explorer.

Setting up Tasks
The next step is to create the HTTP traffic you want to load test your server with. The easiest way to
produce traffic is using TestComplete’s recording facilities.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


260 TestComplete 7 Made Easy

1. Configure Internet explorer to use TestComplete as a proxy allowing it to monitor and record HTTP
traffic. For IE you can do that from the Connections tab of the Internet Options dialog setting the
proxy to localhost on port 9999. For Firefox open the Tools | Options dialog and look on the
Advanced page, under the Network tab.
2. Click the record button on the TestComplete toolbar and once recording begins click the Record an
HTTP Task button (circled in red below):

3. This will bring up the Select Load Testing dialog where you can decide to record a new HTTP traffic or
append it to an existing task.
4. Once you click OK you can begin recording HTTP traffic by simply using your browser. TestComplete
will record the HTTP traffic and add it to the task you specified.

Assigning Tasks to be Executed by Remote Agents


Once you've added Stations to your project and created HTTP Tasks for execution you need to configure
which Tasks which be executed by which Stations:
1. Right-click the Tests node in the Project Explorer and select Add | New Item...
2. On the Create Project Item dialog name the test accordingly and click OK.
3. Right-click the Virtual Users grid and select New Item. This will create a new entry in the Virtual Users
table and allow you to assign work for a particular Remote Agent.
4. To specify a Task to execute, click the Task cell in the grid and select a task from the drop down list.

5. To specify a Workstation (a.k.a. Remote Agent) click the Workstation cell and use the dropdown to
specify a particular Remote Agent. Once completed your Virtual Users should appear something like
this:

At this point, you're ready to leverage Remote Agent and execute your tests harnessing the power of
your networked machines to HTTP Load Test your web applications.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Remote Agent 261

20.6 Summary
Remote Agent is a tool that allows for the distribution of HTTP loads tests across a network of computers.
With Remote Agent installed a single TestComplete user can quickly and easily harness the power of a
network to provide real world load testing of HTTP based web applications. In addition, Remote Agent has a
small footprint and separate install allowing it to be easily deployed for rapid HTTP load testing.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

XXI
Distributed Testing
Distributed Testing 263

21 Distributed Testing
21.1 Objectives
This section explains how tests are run on several computers at the same time. In this section you'll learn:

· What is a Distributed Test.


· What are the parts of a Distribute Test.
· How to setup a Distributed Test.
· How to use SyncPoints.
· How to use Network Suite Variables.

21.2 Network Suites


Distributed Testing is the ability of TestComplete to control test cases running on several computers at the
same time. In addition to running the tests, the computers involved can communicate with each other using
TestComplete. In order to perform a distributed test, all projects involved must contain the Network Suite
project item. In addition, all the computers involved must have the same version of TestComplete/
TestExecute on them (including the minor version number).

Most of the setup of a distributed test, takes place in the master project. The minimum you need to run a
distributed test is a master project with at least one host machine and at least one task for that host
machine to run.

The root level of Distributed Testing is the Network Suite:

The workspace editor for NetworkSuite consists of three parts:


1. Properties - This is where you can setup a shared path for all the computers to use in testing.
TestComplete uses this path to create a network shared folder during the run of the network suite.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


264 TestComplete 7 Made Easy

2. Variables - Using these variables, the computers involved in the test can pass data to each other. This
data can only be of types; string, integer, double or Boolean.

3. Run State - This displays the state of each computer during the test run.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Distributed Testing 265

21.3 Hosts
Hosts are the secondary computers involved in the test. Hosts need to have either TestComplete or
TestExecute on them and can be addressed by either name or IP address. The base path is where the
computer will start looking for the project to run the test (not required).

Since firewall and other network communication issues can happen, it is recommend that you verify the
existence of the host. Right-click the workspace to get the context menu and click Verify.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


266 TestComplete 7 Made Easy

21.4 Jobs/Tasks
Jobs and Tasks are where tests to be run are controlled. A Job consists of one or more host computers
tasks. Each job is run to completion before the next job is run. Under each Job are the Tasks (tests) to be
run on the host computer. Each host computer can only be used once in a job for an active task.

Tasks have the following properties:


1. Active - Whether or not the test is run.
2. Name - Name of the task.
3. Path - Path to the TestComplete project that holds the test to be run (relative to the host computer).
4. Copy the remote log - Controls if the master computer gets a copy of the log file from the host
computer.

5. Action after run - Determines the action to take after the test completes on the host computer.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Distributed Testing 267

6. Tag - A value sent to the host computer at the start of the test.
7. Test - The test to be run. If left blank it will be the project/project suite from the path property.
8. Use previous instance - Controls what to do if TestComplete/TestExecute is already running on the
host computer.

9. Remote application - Whether to use TestComplete or TestExecute on the host computer.

21.5 SynchPoints
SynchPoints delay execution of the test until all computers with that synch point name reach the
synchronization point. When all the computers with a named SynchPoint hit that Synchronize Point, they
will continue on with their test. An example of an effective use for SynchPoints: you want to avoid where two
or more users try to edit the same record at the same time and post the data.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


268 TestComplete 7 Made Easy

21.6 Setup

Simple Distributed Test


1. Create a master project with a NetworkSuite Project Item.
2. Create a hosted (slave) project with a NetworkSuite Project Item.

3. Add notepad to the TestedApps project Item of the hosted project.


4. Modify the File Path property of the TestedApp to "" (blank)
5. Create (or record) a script method to type something into notepad.

[VBScript]
Sub Test1
Dim p1
Dim w1
TestedApps.notepad.Run
Set p1 = Sys.Process("notepad")
Set w1 = p1.Window("Notepad", "*").Window("Edit")
w1.HScroll.Pos = 0
w1.VScroll.Pos = 0
Call w1.Click(135, 29)
Set w1 = p1.Window("Notepad", "*")
Call w1.Window("Edit").Keys("TestComplete Training - Distributed Testing")
w1.Close
p1.Window("#32770", "Notepad").Window("Button", "&No").ClickButton
End Sub

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Distributed Testing 269

[JScript]
function Test1()
{
var p1
var w1
TestedApps.notepad.Run();
p1 = Sys.Process("notepad");
w1 = p1.Window("Notepad", "*").Window("Edit");
w1.HScroll.Pos = 0;
w1.VScroll.Pos = 0;
w1.Click(135, 29);
w1 = p1.Window("Notepad", "*");
w1.Window("Edit").Keys("TestComplete Training - Distributed Testing");
w1.Close();
p1.Window("#32770", "Notepad").Window("Button", "&No").ClickButton();
}

6. Save the project.


7. Select the NetworkSuite Project Item in the Master Project and enter the path to the project suite in the
Shared Path.

8. Expand the Hosts Project Item and select Host1


9. Enter the name (or IP address) of the hosting (slave) computer.
10. In the Base path property enter "\\<Master Computer Name>\<Name of Project Suite directory>"

11. Right-click on Host1 and select Verify from the context menu.
12. Expand the Jobs Project Item.
13. Expand the Job1 Project Item.
14. Select the Task1 Project Item.
15. In the Path property enter "\<Name of Hosted Project>\<Name of Hosted Project>.mds".

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


270 TestComplete 7 Made Easy

16. In the Copy remote log property select "[Always]".


17. In the Use previous instance property select "[Use]".
18. In the Test property enter "<Name of Hosted Project>\Script\Unit1\Test1".

19. Right-click Task1 and select Verify from the context menu.
20. With verification, the NetworkSuite is ready to run. Right-click the NetworkSuite project item and select
Run from the context menu.

Using NetworkSuite Variables


NetworkSuite variables allow TestComplete to send data from one computer to another.
1. Modify the test in the hosted (slave) project.

[VBScript]
Sub Test1
Dim p1
Dim w1
TestedApps.notepad.Run
Set p1 = Sys.Process("notepad")
Set w1 = p1.Window("Notepad", "*").Window("Edit")
w1.HScroll.Pos = 0
w1.VScroll.Pos = 0
Call w1.Click(135, 29)
Set w1 = p1.Window("Notepad", "*")
Call w1.Window("Edit").Keys(NetworkSuite.Variables.Var1)
w1.Close
p1.Window("#32770", "Notepad").Window("Button", "&No").ClickButton
End Sub

[JScript]
function Test1()
{
var p1
var w1
TestedApps.notepad.Run();
p1 = Sys.Process("notepad");

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Distributed Testing 271

w1 = p1.Window("Notepad", "*").Window("Edit");
w1.HScroll.Pos = 0;
w1.VScroll.Pos = 0;
w1.Click(135, 29);
w1 = p1.Window("Notepad", "*");
w1.Window("Edit").Keys(NetworkSuite.Variables.Var1);
w1.Close();
p1.Window("#32770", "Notepad").Window("Button", "&No").ClickButton();
}
2. Add the variable "Var1" to the master project.
3. Change the Local Value property to "TestComplete Rocks"
4. Right-click the NetworkSuite project item and select Run from the context menu.

On the host (slave) computer, you will see "TestComplete Rocks" typed into notepad.

Synchronizing Computers
There are times when you want to have one computer wait for another computer to complete at least part of
its task before finishing the first computer's task. For example, you want the consumer's computer to wait
until the bank's computer has processed a debit before the consumer's computer checks its balance. We
will show a couple of ways to synchronize.

Using SyncPoints
1. Modify the test in hosted (slave) project.

[VBScript]
Sub Test1
Dim p1
Dim w1
TestedApps.notepad.Run
Set p1 = Sys.Process("notepad")
Set w1 = p1.Window("Notepad", "*").Window("Edit")
w1.HScroll.Pos = 0
w1.VScroll.Pos = 0
Call w1.Click(135, 29)
Set w1 = p1.Window("Notepad", "*")
Call w1.Window("Edit").Keys(NetworkSuite.Variables.Var1)
Call w1.Window("Edit").Keys("[Enter]")
NetworkSuite.Synchronize("SynchPoint1")
Call w1.Window("Edit").Keys(NetworkSuite.Variables.Var1)
w1.Close
p1.Window("#32770", "Notepad").Window("Button", "&No").ClickButton
End Sub

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


272 TestComplete 7 Made Easy

[JScript]
function Test1()
{
var p1
var w1
TestedApps.notepad.Run();
p1 = Sys.Process("notepad");
w1 = p1.Window("Notepad", "*").Window("Edit");
w1.HScroll.Pos = 0;
w1.VScroll.Pos = 0;
w1.Click(135, 29);
w1 = p1.Window("Notepad", "*");
w1.Window("Edit").Keys(NetworkSuite.Variables.Var1);
w1.Window("Edit").Keys("[Enter]");
NetworkSuite.Synchronize("SynchPoint1");
w1.Close();
p1.Window("#32770", "Notepad").Window("Button", "&No").ClickButton();
}

2. Right-click the SyncPoints Project Item, select Add | New Item... from the context menu.
3. Hit Enter on the Create Project Item dialog.
4. Create a script in the master project.

[VBScript]
Sub Test1
NetworkSuite.Run(false)
NetworkSuite.WaitForState(ns_Running)
Delay(30000)
NetworkSuite.Variables.Var1 = "Rocks"
NetworkSuite.Synchronize("SynchPoint1")
NetworkSuite.WaitForState(ns_Idle)
End Sub

[JScript]
function Test1()
{
NetworkSuite.Variables.Var1 = "TestComplete";
NetworkSuite.Run(false);
NetworkSuite.WaitForState(ns_Running);
Delay(30000);
NetworkSuite.Variables.Var1 = "Rocks";
NetworkSuite.Synchronize("SynchPoint1");
NetworkSuite.WaitForState(ns_Idle);
}

5. Right-click the SyncPoints Project Item, select Add | New Item... from the context menu.
6. Hit Enter on the Create Project Item dialog.
7. Right-Click in the newly created script and select Run Current Routine from the context menu.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Distributed Testing 273

On the hosted computer, "TestComplete" will be typed, followed by a delay and then on a new line
"Rocks" will be typed.

Using NetworkSuite Variables


1. Modify the test in hosted (slave) project.

[VBScript]
Sub Test1
Dim p1
Dim w1
TestedApps.notepad.Run
Set p1 = Sys.Process("notepad")
Set w1 = p1.Window("Notepad", "*").Window("Edit")
w1.HScroll.Pos = 0
w1.VScroll.Pos = 0
Call w1.Click(135, 29)
Set w1 = p1.Window("Notepad", "*")
Call w1.Window("Edit").Keys(NetworkSuite.Variables.Var1)
Call w1.Window("Edit").Keys("[Enter]")
NetworkSuite.Variables.Var2 = True
Call NetworkSuite.WaitForNetVarChange("Var2",false)
Call w1.Window("Edit").Keys(NetworkSuite.Variables.Var1)
w1.Close
p1.Window("#32770", "Notepad").Window("Button", "&No").ClickButton
End Sub

[JScript]
function Test1()
{
var p1
var w1
TestedApps.notepad.Run();
p1 = Sys.Process("notepad");
w1 = p1.Window("Notepad", "*").Window("Edit");
w1.HScroll.Pos = 0;
w1.VScroll.Pos = 0;
w1.Click(135, 29);
w1 = p1.Window("Notepad", "*");
w1.Window("Edit").Keys(NetworkSuite.Variables.Var1);
w1.Window("Edit").Keys("[Enter]");
NetworkSuite.Variables.Var2 = true;
NetworkSuite.WaitForNetVarChange("Var2",false);
w1.Window("Edit").Keys(NetworkSuite.Variables.Var1);
w1.Close();
p1.Window("#32770", "Notepad").Window("Button", "&No").ClickButton();
}

2. Create a script in the master project.


[VBScript]
Sub Test2
NetworkSuite.Variables.Var1 = "TestComplete"
NetworkSuite.Run(false)
Call NetworkSuite.WaitForNetVarChange("Var2",true)
NetworkSuite.Variables.Var1 = "Rocks"

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


274 TestComplete 7 Made Easy

NetworkSuite.Variables.Var2 = False
NetworkSuite.WaitForState(ns_Idle)
End Sub

[JScript]
function Test2()
{
NetworkSuite.Variables.Var1 = "TestComplete";
NetworkSuite.Run(false);
NetworkSuite.WaitForNetVarChange("Var2",true);
NetworkSuite.Variables.Var1 = "Rocks";
NetworkSuite.Variables.Var2 = false;
NetworkSuite.WaitForState(ns_Idle);
}

3. Add the variable "Var2" to the master project in the NetworkSuite project item.
4. Right-click in the newly created script and select Run Current Routine from the context menu.

The hosted computer will do the same things as the SyncPoint demo, but with less delay in the project.
Notice that the hosted computer can pass data back to the master computer.

21.7 Summary
In this section we learned how tests are run on several computers at the same time. We also learned how
to script Distributed Tests using Synchronize Points and Network Suite Variables.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

XXII
User Forms
276 TestComplete 7 Made Easy

22 User Forms
22.1 Objectives
This section demonstrates how to create user forms and manipulate them using script: In this section you'll
learn:

· What is a user form.


· Learn how to create an user form.
· How to access user forms in script.

22.2 Creating
Creating a user form in TestComplete is very similar to creating a form in most development IDEs (Visual
Studio, Eclipse, Rad Studio). First add the UserForms project Item to the project. The UserForms project
item is a holder (folder) for all the user forms created in the project. The next step is to add an user form to
the project (right-click of the UserForms project item and Add | New Items...). In our example, we will
create a simple user name and password dialog.

The left side of the editor contains the components that can be added to the user form. The middle is the
actual user form. And the right side is where the properties and events are setup. Components are added
by dragging with the mouse and dropping on the form. The components that we use are TcxTextEdit (from
the Editors Category), TcxButton (Buttons Category) and TcxLabel (Helpers Category). We will use two of
each.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


User Forms 277

We will also need to set the properties for all of the components (only changed properties shown):

Property Value

User Form

Caption Enter Login Information:

Height 130

Width 450

cxButton1

Caption OK

Default True

ModalResult mrOK

cxButton2

Cancel True

Caption Cancel

ModelResult mrCancel

cxLabel1

Caption User Name:

cxLabel2

Caption Password:

edtUser (Renamed from cxTextEdit1)

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


278 TestComplete 7 Made Easy

Name edtUser

edtPassword (Renamed for cxTextEdit2)

Name edtPassword

Properties.EchoMode eemPassword

22.3 Scripting
Now that we have created a user form, we need to learn how to use the form in a script. There are two
method used to display an user form - Show() and ShowModal(). In our example we will use ShowModal
(), which displays the user form and stops the script from playing until the user answers the dialog. Note:
Show() will continue with the next line in the script code.

[VBScript]
Sub Main
'Fill in the current user name
UserForms.UserNameAndPassword.edtUser.Text = Sys.UserName
if UserForms.UserNameAndPassword.ShowModal = mrCancel Then
Runner.Halt("User Cancelled Test")
end If
Log.Message("User: " & UserForms.UserNameAndPassword.edtUser.Text &_
" Logged in with Password: " &_
UserForms.UserNameAndPassword.edtPassword.Text)
End Sub

[JScript]
function Main()
{
//Fill in the current user name
UserForms.UserNameAndPassword.edtUser.Text = Sys.UserName;
if (UserForms.UserNameAndPassword.ShowModal() == mrCancel)
Runner.Halt("User Cancelled Test");
Log.Message("User: " + UserForms.UserNameAndPassword.edtUser.Text +
" Logged in with Password: " +
UserForms.UserNameAndPassword.edtPassword.Text);
}

22.4 Summary
In this chapter, we learned the basics of creating a user form. Then we learned how to display the form to
the user and get information from the form.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

XXIII
Best Practices
280 TestComplete 7 Made Easy

23 Best Practices
23.1 General
The following are general tips and best practices to help you get the most out of TestComplete:

· Record/Playback is a quick and easy way to get automated tests up and running but tend to be
brittle leading to problems when the application changes, etc.

· Use the TestItems of the project as a framework for Test Cases.

· Separate Data from the Test Framework (see Data-Driven Testing).


· Use the code metrics of the Code Explorer to improve the quality of the script code.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Best Practices 281

· Use reusable routines whenever possible.


· Keep routines short (less than a page of code).
· Use meaningful variable names (The default variable names of a recording are not very good variable
names).

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


282 TestComplete 7 Made Easy

23.2 Web Page


The following are tips for making effective use of TestComplete when testing web pages:
· Make the Page object a child of the browser process.

· Use either the Hybrid or Tree "Tree Model".

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

XXIV
Cheat Sheet
284 TestComplete 7 Made Easy

24 Cheat Sheet
24.1 Keyboard Shortcuts
Global Shortcuts (keys that work when TestComplete is running even if TestComplete does not have
focus)

Command Default Key

Pause script execution SHIFT-10

Fix Information SHIFT-CTRL-A

Record SHIFT-F1

Stop SHIFT-F2

Run SHIFT-F3

Pause recording SHIFT-F11

Load Testing Record SHIFT-F6

Low Level Record SHIFT-F4

Key Mapping (keys that work when TestComplete has focus, generally in the editors)

Command/Section Default Visual Studio Borland Classic

Debugging

Run F9 F5 F9

Reset CTRL-F2 SHIFT-F5 CTRL-F2

Step Over F8 F10 F8

Trace Into F7 F11 F7

Run to Cursor F4 F4 F4

Switch Breakpoint F5 F9 CTRL-F8

View Evaluate CTRL-F7 CTRL-F2 CTRL-F4

View Call Stack CTRL-ALT-S ALT-7 CTRL-ALT-S

View Watches CTRL-ALT-W ALT-3 CTRL-ALT-W

View Break Points CTRL-ALT-B CTRL-B CTRL-ALT-B

Project/Units

Close Page CTRL-F4 CTRL-F4 ALT-F3

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Cheat Sheet 285

Save Unit CTRL-S CTRL-S CTRL-S

Open Project CTRL-F11 CTRL-SHIFT-0 CTRL-F11

New Project CTRL-SHIFT-N

Save All CTRL-SHIFT-S CTRL-SHIFT-S

Display previous page CTRL-SHIFT-TAB CTRL-SHIFT-TAB CTRL-SHIFT-TAB

Display next page CTRL-TAB CTRL-TAB CTRL-TAB

Cursor movement

Cursor Left LEFT LEFT LEFT

Cursor Right RIGHT RIGHT RIGHT

Beginning of Line HOME HOME HOME

End of Line END END END

Up one line UP UP UP

Down one line DOWN DOWN DOWN

Up one page PGUP PGUP PGUP

Down one page PGDN PGDN PGDN

Beginning of Document CTRL-HOME CTRL-HOME CTRL-PGUP

End of Document CTRL-END CTRL-END CTRL-PGDN

Move to word before CTRL-LEFT CTRL-LEFT CTRL-LEFT

Move to word after CTRL-RIGHT CTRL-RIGHT CTRL-RIGHT

Delete operations

Delete character at cursor DEL DEL DEL

Delete character before BACKSPACE BACKSPACE BACKSPACE


cursor

Delete current line CTRL-Y CTRL-SHIFT-L CTRL-Y

Delete previous word CTRL-BACKSPACE CTRL-BACKSPACE CTRL-BACKSPACE

Delete next word CTRL-T CTRL-DEL CTRL-T

Miscellaneous

Indent selected block CTRL-SHIFT-I or TAB CTRL-SHIFT-I CTRL-SHIFT-I

Unindent selected block CTRL-SHIFT-U or SHIFT- CTRL-SHIFT-U CTRL-SHIFT-U


TAB

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


286 TestComplete 7 Made Easy

Toggle insert/overwrite INS INS INS


mode

Undo CTRL-Z or ALT- CTRL-Z or ALT- ALT-BACKSPACE


BACKSPACE BACKSPACE

Redo SHIFT-CTRL-Z or SHIFT-CTRL-Z or ALT-SHIFT-BACKSPACE

ALT-SHIFT-BACKSPACE ALT-SHIFT-BACKSPACE

Print CTRL-P CTRL-P CTRL-P

Scroll display up one line CTRL-UP CTRL-UP CTRL-W

Scroll display down one CTRL-DOWN CTRL-DOWN CTRL-Z


line

Display context menu ALT-F10 (Code Editor ALT-F10 (Code Editor ALT-F10 (Code Editor
only) only) only)

Find CTRL-F CTRL-F CTRL-F

Replace CTRL-R CTRL-H CTRL-R

Search Again F3 F3 CTRL-L

Select All CTRL-A CTRL-A

Invoke Code Completion CTRL-SPACE CTRL-SPACE CTRL-SPACE

Code Templates CTRL-J CTRL-J CTRL-J

Bookmarks

Set Numbered Bookmark CTRL-SHIFT-# CTRL-SHIFT-# CTRL-SHIFT-#

Goto Numbered CTRL-# CTRL-# CTRL-#


Bookmark

Set Unnumbered CTRL-SHIFT-' CTRL-SHIFT-' CTRL-SHIFT-'


Bookmark

Goto Unnumbered CTRL-' CTRL-' CTRL-'


Bookmark

Clipboard

Cut to Clipboard CTRL-X or SHIFT-DEL CTRL-X or SHIFT-DEL CTRL-X or SHIFT-DEL

Copy to Clipboard CTRL-C or CTRL-INS CTRL-C or CTRL-INS CTRL-C or CTRL-INS

Paste from Clipboard CTRL-V or SHIFT-INS CTRL-V or SHIFT-INS CTRL-V or SHIFT-INS

24.2 Code Completion


TestComplete will automatically display the code completion dialog by default. If you accidentally close

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Cheat Sheet 287

this dialog (or you have turned Autocompletion off), the code completion dialog can be invoked by press
"CTRL-SPACE"

For method known by TestComplete, you can find out what parameters are needed by the method by
pressing "CTRL-SHIFT-SPACE" inside the parentheses.

24.3 Keyboard Handling in Recorder


TestComplete will record all keys entered to the active control while recording except for any keys that are
in the Global Shortcuts.

Global Shortcuts (keys that work when TestComplete is running even if TestComplete does not have
focus)

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


288 TestComplete 7 Made Easy

Command Default Key

Pause script execution SHIFT-10

Fix Information SHIFT-CTRL-A

Record SHIFT-F1

Stop SHIFT-F2

Run SHIFT-F3

Pause recording SHIFT-F11

Load Testing Record SHIFT-F6

Low Level Record SHIFT-F4

24.4 Global Shortcuts/Changing Keyboard Emulation

To access and change the Global Shortcuts:


· Select "Tools | Options" from the main menu
· Select "General | Global Shortcuts" from the Options dialog.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Cheat Sheet 289

· Select the Action


· Type in the new keyboard shortcut (note: if it is already in use, you will need to clear the one using it
first).

To access and change the keyboard emulation:


· Select "Tools | Customize Keyboard..." from the main menu.
· Choose the keyboard emulation that you want. (You can also set keyboard shortcuts for any command
in this dialog).

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


290 TestComplete 7 Made Easy

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

XXV
AutomatedQA
292 TestComplete 7 Made Easy

25 AutomatedQA
25.1 History
AutomatedQA offers software products and services for development and quality assurance projects
worldwide. They create innovative, award-winning and affordable products for the entire software development
lifecycle including TestComplete for test automation and AQtime, a sophisticated performance and memory
profiler. AutomatedQA has an impressive list of customers ranging from huge teams in the world's largest
organizations to progressive one-developer shops. AutomatedQA was founded in 1999 with headquarters
in Las Vegas, Nevada, United States.

AutomatedQA’s guiding principle is to be wholly focused on providing affordable and feature-rich developer
tools and quality assurance technologies, and on providing users with fast and accurate product support
each and every day.

What does affordable and feature-rich mean? It means bang for the buck. It means that their solutions tend
to cost a fraction of their competitor's prices and offer more features. A good example is their automated
testing tool, TestComplete. Some of their competitors charge separately for different test types like GUI
testing, unit testing and load testing. TestComplete includes all supported testing types in one product with
more features, for considerably less. It’s this combination of affordability and features that led Joel Spolsky,
of joelonsoftware.com to write, “AutomatedQA's TestComplete is a great product and just as capable as the
market leader at less than one-tenth the price. Why would anybody pay $6000 per seat for test
automation?”. -- Joel Spolsky

25.2 Product Offerings


AutomatedQA offers several products in the Software Application LifeCycle Management sector. This
include TestComplete, AQtime, Automated Build Studio, AQdevTeam and other derivatives of the main
products like TestExecute and TestRecorder.

AQtime

Debug, Optimize, and Deliver Rock Solid Applications


AQtime is AutomatedQA's award-winning performance profiling and memory and resource debugging toolset
for Microsoft, Borland, Intel, Compaq and GNU compilers.

The latest version of AQtime, AQtime 6, includes dozens of productivity tools that help you easily isolate
and eliminate all performance issues and memory/resource leaks within your code by generating
comprehensive and detailed reports for your .NET and Windows applications. AQtime supports .NET 1.0,
1.1, 2.0, 3.0 and 3.5 applications and Windows 32- and 64-bit applications.

AQtime is built with one key objective - to help you completely understand how your programs perform
during execution. Using its integrated set of performance and debugging profilers, AQtime collects crucial
performance and memory/resource allocation information at runtime and delivers it to you both in
summarized and detailed forms, with all of the tools you need to begin the optimization process. This is all
done without modifying the application's source code!

With AQtime's intuitive and user-friendly interface and instrumentation in hand, you will quickly know the
exact speed, memory usage, and application usability issues in your programs. As you optimize and
improve your code, AQtime provides all the tools to compare and merge results so that over time, an exact

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


AutomatedQA 293

and accurate "picture" of your application's state takes shape:

· Monitor and report on all areas that could degrade your project’s performance and quality.
· Assess the thoroughness of your tests by using Coverage Profiling.
· Ensure that you make the right code improvements from day one.
· Helps drill down to the exact line of source code that is responsible for performance or memory
allocation inefficiencies.

Automated Build Studio

Automate Software Builds, Tests and Deployment


In the current state of software development, with projects becoming more and more complex, building,
testing and releasing of software projects consumes an ever-increasing amount of time and resources.
Automated Build Studio is a powerful build and release management system that provides an easy way to
automate the software development build, test and release processes. Its intuitive interface and
unprecedented flexibility allows even inexperienced users to create complex visual macros which can

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


294 TestComplete 7 Made Easy

automate repetitive or day-to-day tasks with the single click of a button.

Even though the product name includes the word “build”, you can use Automated Build Studio to automate
any common or everyday tasks in your organization. Automated Build Studio contains over 540 built-in
operations that will help you:

· Compile applications
· Create installation packages
· Perform automated builds as scheduled tasks
· Get and put files from/into version control systems

· Label sources in version control systems


· Compile help files
· Create, modify and delete registry keys and INI file settings
· Copy and move files to a location (network drive, Web site, FTP server, etc.)
· Extract and pack files from/to ZIP and RAR archives
· Run automated test scripts and profilers
· Post bug reports to issue-tracking systems
· Send and receive e-mail, ICQ and newsgroup notifications
· Burn CDs and DVDs
· Register COM and .NET components
· Perform scripting operations in any of 3 scripting languages (VBScript, Jscript or DelphiScript) or many
other operations...

With Automated Build Studio you can:


· Automate your software builds
· Perform distributed builds
· Automate the process of application testing and profiling.
· Create deployment packages and write them to CD and/or DVD.
· Automate back-up processes.
· Automate data and system consistency checks (for example, you can automate checking the free disk
space or the availability of a Web service).

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


AutomatedQA 295

TestExecute
TestExecute allows you to execute scripts written with TestComplete and log test results on machines that
do not have TestComplete installed - using a simple, resource friendly command-line utility. TestExecute
gives QA departments the ability to test applications in real life user environments - such as at customer
sites - without the need to install TestComplete on the target machine.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


296 TestComplete 7 Made Easy

TestRecorder
TestRecorder is a set of runtime libraries to be distributed with your 32-bit and 64-bit applications. Once
incorporated into your app, TestRecorder fully records end-user actions in the binary format. Later, the
recorded data can be converted with TestComplete to an easily readable script code in VBScript, Jscript,
DelphiScript, C++Script or C#Script. These scripts tell you exactly what a user was doing during application
execution - allowing you to accurately repeat the sequence of user actions via TestComplete or
TestExecute.

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Part

XXVI
Professional Offering
298 TestComplete 7 Made Easy

26 Professional Offering

Support and Services


Support
You can get your support questions answered by posting a message on the AutomatedQA message
boards www.automatedqa.com/forums. Visit www.automatedqa.com/support for all your support
options. You may also visit http://www.automatedqa.com/products/testcomplete/screencasts/ for
helpful screencasts and videos.

Services
AutomatedQA’s worldwide network of partners can provide your organization with training and
services to help you ramp up more quickly or help with your existing automated testing projects. Go
to www.automatedqa.com/partners to find a partner that fits your needs.

TestComplete Training and Services from Falafel Software


The authors of this book are from Falafel Software, AutomatedQA’s premier services partner. Falafel
has a wide range of services ranging from TestComplete training and consulting to large-scale custom
enterprise application development. The professionals from Falafel Software are great to work with
and we hear nothing but effusive praise about them from our customers. Here’s a description of
some of their TestComplete related services:

TestComplete Training from Falafel Software


Onsite Training: A highly knowledgeable Falafel Software trainer will come to you and provide your
team with an enlightening 3-5 day class. This is the best way to ramp up quickly.

Online Training: For companies that have team members in multiple locations or in situations where
onsite training is not feasible, online training is a great option.

Training Summit: If your team only has a few individuals in need of training, this open-enrollment
option is the most cost effective solution.

TestComplete Consulting from Falafel Software


On a deadline? Need assistance from the Pros? Let Falafel provide you with world-class consulting
for all your TestComplete needs. Falafel’s consultants have been working with TestComplete since
the very beginning and are the highest qualified individuals to assist you.

TestCompleteTV.com from Falafel Software


TestComplete TV from Falafel Software provides an abundance of training videos that let you to

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


Professional Offering 299

learn at your own pace in an innovative environment. This is an inexpensive subscription solution
the guys at Falafel Software know you will love. Check out TestCompleteTV.com for more
information.

For more info on Falafel Software, go to www.falafel.com or call 1-888-GOT-FALAFEL (1-888-468-


3252).

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


300 TestComplete 7 Made Easy

Code Options 61

Index Code Templates


Complex types
61
219
Condition 63
Connections 241
-.- Consulting 298
Continuous Integration 37, 39
.NET 12, 57
Cookie Handling 239
Copy Script to Editor 48
-3- CPU 47
CSVDriver 165
32 bit 12 Customize 42

-6- -D-
64 bit 12 DDT 165
Debugging 63, 64, 65, 66

-A- Delay
DHTML
136
205
Activate 136 Distributed Testing 36, 268
ActiveFocus 142 DOM 196
Add Text To Script 128 DUnit 104
ADO 183
ADODriver
AJAX 205
165
-E-
Aliases 102 Editor 59, 60
Analysis 244 Email 90
AppendFolder 89 Eric Holton 292
Application 36 Evaluate 66
AQDevTeam 292 ExcelDriver 165
AQTime 292 Extended Information 89
Automated Build Studio 292
AutomatedQA 12, 292
-F-
-B- File Comparison
Files 150
150

Black Box 56 Find 203


Bookmarks 60 Finder tool 50
Breakpoints 63 Firewall Settings 237
Build 36 Functional Testing 36

-C- -G-
Call Stack 64 General Events 173
Checkpoint 142, 150, 154 Global Variables 65
Code Completion 59, 286 Gutter 61
Code Explorer 44, 280
Copyright © 2009 AutomatedQA Corp. - 2.0 Release
Index 301

-H- -N-
Highlight Object 99 Named Mappings 94, 99, 101, 102
Highlight on Screen 50 Naming convention 197
Hosts 265 NativeWebObject 203
HTTP Load Test 268 Network Suites 263
HTTP Load Testing 237, 239, 242, 253 Notepad 50
HTTP Performance Testing 36 NUnit 104, 105
HTTP Traffic 246
Hybrid 196
-O-
-J- Object Browser
Object Comparison
47
154
Java 12 Object Name Mapping 101
Jobs 266 Object Properties 48
JUnit 104 Objects 154
OnBeforeStep 120

-K- OnLogError
OS 47
175

Keyboard 284, 287, 288


Keyboard events 136 -P-
-L- Parameter Completion
Pass Count 63
59, 286

Pausing 130
Load Testing 36, 237
Playback 126
Local Variables 65
Plug-ins 84
Locals 65
PopLogFolder 89
LockEvents 91
Process Filter 48
Log Tree 89
Professional Offering 298
Low Level Procedure 133
Profile 85
Low Level Procedure Collection 133
Project Anatomy 75
Project Explorer 44
-M- Project Item
Project Items
44, 75
84
Manual Steps 113 Project Structure 75
Manual Test 120 Project Suite 44
Map to Object 94 Project Template 79
Mapping Dialog 101 Project Wizard 75
Maunal Test 112, 113 Project Worksapce 44
Maunal Test Events 120 Proxy Settings 237
Maunal Testing 36
Menus 42
Mouse events 136 -Q-
MSTest 104
QA 36

Copyright © 2009 AutomatedQA Corp. - 2.0 Release


302 TestComplete 7 Made Easy

TestComplete 12, 292

-R- TestedApps
TestExecute
85
292
TestRecorder 292
R&D 36
Tests 239
RAM 47
Toolbar 42
Recording 126, 129, 239
Training 298
Recording Toolbar 127
Tree 196
Reflection 57
Region Comparison 142
Regions 142
Regression Testing 36
-U-
Remote Agent 253, 255 Unexpected Windows 176
Remote Agent Port 255 Unit Testing 36, 104, 108
Remote Agent Proxy 255 User Forms 276, 278
Requests 241, 246
Responses
Result Logs
241, 246
44, 244 -V-
Run As 85
Virtual Users 242
Run Mode 85

-S- -W-
Watch List 66
Scalability Testing 237
Web Accessibility Checkpoint 200
Screen Coordinates 133
Web Comparison Checkpoint 197
script Log 89
Web Page 282
Service mode 253
Web Page Model 196
SetFocus 136
Web Services Options 224
Shortcuts 284, 287, 288
Web Services Testing 214, 219, 226
ShowModal 278
Web Services Testing Dialogs 224
Smoke Test 39
Web Testing 205
Sort 48
WebServices Checkpoint 219
Source Code Control 37
White Box 56
SQL Server 183
White Box Application 57
SQL Server 2005 183
Window Coordinates 133
Stations 239, 257
Windows 12
Stopping 130
WinformsObject 57
Stress Testing 237
WndCaption 50
SynchPoints 267
Workspace 44
WSDL 214
-T-
Tag 196 -X-
Tasks 239, 257, 266
XAML 12
TCUnitTest 104
XML Checkpoint 226
Test Items 280
Test Log 244
Test Logs 90

Copyright © 2009 AutomatedQA Corp. - 2.0 Release

You might also like