Creating and Calling user define funtion

Test Conditons: Creating and Calling user define funtion

1. Crate small add function and make it compile module.

2. calling that function in other test (using user defined data values)


[ Pre Requesties : Nothing ]

1a. open win runner blank test and add this below data

public function add(in a, in b)
{
return a+b;
}


1b. Go to File menu --> Test Properties (Test Properties window will open)
in General Tab --> Test Type= Compile module and ok

1c.Save the test in some location (Ex c:/tt )

2a.Before writing code , you have to load the funtction in to your folder , globally available to all tests.

2b. Go to Tools menu --> General Options
--- Select Folder option in the left pan.
-- Search Path for called test below enter the path of compile module
(c:/tt) and press "+" button to add in to.

2c. Write down the bleow code in the new test

load("c:/tt");
l= create_input_dialog("Enter First value");
j=create_input_dialog("Enter Second Value");
k=add(l,j);
report_msg(k);
unload("c:/tt");


[ load( ) , unload ( ) - to lload and unload from the memory ]

[Same way You can use Winrunner TSL Script to User Defined function

Diff between Image & Bit map Check point

Image checkpoints enable you to check the properties of a Web image. You can check an area of a Web page or application as a bitmap. While creating a test or component, you specify the area you want to check by selecting an object. You can check an entire object or any area within an object. QuickTest captures the specified object as a bitmap, and inserts a checkpoint in the test or component. You can also choose to save only the selected area of the object with your test or component in order to save disk Space For example, suppose you have a Web site that can display a map of a city the user specifies. The map has control keys for zooming. You can record the new map that is displayed after one click on the control key that zooms in the map. Using the bitmap checkpoint, you can check that the map zooms in correctly.

You can create bitmap checkpoints for all supported testing environments (as long as the appropriate add-ins are loaded).
Note: The results of bitmap checkpoints may be affected by factors such as operating system, screen resolution, and color settings.

How many ways we can parameterize data in QTP?

There are four types of parameters:
Test, action or component parameters enable you to use values passed from your test or component, or values from other actions in your test.

Data Table parameters enable you to create a data-driven test (or action) that runs several times using the data you supply. In each repetition, or iteration, QuickTest uses a different value from the Data Table.

Environment variable parameters enable you to use variable values from other sources during the run session. These may be values you supply, or values that QuickTest generates for you based on conditions and options you choose.

Random number parameters enable you to insert random numbers as values in your test or component. For example, to check how your application handles small and large ticket orders, you can have QuickTest generate a random number and insert it in a number of tickets edit field.

Choosing a test automation framework

There are lot of resources on the internet explaining different types of automation frameworks and how to go about selecting one of them those suites your environment.

Below are few links which provide you solid understanding of the software test automation frameworks.

http://www.ibm.com/developerworks/rational/library/591.html

www.research.ibm.com/journal/sj/411/rankin.pdf

http://www.wilsonmar.com/WRSAFS/Docs/CHAPTER1.doc

http://en.wikipedia.org/wiki/Test_Automation_Framework

www.michaeldkelly.com/images/Choosing_a_Test_Automation_Framework.PDF

www.logigear.com/resources/articles_lg/Automation_Framework.pdf

QTP E-books

You can download the QTP E-books and related material from here.
Just click on the links to download..
check more infomation about AUTOMATION FRAMEWORKS

Using Database Functions

The code below contains a set of useful functions that can be used in QuickTest Professional.

'Example of how to use functions.

''******************************************************************************************

' Example of how to use DSN created for the database of sample Flight application.

''******************************************************************************************

SQL="SELECT * FROM ORDERS"

connection_string="QT_Flight32"

isConnected = db_connect ( curConnection ,connection_string )

If isConnected = 0 then

       ' Execute the basic SQL statement

       set myrs=db_execute_query( curConnection , SQL )

       ' Report the query and the connection string

       Reporter.ReportEvent micInfo ,"Executed query and created recordset ","Connection_string is ==> " & connection_string & " SQL query is ===> " & SQL

       ' Show the number of rows in the table using a record set

       msgBox " Quantity of rows in queried DB ( db_get_rows_count )==> " & db_get_rows_count( myrs )

       ' Show the number of rows in the table using a new SQL statement

       msgBox " Quantity of rows in queried DB (db_get_rows_count_SQL ) ==> " & db_get_rows_count_SQL( curConnection , "SELECT COUNT(*) FROM ORDERS" )

       ' Change a value of a field in an existing row

       rc = db_set_field_value (curConnection, "ORDERS" , "Agents_Name" , "test", "Agents_Name", "AGENT_TESTER")

       ' Examples of how to retrieve values from the table

       msgBox "val row 0 col 0: " & db_get_field_value( myrs , 0 , 0 )

       msgBox "val row 0 col 1: " & db_get_field_value( myrs , 0 , 1 )

       msgBox "val row 1 col Name: " & db_get_field_value( myrs , 1 , "Agents_Name" )

       msgBox "val SQL row 1 col Name: " & db_get_field_value_SQL( curConnection , "ORDERS" , 1 , "Agents_Name" )

       db_disconnect curConnection

End If

''******************************************************************************************

' Database Functions library

''******************************************************************************************

'db_connect

' ---------------

' The function creates a new connection session to a database.

' curSession - The session name (string)

' connection_string - A connection string

' for example the connection_string can be "DSN=SQLServer_Source;UID=SA;PWD=abc123"

''******************************************************************************************

Function db_connect( byRef curSession ,connection_string)

       dim connection

       on error Resume next

       ' Opening connection

       set connection = CreateObject("ADODB.Connection")

       If Err.Number <> 0 then

              db_connect= "Error # " & CStr(Err.Number) & " " & Err.Description

              err.clear

              Exit Function

       End If

       connection.Open connection_string

       If Err.Number <> 0 then

              db_connect= "Error # " & CStr(Err.Number) & " " & Err.Description

              err.clear

              Exit Function

       End If

       set curSession=connection

       db_connect=0

End Function

''******************************************************************************************

' db_disconnect

' ---------------------

' The function disconnects from the database and deletes the session.

' curSession - the session name (string)

''******************************************************************************************

Function db_disconnect( byRef curSession )

       curSession.close

       set curSession = Nothing

End Function

''******************************************************************************************

' db_execute_query

' ---------------------------

' The function executes an SQL statement.

' Note that a db_connect for (arg1) must be called before this function

' curSession - The session name (string)

' SQL - An SQL statement

''******************************************************************************************

Function db_execute_query ( byRef curSession , SQL)

       set rs = curSession.Execute( SQL )

       set db_execute_query = rs

End Function

''******************************************************************************************

' db_get_rows_count

' ----------------------------

' The function returns the number of rows in the record set

' curRS - Variable, containing a record set, that contains all values that retrieved from the database by query execution

''******************************************************************************************

Function db_get_rows_count( byRef curRS )

       dim rows

       rows = 0

       curRS.MoveFirst

       Do Until curRS.EOF

              rows = rows+1

              curRS.MoveNext

       Loop

       db_get_rows_count = rows

End Function

''******************************************************************************************

' db_get_rows_count_SQL

' ------------------------------------

' The function returns the number of rows that are the result of a given SQL statement

' curSession - The session name (string)

' CountSQL - SQL statement

''******************************************************************************************

Function db_get_rows_count_SQL( byRef curSession ,CountSQL )

       dim cur_rs

       set cur_rs = curSession.Execute( CountSQL )

       db_get_rows_count_SQL = cur_rs.fields(0).value

End Function

''******************************************************************************************

' db_get_field_value_SQL

' -----------------------------------

' curSession - Variable that denotes the current active connection

' tableName - Name of the table, from which the value should be retrieved

' rowIndex - Row number

' colName - The column name

''******************************************************************************************

Function db_get_field_value_SQL( curSession , tableName , rowIndex , colName )

       dim rs

       SQL = " select " & colName & " from " & tableName

       set rs = curSession.Execute( SQL )

       rs.move rowIndex

       db_get_field_value_SQL = rs.fields(colName).value

End Function

''******************************************************************************************

' db_get_field_value

' --------------------------

' The function returns the value of a single item of an executed query.

' Note that a db_execute_query for (arg1) must called before this function

' curRecordSet - Variable, containing a record set, that contains all values retrieved from the database by query execution

' rowIndex - The row index number (zero-based)

' colIndex - The column index number (zero-based) or the column name.

' returned values

' -1 - Requested field index more than exists more than once in record set

''******************************************************************************************

Function db_get_field_value( curRecordSet , rowIndex , colIndex )

       dim curRow

       curRecordSet.MoveFirst

       count_fields = curRecordSet.fields.count-1

       If ( TypeName(colIndex)<> "String" ) and ( count_fields < colIndex ) then

              db_get_field_value = -1 'requested field index exists more than once in recordset

       Else

              curRecordSet.Move rowIndex

              db_get_field_value = curRecordSet.fields(colIndex).Value

       End If

End Function

''******************************************************************************************

' db_set_field_value

' ---------------------------

' The function changes the value of a field according to a search criteria.

' We search for a certain row according to a column name and the desired vale, then we change a value in that row according

' to a desired columns

' curConnection - The session name (string)

' tableName - Name of the table from which the value should be retrieved

' colFind - The column which to search for the criteria

' colFindValue - The value for which to search in the column

' colChange - The column in which we want to change the value

' colChangeValue - The new value

' returned values

' -1 - Requested field index that does not exist in the recordset

''******************************************************************************************

Function db_set_field_value(curConnection, tableName , colFind , colFindValue, colChange, colChangeValue)

       dim curRow

       dim updateSQL

       dim checkSQL

       checkSQL = "select * from Details"

       set myrs1 = db_execute_query( curConnection , SQL )

       myrs1.MoveFirst

       count_fields = myrs1.fields.count

       If ( TypeName(colFind)<> "String" ) or ( TypeName(colChange)<> "String" ) then

              db_set_field_value = -1 'requested field index that does not exists in the record set

       Else

              updateSQL = "UPDATE " & tableName & " SET " & colChange & "='" & colChangeValue & "' WHERE " & colFind & "='" & colFindValue & "'"

              set myrs1 = db_execute_query( curConnection , updateSQL )

              db_set_field_value = 1 'operation suceeded

       End If

End Function

''******************************************************************************************

' db_add_row

' -----------------

' The function adds a new row to the desired table

' curConnection - Variable, containing a recordset, that contains all the values to be retrieved from the database by query execution

' tableName - Name of the table, from which the value should be retrieved

' values - Array that contains values to be entered in a new row to the table

' Note: The function must receive values for all the columns in the table.

' returned value.

' -1 - The number of values to be entered to the table does not match the number of columns

' 1 - Execution of the query succeed and the data was entered to the table

''******************************************************************************************

Function db_add_row(curConnection, tableName , byRef values)

       dim i

       dim updateSQL

       dim myrs1

       updateSQL = "INSERT INTO " & tableName & " VALUES ("

       arrLen = UBound (values) - LBound (values) + 1

       set myrs1=db_execute_query( curConnection , SQL )

       myrs1.MoveFirst

       count_fields = myrs1.fields.count

       ' Check whether the number of values match the number of columns

       If arrLen <> count_fields then

              db_add_row = -1

       Else

              For i = 0 to arrLen-1

                     updateSQL = updateSQL & values (i)

                     If i <> arrLen-1 then

                            updateSQL = updateSQL & ","

                     End If

              Next

              updateSQL = updateSQL & ")"

              set myrs1 = db_execute_query( curConnection , updateSQL )

              db_add_row = 1

       End If

End Function

''******************************************************************************************

' represent_values_of_RecordSet

' ---------------------------------------------

' The function reports all the values of fields in a record set

' curRS - Variable, containing the recordset, that contains all the values that were retrieved from the database by the query execution

''******************************************************************************************

Function represent_values_of_RecordSet( myrs)

       dim curRowString

       myrs.MoveFirst

       reporter.ReportEvent 4,"Fields quantity" , myrs.fields.count

       count_fields = myrs.fields.count-1

       curRow=0

       Do Until myrs.EOF

              curRowString= ""

              curRow = curRow+1

              For ii=0 to count_fields

                     curRowString = curRowString& "Field " &"==> " & myrs.fields(ii).Name &" : Value ==>" & myrs.fields(ii).Value & vbCrLf

              Next

              myrs.MoveNext

              reporter.ReportEvent 4,"Current row"& curRow , curRowString

       Loop

End Function

 

PreviousNext

 

Using the File System Object (FSO)

The following code includes a set of complex and simple functions to serve as examples of the possible uses and applications of Microsoft FSO.

dim oFSO

' Create the file system object

set oFSO = CreateObject ("Scripting.FileSystemObject")

'Option Explicit

' *******************************************************************************************

' Create a new txt file

' Parameters:

' FilePath - location of the file and its name

' *******************************************************************************************

Function CreateFile (FilePath)

       ' Variable that will hold the new file object

       dim NewFile

       ' Create the new text ile

       set NewFile = oFSO.CreateTextFile(FilePath, True)

       set CreateFile = NewFile

       End Function

' *******************************************************************************************

' Check if a specific file exist

' Parameters:

' FilePath - Location of the file and its name

' *******************************************************************************************

Function CheckFileExists (FilePath)

       ' Check if the file exists

       CheckFileExists = oFSO.FileExists(FilePath)

End Function

' *******************************************************************************************

' Write data to file

' Parameters:

' FileRef - Reference to the file

' str - Data to be written to the file

*******************************************************************************************

Function WriteToFile (byref FileRef,str)

       ' Write str to the text file

       FileRef.WriteLine(str)

End Function

' *******************************************************************************************

' Read line from file

' Parameters:

' FileRef - reference to the file

' *******************************************************************************************

Function ReadLineFromFile (byref FileRef)

       ' Read line from text file

       ReadLineFromFile = FileRef.ReadLine

End Function

' *******************************************************************************************

' Closes an open file.

' Parameters:

' FileRef - Reference to the file

' *******************************************************************************************

Function CloseFile (byref FileRef)

       FileRef.close

End Function

'******************************************************************************************

' Opens a specified file and returns an object that can be used to

' read from, write to, or append to the file.

' Parameters:

' FilePath - Location of the file and its name

' mode options are:

' ForReading - 1

' ForWriting - 2

' ForAppending - 8

' *******************************************************************************************

Function OpenFile (FilePath,mode)

' Open the txt file and return the File object

set OpenFile = oFSO.OpenTextFile(FilePath, mode, True)

End Function

' *******************************************************************************************

' Closes an open file.

' Parameters:

' FilePathSource - Location of the source file and its name

' FilePathDest - Location of the destination file and its name

' *******************************************************************************************

Sub FileCopy ( FilePathSource,FilePathDest)

       ' copy source file to destination file

       oFSO.CopyFile FilePathSource, FilePathDest

End Sub

' *******************************************************************************************

' Delete a file.

' Parameters:

' FilePath - Location of the file to be deleted

' *******************************************************************************************

Sub FileDelete ( FilePath)

       ' Copy source file to destination file

       oFSO.DeleteFile ( FilePath)

End Sub

' *******************************************************************************************

' Compare two text files.

'

' Parameters:

' FilePath1 - Location of the first file to be compared

' FilePath2 - Location of the second file to be compared

' FilePathDiff - Location of the differences file

' ignoreWhiteSpace - Controls whether or ignore differences in white space characters

' true - Ignore differences in white space

' false - Do not ignore difference in white space

' Return Value: true if files are identical, false otherwise'

' *******************************************************************************************

Function FileCompare (byref FilePath1, byref FilePath2, byref FilePathDiff, ignoreWhiteSpace)

       dim differentFiles

       differentFiles = false

       dim f1, f2, f_diff

       ' Open the files

       set f1 = OpenFile(FilePath1,1)

       set f2 = OpenFile(FilePath2,1)

       set f_diff = OpenFile(FilePathDiff,8)

       dim rowCountF1, rowCountF2

       rowCountF1 = 0

       rowCountF2 = 0

       dim str

       ' Count how many lines there are in the first file

       While not f1.AtEndOfStream

              str = ReadLineFromFile(f1)

              rowCountF1= rowCountF1 + 1

       Wend

       ' Count how many lines there are in the second file

       While not f2.AtEndOfStream

              str = ReadLineFromFile(f2)

              rowCountF2= rowCountF2 + 1

       Wend

       ' Re-open the files to go back to the first line in the files

       set f1 = OpenFile(FilePath1,1)

       set f2 = OpenFile(FilePath2,1)

       ' compare the number of lines in the two files.

       ' assign biggerFile - The file that contain more lines

       ' assign smallerFile - The file that contain fewer lines

       dim biggerFile, smallerFile

       set biggerFile = f1

       set smallerFile = f2

       If ( rowCountF1 < rowCountF2) Then

              set smallerFile = f1

              set biggerFile = f2

       End If

       dim lineNum,str1, str2

       lineNum = 1

       str = "Line" & vbTab & "File1" & vbTab & vbTab & "File2"

       WriteToFile f_diff,str

       ' Loop on all the lines in the smaller file

       While not smallerFile.AtEndOfStream

              ' read line from both files

              str1 = ReadLineFromFile(f1)

              str2 = ReadLineFromFile(f2)

       ' Check if we need to ignore white spaces, if yes, trim the two lines

       If Not ignoreWhiteSpace Then

              Trim(str1)

              Trim(str2)

       End If

       ' If there is a difference between the two lines, write them to the differences file

       If not (str1 = str2) Then

              differentFiles = true

              str = lineNum & vbTab & str1 & vbTab & vbTab & str2

              WriteToFile f_diff,str

       End If

       lineNum = lineNum + 1

       Wend

       ' Loop through the bigger lines, to write its line to the different file

       While not biggerFile.AtEndOfStream

              str1 = ReadLineFromFile(biggerFile)

              str = lineNum & vbTab & "" & vbTab & vbTab & str2

              WriteToFile f_diff,str

              lineNum = lineNum + 1

       Wend

       FileCompare = Not differentFiles

End function

' ************** Example of using these functions **********************

FilePath1 = "D:\temp\FSO\txt1.txt"

FilePath2 = "D:\temp\FSO\txt2.txt"

FilePathDiff = "D:\temp\FSO\txt_diff.txt"

d = FileCompare(FilePath1,FilePath2,FilePathDiff,false)

FilePath = "D:\temp\FSO\txt.txt"

set fold = FolderCreate ( "D:\temp\FSO

set f = OpenFile(FilePath,8)

' = WriteToFile(f,"test line")

d = CloseFile(f)

set f = CreateFile(FilePath)

Fexist= CheckFileExists(FilePath)

d = WriteToFile(f,"first line")

d = WriteToFile(f,"second line")

d = CloseFile(f)

FileCopy "D:\temp\FSO\txt.txt","D:\temp\FSO\txt1.txt"

FileDelete "D:\temp\FSO\txt1.txt"

Using Microsoft Outlook to Send Email

The code below illustrates two methods for sending email using the VBScript code in QuickTest Professional, and two different COM objects.

' Example 1

Function SendMail(SendTo, Subject, Body, Attachment)

       Set ol=CreateObject("Outlook.Application")

       Set Mail=ol.CreateItem(0)

       Mail.to=SendTo

       Mail.Subject=Subject

       Mail.Body=Body

       If (Attachment <> "") Then

              Mail.Attachments.Add(Attachment)

       End If

       Mail.Send

       ol.Quit

       Set Mail = Nothing

       Set ol = Nothing

End Function

' Example 2

Function SendMail(SendFrom, SendTo, Subject, Body)

       Set objMail=CreateObject("CDONTS.Newmail")

       ObjMail.From = SendFrom

       ObjMail.To = SendTo

       ObjMail.Subject = Subject

       ObjMail.Body = Body

       ObjMail.Send

       Set objMail = Nothing

End Function

 

Using Microsoft Word Spell Check

The following code shows a function for checking the number of spelling and grammar errors in a string.

Function NumberOfSpellErrors(strText)

       Dim objMsWord

       Set objMsWord = CreateObject("Word.Application")

       objMsWord.WordBasic.FileNew

       objMsWord.WordBasic.Insert strText

       NumberOfSpellErrors = objMsWord.ActiveDocument.SpellingErrors.Count

       objMsWord.Documents.Close (False)

       objMsWord.Quit ' close the application

       Set objMsWord = Nothing' Clear object memory

End Function

' The following function uses the Spell errors function to check a specific property

' of all the objects with a given description which are under a given parent

Sub CheckAllObjects(ParentObj, ObjDesc, PropName)

       Dim ObjCol, idx, PropValue, OldReportMode

       OldReportMode = Reporter.Filter

       Reporter.Filter = 2 ' Report only errors

       If (IsNull(ParentObj)) Then

              Set ObjCol = Desktop.ChildObjects(ObjDesc)

       Else

              Set ObjCol = ParentObj.ChildObjects(ObjDesc)

       End If

       For idx=0 to ObjCol.count-1

              PropValue = ObjCol.Item(idx).GetROProperty(PropName)

              RetVal = NumberOfSpellErrors(PropValue) ' The actual spell check result

              If (RetVal > 0) Then

                     ReportText = "Object #" & idx+1 & ": The '" & PropName & "' Property has " & RetVal & " spell errors (" & PropValue & ")"

                     Reporter.ReportEvent 1, "Spell Check", ReportText

              End If

       Next

       Reporter.Filter = OldReportMode

End Sub

'''''''''''''''''''''''''''''''''''''

' An example of usage:

' Go over all the static objects in the Login window of the Flight Application

' and for each object check the text for spelling and grammatical errors

'''''''''''''''''''''''''''''''''''''

' Go over all the links in the page and report all the ones that fail the spellcheck

Set Desc = Description.Create()

Desc("nativeclass").Value = "Static"

Set Obj = Dialog("nativeclass:=#32770", "text:=Login")

' Invoke the Flight Application before calling the function

CheckAllObjects Obj, Desc, "text"