Pages

Sunday, October 19, 2014

Quick Test Professional (QTP) - Object Repository Modes

There are two types of object repositories or rather the object repository modes

Pre-Action versus Shared Object Repository


Quick Test Professional (QTP) - QC Open Test Architecture (OTA)

QC OTA provides a very large object model. Figure 1 shows a few selected objects from that model.

The Quality Center Open Test Architecture API is a COM library that enables you to integrate external applications with Quality Center. 

Object Model

Figure 1. OTA Object Model

Quality Centre is a HP product, well before was HP it was owned by Mercury. Well this product is basically used by QA Organization with in a company as a Test Management Tool. Most of the organizations use this. However there could be a scenario where a particular project requires to use some other tool to log defects/ bugs. For ex: a project running in an Agile development environment that may use BugZilla for example, so development using 1 tool and QA using its organization specific QualityCenter may not be possible or in other words its hell a lot of work to enter bugs in to both the tools & keep them in sync as the project goes along.

To handle those scenarios QualityCenter comes with an API that a project can use to sync up other tools with QualityCenter. This API is called Open Test Architecture (OTA). You may notice QuickTest Professional and Quality Centre also uses this API to speak to each other. Another example is, people exporting bulk tests/  defects/ requirements in to QualityCentre from excel. This process also uses OTA in the background. However for this API the entry point is TDconnect.exe. You can download this exe file from internet by google'ing for it. Once you install this you will have the flexibility to use this in Excel or use the references/ API's in any other programming languages.

This way user can directly play with the database that the Quality Centre is running on without opening the GUI for it. You can literally perform every function that you can perform by logging on to its console.

In order to perform most of the above mentioned stuff you would need to know the database structure/ schema so you know which table, which column to hit to get a value associated with a particular field in QC. Database schema is all open for everyone to know and is available on-line as well.

If you have Quality Centre installed on your machine, you can find the OTA reference guide, OTA database guide, and OTA custom type help files in your help folder. Alternatively, you can hit Help and then go to documentation page where you should get all this documentation ready available for you to either reference or download. In these help files you should see a good set of examples for each and every class module that we can use. an Example code to connect to QC is found as below:

Exmaple 1: How to Connect to Quality Centre using OTA API

Private Function makeConnection(ByVal qcHostName$, qcDomain$, qcProject$, _
qcUser$, qcPassword$, Optional qcPort) As Boolean
'------------------------------------------------------------------------
' This routine makes the connection to the gobal TDConnection object,
' declared at the project level as Global tdc as TDConnection,
' and connects the user to the specified project.
'-----------------------------------------------------------------------
Dim qcServer As String
Const fName = "makeConnection" 'For error message

On Error GoTo makeConnectionErr
errmsg = ""

'Construct server argument of format "http://server:port/qcbin"
qcServer = "http://" & qcHostName

If Not (IsMissing(qcPort)) Then
If Len(qcPort) > 0 Then qcServer = qcServer & ":" & qcPort
End If

qcServer = qcServer & "/qcbin"

''Check status (For illustrative purposes.)
' 'MsgBox tdc.LoggedIn 'Error: OTA Server is not connected
' MsgBox tdc.Connected 'False
' MsgBox tdc.ServerName 'Blank string
'Create the connection
errmsg = "Failed to create TDConnection"
If (tdc Is Nothing) Then Set tdc = New TDConnection
If (tdc Is Nothing) Then GoTo makeConnectionErr
errmsg = ""
tdc.InitConnectionEx qcServer

''Check status.
' MsgBox tdc.LoggedIn 'False
' MsgBox tdc.Connected 'True
' MsgBox tdc.ServerName 'http:///qcbin/wcomsrv.dll

'Log on to server
tdc.Login qcUser, qcPassword
''Check status.
' MsgBox tdc.LoggedIn 'True
' MsgBox tdc.ProjectName 'Empty String
' MsgBox tdc.ProjectConnected 'False
' Connect to the project and user
tdc.Connect qcDomain, qcProject
' MsgBox tdc.ProjectName 'qcProject
' MsgBox tdc.ProjectConnected 'True
' Exit status
makeConnection = SUCCESS
Exit Function

makeConnectionErr:
ErrHandler err, fName, err.Description & vbCrLf & errmsg
makeConnection = FAILURE
End Function

Here you can customise this to be a public function and create an object as in QCObject to connect to Quality Center and set it to Nothing once the job is done. Some issues I have encountered while working with OTA API is if you keep connected to the object and working away for long time, you may get Automation Error: suggesting Quality Centre connections is no more available or something similar to this. Its always suggested to connect to it before performing an operation and close the connection once the job done and so on.

Exmaple 2: How to Use Filter method to filter the results (Bug Factory)

Sub BugFilter()
Dim BugFact As BugFactory
Dim BugFilter As TDFilter
Dim BugList As list
Dim theBug As Bug
Dim i%, msg$

'Get the bug factory filter
'tdc is the global TDConnection object.
Set BugFact = tdc.BugFactory
Set BugFilter = BugFact.Filter

'Set the filter values
BugFilter.Filter("BG_STATUS") = "Closed"
BugFilter.Order("BG_PRIORITY") = 1
MsgBox BugFilter.Text

'Create a list of defects from the filter
' and show a few of them
Set BugList = BugFilter.NewList
msg = "Number of defects = " & BugList.Count & Chr(13)

For Each theBug In BugList
msg = msg & theBug.ID & ", " & theBug.Summary & ", " _
& theBug.Status & ", " & theBug.Priority & Chr(13)
i = i + 1
If i > 10 Then Exit For
Next
MsgBox msg
End Sub

Exmaple 3: Find a specified requirement in a specified folder

Public Function GetReqByPath(fullPath$, _
Optional delimChar As String = "\") _
As Req
' This function returns a Req object specified by its
' full path.
' For example:
' Set r = GetReqByPath("SCRATCH\OTA_REQ_DEMO\OTA_S_O_1")
' will return the OTA_S_O_1 object.
' A requirement name is not unique in the project, but it is
' unique as a direct child of another requirement.
' Therefore, these routine works by walking down the
' requirement tree along the fullPath until the requirement
' is found at the end of the path.
' If a backslash is not used as the folder delimiter, any other
' character can be passed in the delimChar argurment.

Dim rFact As reqFactory
Dim theReq As Req, ParentReq As Req
Dim reqList As list
Dim NodeArray() As String, PathArray() As String
Dim WorkingDepth As Integer
On Error GoTo GetReqByPathErr

'Trim the fullPath and strip leading and trailing delimiters

fullPath = Trim(fullPath)
Dim pos%, ln%
pos = InStr(1, fullPath, delimChar)
If pos = 1 Then
fullPath = Mid(fullPath, 2)
End If
ln = Len(fullPath)
pos = InStr(ln - 1, fullPath, delimChar)
If pos > 0 Then
fullPath = Mid(fullPath, 1, ln - 1)
End If

' Get an array of requirements, and the length
' of the path
NodeArray = Split(fullPath, delimChar)
WorkingDepth = LBound(NodeArray)

' Walk down the tree
'tdc is the global TDConnection object.
Set rFact = tdc.reqFactory

For WorkingDepth = LBound(NodeArray) To UBound(NodeArray)
'First time, find under the root (-1)
'After that, under the previous requirement found: ParentReq.ID

If WorkingDepth = LBound(NodeArray) Then
Set reqList = rFact.Find(-1, "RQ_REQ_NAME", _
NodeArray(WorkingDepth), TDREQMODE_FIND_EXACT)
Else
Set reqList = rFact.Find(ParentReq.ID, "RQ_REQ_NAME", _
NodeArray(WorkingDepth), TDREQMODE_FIND_EXACT)
End If
' Delete parent. Each loop has to find it again.
Set ParentReq = Nothing
Dim strItem, reqID&, strID$, thePath$

For Each strItem In reqList
' The List returned from ReqFactory.Find is a List
' of strings of format ID,Name.
' For example "9,Products/Services On Sale"
' Extract the ID from the string by splitting the
' string at the comma.
pos = InStr(strItem, ",")
strID = Mid(strItem, 1, pos - 1)

' Convert the ID to a long, and get the object
reqID = CLng(strID)
Set theReq = rFact.Item(reqID)

'Now check that the object is at the correct depth.
'If so, we've found the requirement. On the next loop,
'we'll look from here down.
thePath = theReq.Path
PathArray = Split(thePath, "\")

' Debug.Print "Number of elements is " & UBound(PathArray)
' Debug.Print theReq.ID, theReq.Name

If UBound(PathArray) = WorkingDepth Then
Set ParentReq = theReq
Exit For
End If
Next strItem
If ParentReq Is Nothing Then Exit For
Next WorkingDepth
Set GetReqByPath = ParentReq
Exit Function

GetReqByPathErr:
ErrHandler err, "GetReqByPath"
Set GetReqByPath = Nothing
End Function

Exmaple 4: How to Create a Test using OTA

'Get or create test plan subject folder
errmsg = "Subject tree error"
Set root = TreeMgr.TreeRoot("Subject")
On Error Resume Next
Set folder = root.FindChildNode(FolderName)
On Error GoTo LinkDefectsToEntitiesErr

If folder Is Nothing Then _
Set folder = root.AddNode(FolderName)

'Create a design test
errmsg = "Design test error"
'Get the test if it exists
' For the code of GetTest, see the Test object example
' "Get a test object with name and path"
Set NewTest = GetTest(TestName, FolderName)
'If it doesn't exist, create it

If NewTest Is Nothing Then
Set NewTest = TestF.AddItem(Null)
NewTest.Name = TestName
NewTest.Type = "MANUAL"
'Put the test in the new subject folder
NewTest.Field("TS_SUBJECT") = folder.NodeID
NewTest.Post
End If

'Get or create a design step from the factory of the new test
errmsg = "Design step error"
Set StepF = NewTest.DesignStepFactory
Dim aFilter As TDFilter
Set aFilter = StepF.Filter
Dim StepName$
StepName = TestName & "Step_1"
aFilter.Filter("DS_STEP_NAME") = StepName
Set lst = StepF.NewList(aFilter.Text)
If lst.Count = 0 Then
Set desStep = StepF.AddItem(Null)
desStep.StepName = StepName
desStep.StepDescription = "Step to be linked to defect."
desStep.StepExpectedResult = "This step expected to be linked."
desStep.Post
Else
Set desStep = lst.Item(1)
End If





Quick Test Professional (QTP) - Quality Center Connection

Quality Center is a comprehensive test management tool which is a web-based repository for all testing assets. As mentioned it is a web-based tool and supports high level communication and association among various stakeholders (Business Analyst, Developers, Testers etc.). It help in driving a more effective and efficient global application-testing process.

QuickTest Professional (QTP) is an automated functional testing tool. It is pivotal in the areas of smoke/sanity testing, regression testing, functional testing and other testing areas.

Automation Tools like QTP, Win Runner and Load Runner can be integrated with Quality Center. You can also create reports and graphs for Analysis and Tracking for Test processes.To ensure comprehensive testing of your application, you typically must create and run many tests. HP QC can help you organize and control the testing process. In this article, you will learn how to integrate QTP with QC following HP best practices. Designing the integration and setting up QC for integration provide keys to success.

Top 5 advantages of integrating QTP with QC:

  1. Mapping manual test cases to automation
  2. Version tracking of automation suite
  3. Scheduling of test suite from QC
  4. QTP resource storage
  5. One repository of the entire automation reusable framework

Connecting QTP with QC

To work with QC we first need to connect QTP to QC. To connect QTP to QC, Open QTP and go to menu Tools->Quality Center Connection



To access
Use one of the following:
➤ Select File > ALM/QC Connection.
➤ Double-click the ALM/QC icon in the status bar

Functions
➤ Connect. The connection process has two stages. First, you connect QuickTest to a local or remote HP ALM or Quality Center server. This server handles the connections between QuickTest and the HP ALM or Quality Center project.
Next, you log in and choose the project you want QuickTest to access. The project stores tests and run session information for the application you are testing.
Projects are password protected, so you must provide a user name and a password.

➤ Disconnect. You can disconnect QuickTest from an HP ALM or Quality Center project or from an HP ALM or Quality Center server at any time.
If you disconnect QuickTest from an HP ALM or Quality Center server without first disconnecting from a project, the QuickTest connection to that project database is automatically disconnected.
If an HP ALM or Quality Center test or shared file (such as a shared object repository or Data Table file) is open when you disconnect from HP ALM or Quality Center, then QuickTest closes it.

Once connected, we can save the script(s) in QC as shown in the Figure


In case there is need to switch from the QC test plan to the file system then we can click on the File System, button as shown in the Figure





Saving script in QC provides a way to have a centralized repository for the scripts


QC Paths

Once a test case is saved to the repository it well then be presented on the QC test plan tab. the root folder of this lab is named "Subject". So any QC path referenced in QTP will start with "[QualityCenter] Subject". Once the tests scripts are moved to the QC repository all the folder paths on QTP's Tools->Options->Folder(Tab) need to be changed to the appropriate QC path for the scripts to work correctly. By default QTP takes the <CurrentTest> location as one of the path to search for various files. Any associated resources i.e. resource libraries, shared objects repositories and data tables stored as an attachment in the Attachment tab of the script inside QC, will be available to the test. These paths are also used to resolve any external reusable action call.

QTP functions which use file path for reading purpose as parameter, can also use QC paths. All of the statements given below are valid in QTP.

'Import the data table from Quality Center
DataTable.Import "[QualityCenter] Subject\Input\TestCase1.xls"
DataTable.ImportSheet "[QualityCenter] Subject\Input\TestCase1.xls", "Global", Global"

'Load the VBS file from Quality Center
ExecuteFile "[QualityCenter] Subject\ScriptConfigurator.vbs"

NOTE: QC path won’t work with functions like DataTable.Export, DataTable.ExportSheet etc. as they are writing files to QC and not reading





Saturday, May 10, 2014

Quick Test Professional (QTP) - How Objects are Added to Object Repository(OR)

QTP stores a definition for each test object in the object Repository. The definition contains values for various parameters which are used to uniquely identify an object at runtime in the application under test(AUT). The QTP object repository manager is used to view and modify repository objects and their properties.

Figure 1: Object Repository

Figure 1 shows a simple object repository. This OR has a WinToolbar object which is identified with Logical Name of Runtime Application" and has two property for definitions: "text" and "nativeclass". We can add or remove the properties by clicking the Add/Remove button...button.

Figure 2: Add/Remove Properties

Figure 2 shows the Add/Remove Properties dialog which can be used to add or remove any of the properties from object identification.

Note:

  • Selecting an objects from the tree view and clicking the Highlight button will highlight the button in the application (that needs to be open). The same can be done in the code for highlight objects at runtime Window("Window").WinToolbar("RunnningApplcation").Highlight.

Objects can be added to object repository using one of the two methods:

  1. By recording interactions against the application under tests
  2. By manually adding one or more objects 
Objects can be manually added to the OR clicking on Add Objects button and then clicking on the object that needs to be added.

Note:

  • In case the objects we want to add appears after a mouse click, then press and hold Ctrl key prior to that mouse click. This temporarily disable the object selection mode and allows to perform mouse click operations to navigate.
  • In case we need to switch between applications, first CTRL+ALT to disable the object selection mode. Then we can switch between different application and use the key combinations like ALT+TAB etc. Once done, press the CTRL+ALT to enable the object selection mode add the object.

Once the object is detected QTP displays the object selections window

Figure 3: Object Selection - Add to Repository
Object Selection

The object selection window displays the complete hierarchy of the objects on the web page. Select the object which needs to be added and click on OK button.

Note:

  • The object hierarchy displayed might not be the same as the one recorded in the Object Repository. QTP only keeps the hierarchy which is necessary for it to identify the object. This also reduces the length of the code line when the object reference is used in a test script.

If we select the page object and continue, QTP will ask if we want to add all its child objects.

Figure 4: Object Selection options
Selecting the Selected Object and all its descendants radio button and then clicking OK will add all the objects present on the page.

Note:
  • QTP does not add hidden objects present on the page


Test and Run-time objects

Test Objects (TO): Test objects are QTP defined classed used to present the various objects in the application under test (AUT).

Run-time objects (RO): Run-time object are the actual AUT object which a Test object refers/points to during test execution.

TO Properties

Test objects properties are those properties that QTP maintains in the OR for identifying a Run-time object during test execution. QTP allows enumeration of all the TO properties using GetTOProperties. GetTOProperty and SetTOProperty are used to read or modify the TO property values respectively.

Example 1: Working with Test Object properties

‘Get the webedit object
Set oWebEdit = Browser(“”).Page(“”).WebEdit(“”)

‘Get the TOProperties collection
Set TOProps = oWebEdit.GetTOProperties()

Dim i, iCount
iCount = TODrops.Count – 1

‘Loop through all the properties
For i = 0 To iCount
    ‘Get Name of the property
    sName = TOProps(i).Name

    ‘Get the value of the property
    sValue = TOProps(i).Value

    ‘Is the value a regular expression?
    isRegularExpression = TOProps(i).RegularExpression

    ‘Display the values
    Msgbox sName & “->” & sValue & “->” & isRegularExpession
Next


Example 2: Changing Test Object properties at runt time

‘Get the webedit object
Set oWebEdit = Browser(“Browser”).Page(“Page”).WebEdit(“txtName”)

‘Get the name test object property
oldName = oWebEdit.GetTOProperty(“name”)

‘Change the test property
newName = oWebEdit.GetTOProperty(“name”)

MsgBox newName


Example 3: Getting Run-time object properties during test execution

We use GetROProperty to read the value of any Run-time property, and save the value into a variable.
‘x will have the text present the search edit box.
x = Browser(“”).Page(“”).WebEdit(“”).GetTOProperty(“Value”)
MsgBox x

Note:
  • QTPdoes not provide a method set Run-time object properties i.e. there is no SetROProperty. Also each different test object has a different list of supported property values which is defined in the object model references in QTP help.


Friday, May 31, 2013

Quick Test Professional (QTP) - QTP Licensing model

QTP licensing allows 2 different types of licenses
  1. Seat license
  2. Floating license

1. Seat License

Seat Licence is a node locked or machine-based license. This license can be used only for a machine it was generated for, as the locking code QTP generates is specific to the machine it is installed on. To apply for a seat license, select the "Seat License" radio button as shown in the fig and click Next. After clicking next the license wizard will show the locking code of the machine as shown in the fig 2. Note down the locking code and put a license request on https://webware.hp.com/welcome.asp. Once you receive the license launch the wizard again and click Next button on the Locking code screen and paste the license key received by HP. This will install the seat license.



Note: Seat license uses some of the system components to generate locking code. Changes in these components can change the locking code invalidate the installed license. Similarly, the locking code becomes obsolete if for any reason it becomes necessary to uninstall the system OD and re-install it. It would be required to install QTP after a fresh OS install, which will generate a new locking code rendering the previously generated Seat license useless.



2. Floating License

Floating license can be used on any machine which has a network access to the floating license server. At any point in time the machines using the QTP licenses cannot exceed the maximum license count on the server. The license server is a utility that needs to be installed separately and comes with the QTP installation. The license server can be installed on Windows 200/2003/XP. Floating licenses are per session license i.e. they are only used when QTP is open on a machine.

To apply for a floating licenses choose the "Concurrent License" radio button on wizard screen Fig 3. Click on the next button and enter the Server IP or name in the server. Click on the Check Connection button and if successful the wizard will show the licenses available on the server as Fig 4. Click on the Next button and save the floating license.




Note: QTP uses UDP port 5093 for communicating with the license server. This port needs to be unblocked in case of any firewalls.

Note: We can also create system environment variables with name LSHOST or LSFORCEHOST to specify the QTP License server IP or address.


QTP License Server - Change IP Address

QTP License Server - Change IP Address
If you are planning to change the QTP license Server IP address, perform following changes in the client machines. Attaching the screen shot for more clarity.
Make sure you are able to ping the IP from the client machine and QTP concurrent license server configured correctly.

Tuesday, November 13, 2012

QTP Questions and Answers - 26

Q - 501: Where can a new Extensibility support set be activated after its deployment to HP QuickTest Professional?
A. The Add-in manager, which displays the name of the new Extensibility support set as an additional Add-in, under the Web Add-in
B. The Add-in manager, which displays the name of the new Extensibility support set as an additional independent Add-in
C. The Record and Run Settings dialog box, which displays the name of the new Extensibility support set as an additional option in the Web tab
D. The Resources pane, which displays the name of the new Extensibility support set as an additional node in the Resources tree

Q - 502: Which public toolkits are supported by the Web Add-in Extensibility feature? (Select four.)
A. ASP.N ET AJAX
B. FOX
C. SUN JWDK
D. Motif
E. Google Web Toolkit
F. YahooUl
G. Dojo
H. COM.NET AJAX

Q - 503: How does the HP QuickTest Professional Web Add-in Extensibility feature improve browser independent support?
A. It supports testing custom controls on both Internet Explorer and Firefox, and on different versions of these browsers.
B. It extends Web testing support to Google Chrome and its different versions.
C. It supports testing custom controls on different versions of Internet Explorer only.
D. It supports browser independent web testing by replacing the Web Add-in.

Q - 504: Which recovery option is best for a pop-up message that states "Printer is out of ink"? 
A. Close application process
B. Function call
C. Restart Microsoft Windows
D. Keyboard or mouse operation

Q - 505: What are prerequisites for using Log Tracking? (Select two.)
A. The log framework must include an UDP appender.
B. The log files must be placed in a test directory.
C. The test must support log tracking statements.
D. All the Optional Steps must be disabled.
E. The tested application must use Java or.NET log framework.

Q - 506: Which data table method can retrieve data from an Excel file? 
A. OpenSheet
B. ExportSheet
C. ImportSheet
D. GetSheet

Q - 507: Which HP QuickTest Professional feature enables you to track application performance counters during a run session?
A. Environment Monitor
B. Local System Monitor
C. Resource counters
D. Run Viewer

Q - 508: You have created a Bitmap checkpoint and want to allow a certain degree of difference between a stored expected image and an image from the AUT and still consider it a PASS
Which checkpoint feature should you use?
A. RGB tolerance
B. BW tolerance
C. Image tolerance
D. Bit tolerance

Q - 509: Which type of checkpoint compares pixel values? 
A. XML
B. Visual
C. Graphical
D. Standard
E. Bitmap

Q - 510: What is the purpose of the GetROProperty method? 
A. To retrieve a property value of a runtime object
B. To retrieve a property of a test object
C. To retrieve a property value of a test object
D. To retrieve a property of a repository object

Q - 511: What are two HP QuickTest Professional resources? 
A. Recovery Scenarios and Images
B. Checkpoints and Test Versions
C. Images and Checkpoints
D. Function Libraries and Recovery Scenarios

Q - 512: How can you add or change recordable or non-recordable operations to your test? (Select three.)
A. Drag objects from the Available Keywords pane.
B. Drag objects from the data table or insert from a shared repository.
C. Change the operation in the Keyword View.
D. Drag objects from Available Keywords or from the Active Screen.
E. Use the Step Generator or insert through Keyword View.
F. Add an operation in the Recording Option Manager.

Q - 513: What is the purpose of the Visual Relation Identifier? 
A. It allows identification of objects, based on mapping of the Object Hierarchy to the AUT.
B. It allows identification of objects, based on sorting of objects on the AUT in a specific order.
C. It allows identification of objects, based on mapping to specific default classes.
D. It allows identification of objects, based on their neighbouring objects.

Q - 514: How does HP QuickTest Professional identify each object you record? (select two.)
A. By class
B. By properties
C. By methods
D. By conditions
E. By actions

Q - 515: DRAG DROP : Click the Task button. Place the methods for identifying an object in the order in which QTP would attempt to use tem Assume they are all defined/enabled.
Place the methods for identifying an object in the order in which QTP would attempt to use them. Assume they are all defined / enabled.

Answer

Q - 516: Using a default installation of HP QuickTest Professional, which type of Object Repository stores objects when they are created?
A. Reusable
B. Global
C. Local
D. Shared

Q - 517: After recording a test, you find an object in the Object Repository named AppResult_1.
Which Object Repository feature allows you to search for this object in your application?
A. Search in Repository
B. Highlight in Application
C. Locate in Application
D. Find in Application

Q - 518: DRAG DROP: Click the Task button. Match the icons in the Object Spy dialog box with their descriptions. Note: Icons may be used more than once.
Match the icons in the Object Spy dialog box with their descriptions.

Answer

Q - 519: What is a logical name in HP QuickTest Professional? 
A. The name assigned to a recorded object
B. The attached text of the test object
C. The name of a logical test condition
D. The name of the Object Repository

Q - 520: What can a dot indicate in VBScript? (Select three.)
A. A method
B. A description
C. A property
D. A function argument
E. A child object
F. An end of statement

Quick Test Professional (QTP) - Keyword & Expert View

Keyword View
The Keyword View enables you to create and view the steps of your test in a keyword-driven, modular, table format. The Keyword View is comprised of a table-like view, in which each step is a separate row in the table, and each column represents different parts of the steps. You can modify the columns displayed to suit your requirements.
You create and modify tests by selecting items and operations in the Keyword View and entering information as required. Each step is automatically documented as you complete it, enabling you to view a description of your test steps in understandable English.

Each operation performed on your application during a recording session is recorded as a row in the Keyword View.
For each row in the Keyword View, QuickTest displays a corresponding line of script in the Expert View. If you focus on a specific step in the Keyword View and switch to the Expert View, the cursor is located in that corresponding line of the test.

You can use the Keyword View to add new steps to your test and to view and modify existing steps. When you add or modify a step, you select the test object or other step type you want for your step, select the method operation you want to perform, and define any necessary values for the selected operation or statement. Working in the Keyword View does not require any programming knowledge. The programming required to actually perform each test step is done automatically behind the scenes by QuickTest.

Expert View
In the Expert View, QuickTest displays each operation performed on your application in the form of a script, comprised of VBScript statements. The Expert View is a script editor with many script editing capabilities. For each object and method in an Expert View statement, a corresponding row exists in the Keyword View. The Action list above the Expert View window lists the actions that are called from the test.

Expert View and Keyword View - A Comparison
If you prefer to work with VBScript statements, you can choose to work with your tests in the Expert View, as an alternative to using the Keyword View. You can move between the two views as you wish, by selecting the Expert View or Keyword View tab at the bottom of the Test pane in the QuickTest window.
The following diagram shows how the same object hierarchy is displayed in the Expert View and in the Keyword View:



Each line of VBScript in the Expert View represents a step in the test. The example above represents a step in a test in which the user inserts the name mercury into an edit box. The hierarchy of the step enables you to see the name of the site, the name of the page, the type and name of the object in the page, and the name of the operation performed on the object.
The image below explains how the different parts of the same step are represented in the Keyword View and the Expert View: