REDUCE EXECUTION TIME-METHODS
Context:
Everyone has an opinion on the matter – some insist the Object-Repository yields the best results, while others are strong advocates for working with Descriptive Programming. While one will insert every object into a variable and use that variable, another would use the objects straight from the Object-Repository, thinking it was the most efficient way.
Discussion :
I am going to test manipulated the GUI through these methods(Please make sure that we run all the methods on single instance):1)Regular use of the object repository.
iTimer = Timer
For i = 0 to 50
Browser("Google").Page("Google").WebEdit("q").Set i
Next
Print "Regular OR =" & Timer-iTimer
iTimer = Timer
For i = 0 to 50
Browser("index:=0").Page("index:=0").WebEdit("name:=q").Set i
Next
Print "Descriptive Programming = " & Timer-iTimer
3. OR via fixed reference variable (settings a variable to point to an OR object, and then using that variable).iTimer = Timer
Set oEdit = Browser("Google").Page("Google").WebEdit("q")
For i = 0 to 50
oEdit.Set i
Next
Print "OR via fixed reference = " & Timer-iTimer
Prashanth-QTP
iTimer = TimerSet oEdit = Browser("index:=0").Page("index:=").WebEdit("name:=q")For i = 0 to 50 oEdit.Set iNextPrint "Descriptive programming via fixed reference = " & Timer-iTimer5. Runtime through Object-Repository (using the object repository to access the WebEdit’s runtime object, and setting the value by changing a runtime property).
iTimer = TimerFor i = 0 to 50 Browser("Google").Page("Google").WebEdit("q").Object.value = iNextPrint "Runtime through OR = " & Timer-iTimer6. Runtime through Descriptive programming (similar to E).
iTimer = TimerFor i = 0 to 50 Browser("index:=0").Page("index:=0").WebEdit("name:=q").Object.Value = iNextPrint "Runtime through Descriptive Programming = " & Timer-iTimer7. Runtime through fixed object-repository reference (using the object-repository to get to the runtime object, inserting it into a variable, and using that variable)iTimer = TimerSet oEdit = Browser("Google").Page("Google").WebEdit("q").ObjectFor i = 0 to 50 oEdit.value = iNextPrint "Runtime through OR fixed reference = " & Timer-iTimer8. Runtime through fixed descriptive-programming reference (similar to G).iTimer = TimerSet oEdit = Browser("index:=0").Page("index:=0").WebEdit("name:=q").ObjectFor i = 0 to 50 oEdit.value = iNextPrint "Runtime through DP fixed reference = " & Timer-iTimerPrashanth-QTP
9. Runtime through the OR and GetElementByID
iTimer = TimerSet we = Browser("B").Page("P").Object.getElementById( "id" )For I = 0 To 50 We.Value = iNextPrint "runtime through the OR and GetElementByID = " & Timer-iTImer10. Runtime through the OR and GetElementByName
iTImer = TimerSet we = Browser("B").Page("P").Object.getElementByName( "name" )For I = 0 To 50 We.Value = iNextPrint "runtime through the OR and GetElementByName = " & Timer-iTImerThe ResultsAnd here are the averaged results:
1)Regular OR = 5.59375
2)Descriptive Programming = 6.375
3)OR via fixed reference = 3.31253
4)Descriptive programming via fixed reference = 3.25122
5)Runtime through OR = 2.90625
6)Runtime through Descriptive Programming = 3.921875
7)Runtime through OR fixed reference = 0.203125
8)Runtime through DP fixed reference = 0.265625
9)Runtime through GetElementById = 0.20122
10) Runtime through GetElementByName = 0.21019
Prashanth-QTP
This turned up to pack some surprises, at least for me, but the bottom line remains the same – setting a variable to the GUI’s runtime objects is the most efficient method.
It seems that working directly through the object repository is faster than through descriptive programming (difference of almost a whole second – which quite shocked me, personally). This is reinforced by a more than a second gap when using OR and DP to access the WebEdit’s runtime object, however, the difference is wiped out by using a mediating variable.
It’s interesting to note that using the runtime object reduces the time by almost half, bringing it close to the performance of a fixed reference via a variable.
And the winner, by a full order of magnitude, is using the runtime object through a fixed reference variable. This is not surprising, as it avoids QTP’s GUI mapping mechanism completely (beside the first variable assignment).
Happy Automation
Prashanth-QTP