Testing Rich internet applications developed in Flex / Adobe Flash using Quick Test pro – Overview of testing process.
Large, complex applications must be tested to make sure that user interactions do not create run-time exceptions and that connections to data services are functioning properly.
This document assumes that there are two roles in the testing process: the QA testing professional and the Flex developer. It assumes that the QA testing professional does not know how to develop Flex applications and does not have access to the Flex source code, the Flex compiler, or the Flex documentation. The Flex developer, on the other hand, does not necessarily know how to use a testing tool, such as Mercury QuickTest Professional (QTP).
Flex documentation for developers includes a set of guidelines for creating testable applications. These guidelines include instructions on how to compile testable applications, how to instrument custom components so that they can be tested, and how to write applications so that the testing process works more smoothly. For information about the guidelines, see the Flex 2 Developers Guide.
Before you can test a Flex application, a Flex developer compiles a SWF file for you. The developer also provides you with an HTML file that embeds the SWF file in it. This is known as the HTML wrapper. You deploy these two files to any web server.
Some Flex applications require the use of external resources, such as web services or remote objects, so you should ensure that your web server can access these resources. You might be required to add a permissions file to the target server to allow your Flex application to access the server. For more information, ask the Flex developer.
To run a test, you launch QTP and request the HTML wrapper. QTP records the interaction with the Flex application as it would with any other target type. You should then be able to rerun your tests against the Flex application as long as the web server remains accessible.
For more information goto
Deploying Flex files
Before you can test the Flex application, you must deploy the application and its supporting files to a location that is accessible by QTP. These files include:
■ Application SWF file
files, and other files)
■ RSL SWC files
■ Module SWF files
■ Helper files such as theme SWC files, style SWF files, and image, video, and sound files
You deploy the Flex application and HTML wrapper file to any location on your HTTP
server. You must be able to access this location from QTP.
In some cases, files used by the Flex application might be located on a remote server. In this case, you must be sure that the files are accessible through any firewalls. Furthermore, the remote servers might need to include cross-domain permission files to allow remote access.
For more information, you should discuss this with the Flex developer.
If necessary, you can password-protect the HTML wrapper and use the QTP authentication mechanism to access it. For more information, see the QTP documentation.
About the Flex installed testing files
The Flex support for QTP requires that you install two ActiveX plug-ins on the testing
machine. These plug-ins provide the necessary communication layer between Flex and QTP.
One plug-in runs inside of QTP, and the other runs inside the browser. The browser plug-in is signed, and is designed to run in Microsoft Internet Explorer 6 on Windows only. Together, these plug-ins ensure that Flash Player and the Flex framework can send the appropriate script interactions to QTP during record mode.
Similarly, the plug-ins provide the mechanism for QTP to send script commands to the Flash Player and Flex during playback. The browser plug-in uses the Flash Player
flash.external.ExternalInterface class and, therefore, requires the correct security context for flash.external.ExternalInterface to run. If the SWF file runs from a web server, the Flash
Player automatically enables flash.external.ExternalInterface. If the SWF file runs from a local file system, the SWF file must be trusted for flash.external.ExternalInterface to be enabled and for the browser plug-in to work properly. If the plug-ins have problems loading, the cause is written to the Flash Player debug log file.
About the testing environment
Flex component names reflect the nature of the component. For example, a button is a
Button control in the Flex programming environment. In the testing environment, the name of each testable control is prefixed with Flex; for example, a Button control is known as FlexButton in the QTP scripts. This prevents controls from different types of applications
from being confused in your scripts.
All visual Flex components can be scripted in your quality control tests. Most of their
properties and methods can be recorded and then played back. Each method stores a certain number of properties.
When you create a test for the first time, notice that visual controls are usually referenced
inside containers. Not all containers that are used by Flex programmers are reflected in the
testing environment. For example, a set of buttons might be inside a horizontal box container (or HBox), but that HBox control might not show up in the test script. Restricting the controls in the scripts makes the scripts easier to read and keeps the hierarchies as short as possible without losing detail.
The tea.html document includes a complete list of Flex components that you can test. You
can also view the testable methods and properties of these components in that document.
For more information goto
Test creation overview
When you record a test, QTP records the lines of the test script correlating to each action that you performed. Each line typically represents an action that you carried out on a component that appears on the screen. Those components are called objects and the actions you perform on them (such as clicking a button) are called operations.
The basic building block of a test is the test object. Objects are stored in the QTP object
repository. You should understand how QTP identifies objects and adds them to the object repository. It is important to understand which events are recognized by QTP.
About the QTP object model
Before you create a test, it is important to understand how the object model of the QTP and Flex are integrated. The test object model is a set of object types that QTP uses to represent objects that are used in your application. The test object model maps the QTP test objects to the Flex objects in your application. For example, a Button control in a Flex application is recognized as a FlexButton in the QTP object model.
The QTP test objects store properties and record events during the test. Each object has its own set of properties and methods that QTP can record. Test objects do not support all events and properties of the Flex objects that they correspond to, but they do support the events that are most commonly associated with users gestures.
The object repository is a list of all objects used in the test. To add an object to a test, you must add it to the object repository. To remove an object from the test, you remove it from the object repository.
Operations are actions that you perform on objects. They are equivalent to a Flex event, but are generally at a higher level. For example, when you click on a Button, QTP records a click operation. QTP does not record the mouseDown and mouseUp events, which essentially make up the click event.
Each operation has one or more arguments that define information about the event. This
information includes details such as what keys were held down when the operation occurred or the index of a selected item in a list.
Not all controls have operations. For example, the FlexRule controls do not have operations. You can still add these controls to the object repository and use checkpoints to test object properties. Other controls without operations, such as FlexRepeater and FlexDisplayObject, are low-level objects that you generally do not have to interact with for your tests.
Automated testing requires that each component be identifiable by a set of persistent
unchanging properties, with one main one, automationName, which is human readable and
easily associated with its on-screen counterpart. Collectively, this set of properties is called the automation ID. QTP stores the automation ID in a repository. A change to a components ID results in multiple versions of the object in the repository. Additionally, QA engineers can create data driven scripts by changing these IDs with IDs from a database.
QTP specifically avoids treating list items as components, because the identifiers for list items can change in an editable list, and identifiers can repeat (for example, a data grid with rows that have repeating text). Also, creating and or requiring entries in the repository for list items can create a huge burden for data driven scripts, because you must put all of your list items in the repository and change many objects in the repository.
With QTP, you can record and play back your interaction with the Flex application or you
can write the script yourself. It is generally easier to have QTP record your actions with a Flex application, and then modify that recorded script. During a recording session, QTP adds the Flex objects that you interact with to the object repository. Otherwise, you would have to define each object separately before using it in your own script.
When QTP encounters a Flex control during a test, it stores a set of properties that describe that object and stores a reference to it in the object repository. The definition of the Flex control in the QTP object repository contains enough information for QTP to map that Flex control (such as, Button) to a test object (such as, FlexButton).
The following example shows a Flex Button control in the QTP Repository Editor:
When you run a test and interact with a Flex control, QTP does the following:
1. Identifies the test object class that your Flex object maps to.
2. Reads the current state of the object and stores its list of description properties and values.
3. Assigns a unique ID to use to identify the object in the scripts. QTP can use one or more
of the description properties that might be based on the appearance of the Flex control
(such as a Buttons label) or on the Flex id of the control.
4. Records operations that you perform on the object by using the appropriate test object method. When a test runs, QTP stores component properties as name-value pairs. QTP only stores properties that are needed for identification in the object repository. These properties include id and index. You can use checkpoints, data tables, and other methods to store and retrieve other object properties, such as the value of a TextInput controls text or the color of a Button controls background.
About the application hierarchy
In the object repository, objects are stored in a hierarchy. The root of the hierarchy is the
browser. The next element is the Flex application. Under that are the containers and controls that make up the application.
In the QTP Object Repository and Keyword View, a tree-like structure represents the levels of containers in the application. In general, the hierarchy follows the way the application appears visually. In the MyApp Flex application, for example, for a Button labeled Submit inside a TabNavigators view labeled Change Settings, the hierarchy appears like this:
Panel ("Change Settings")
In QTP scripts, you use dot-notation syntax to access an object, and a dot separates each level. To refer to the Button, you use a path like the following:
Although containers, such as HBox or Panel, are contained in a TabNavigator container, the TabNavigator itself does not appear in the hierarchy. To improve script readability, some Flex containers are omitted from the hierarchy if the container has no impact on the testing.
The application hierarchy is also called the display hierarchy, because it generally represents
what you see on the screen in a tree-based layout. The display hierarchy is not always the same as the automation hierarchy, which is the hierarchy of objects as they are referred to in the QTP scripts. Sometimes containers that appear on-screen (for example, with a border or in a window) are part of the display hierarchy, but not part of the automation hierarchy.
In general, if a container does not appear on the screen, it does not appear in the testing
hierarchy. For example, a stand-alone HBox container is often used to lay out content, but it has no visual representation and does not appear in the test scripts. The exception to this is when the HBox is a child of TabNavigator. In this case, the HBox is needed to uniquely identify its contents, and therefor it is part of the hierarchy.