recovery scenario
TRANSCRIPT
-
7/29/2019 Recovery Scenario
1/14
Error Handling & Recovery ScenarioRecovery Scenario:
When executing scripts we may get some Unexpected errors.To recover the test and
continue running script from these unexpected errors we use Recovery Scenarios.
What happens in Recovery Scenarios?
A recovery scenario consists of the following:
Trigger Event:
The event that interrupts your run session. For example a window that may pop up on
screen.
Recovery Operations:
The operations to perform to enable QTP to continue running the test after the trigger event
interrupts the run session. For example, clicking an OK button in a pop-up window.
Post-Recovery Test Run Option:
The instructions on how QTP should proceed after the recovery operations have been
performed, and from which point in the test QTP should continue. For example, you may
want to restart a test from the beginning, or skip a step entirely and continue with the next
step in the test. Recovery scenarios are saved in recovery scenario files having the
extension .qrs. A recovery scenario file is a logical collection of recovery scenarios, grouped
according to our specific requirements.
Recovery scenario manger can handle following four events:
1. Pop-up window: To handle unwanted pop ups.
2. Object state: To handle object related errors at runtime.
3. Test run error: To handle vb script statement errors at runtime.
4. Application crash: To handle crashed applications at runtime.
1.Recovery Scenario for Popup Window:
Steps to follow to handle unwanted popups:
Trigger Event Steps:
Resources Menu -->Recovery Scenario Manager -->New -->Next -->Select Popup Window
as Trigger event -->Next -->Click on Hand Icon -->Show unwanted window with Hand icon --
>Next -->Next -->(Continue below mentioned steps)
Recovery Operations steps:
Select function call as Recovery Operation -->Next {Open Notepad -->Save empty file with
.vbs extension} -->Browse the .vbs fie path -->Next -->Uncheck Add another Recovery
-
7/29/2019 Recovery Scenario
2/14
Operation -->Next -->(Continue below mentioned steps)
Post-Recovery Test Run Option Steps:
Select Post-Recovery Test Run Option {Repeat current step and continue, Proceed to Next
step, Proceed to Next Action, Proceed to next test iteration, Restart current test run, Stop the
Test Run} -->Next -->Enter Scenario Name -->Next -->Select Option --> Finish -->Save the
scenario with .qrs -->Record required Recovery Operation {Click ok, Click Cancel} take the
script into function -->Save the library file -->Click Run
2.Recovery Scenario for Object State:
Steps to follow to check Property values of an object in the application match specified
values. User can specify property values for each object in the hierarchy.
Trigger Event steps:
Resources Menu --> Recovery Scenario Manager --> New --> Next --> Select Object state
Window as Trigger event --> Next --> Click on Hand Icon --> Show object with and icon -->
Next --> Next-->select object property with value (enabled ,false)-->click next --> (Continue
below mentioned steps)
Recovery Operations steps:
Select function call as Recovery Operation --> Next {Open Notepad --> Save empty file with
.vbs extension} --> Browse the .vbs fie path --> Next --> Uncheck Add another Recovery
Operation --> Next -->(Continue below mentioned steps)
Post-Recovery Test Run Option Steps:
Select Post-Recovery Test Run Option {Repeat current step and continue, Proceed to Next
step, Proceed to Next Action, Proceed to next test iteration, Restart current test run, Stop the
Test Run} --> Next--> Enter Scenario Name --> Next --> Select Option -->Finish --> Save the
scenario with .qrs --> Record required Recovery Operation {Click ok, Click Cancel} take the
script into function --> Save the library file --> Click Run
3.Recovery Scenario for Test Run Error:
Steps to follow to check if test does not run successfully then Test Run Error can be raised.
Trigger Event steps:
Resources Menu -->Recovery Scenario Manager -->New -->Next -->Select Testrunerror
Window as Trigger event -->Next -->select any error o -->Next -->Next -->(Continue below
mentioned steps)
Recovery Operations steps:
Select function call as Recovery Operation -->Next {Open Notepad -->Save empty file with
.vbs extension} -->Browse the .vbs fie path -->Next -->Uncheck Add another RecoveryOperation -->Next -->(Continue below mentioned steps)
-
7/29/2019 Recovery Scenario
3/14
Post-Recovery Test Run Option Steps:
Select Post-Recovery Test Run Option {Repeat current step and continue, Proceed to Next
step, Proceed to Next Action, Proceed to next test iteration, Restart current test run, Stop the
Test Run} -->Next >Enter Scenario Name >Next -->Select Option --> Finish >Save the
scenario with .qrs -->Record required Recovery Operation {Click ok, Click Cancel} take the
script into function -->Save the library file -->Click Run
4.Recovery Scenario for Application Crash:
Steps to follow to check application failure during Test Run.
Trigger Event steps:
Resources Menu --> Recovery Scenario Manager--> Click New--> Click Next -->Select
Application Crash as Trigger event-->Next -->Select selected executable application-->Next
--> (Continue below mentioned steps)
Recovery Operations and Post-Recovery Test Run Option Steps:
Select Recovery Operation {Keyboard, Mouse Operation,Close Application Process, function
Call, Restart, Microsoft Windows} -->Next -->If you want to check Add another operation else
uncheck-->Next -->Next -->Enter Scenario Name -->Next-->Select Option -->Finish -->Close
-->Save the scenario with .qrs
When to use Error handling(on error resume next) vs Recovery Scenarios ?
If you can predict that a certain event may happen at a specific point in your test or
component, it is recommended to handle that event directly within your test or component by
adding steps such as If statements or optional steps or "on error resume next", rather than
depending on a recovery scenario. Using Recovery Scenarios may result in unusually slow
performance of your tests.They are designed to handle a more generic set of unpredictable
events which CANNOT be handled programmatically.
Example:
A recovery scenario can handle a printer error by clicking the default button in the Printer
Error message box.You cannot handle this error directly in your test, since you cannot know
at what point the network will return the printer error. You could try to handle this event in
your test by adding an If statement immediately after the step that sent a file to the printer,
but if the network takes time to return the printer error, your test may have progressed
several steps before the error is displayed. Therefore, for this type of event,only a recovery
scenario can handle it.
On error Statements
Following are error statements :
-
7/29/2019 Recovery Scenario
4/14
1. On Error Resume Next
2. On Error Go to 0
3. err.number
4. err.description
On Error Resume Next:
On Error Resume Next statement enables the Error handling in the code.If there is error in
the code "On error Resume Next" ignores it and continue with next line of code.
On Error Go to 0:
On error got to 0 statement disables error handling we have previiously enabled it by using
On Error resume Next.
err.number and err.description:
Provides the error number and the description of the error
Example:
'Call the function to dividecall division
Function division()onerrorresumenext
'divide by zero
z=40/0
' Report the error occured. You can see the error number anddescription in result summary
If Err.number 0 then
Reporter.ReportEvent micWarning,"Error Occured","Error numberis " & err.number & " and description is : " &err.description
'disables error handling
onerrorgoto 0
Endif
Endfunction
What are Recovery Scenarios?
While executing your scripts you may get some UNEXPECTED/UNPREDICTABLE errors. (like printer out of
paper). To recover the test (and continue running) from these unexpected errors you use RecoveryScenarios.
Next question arises,
-
7/29/2019 Recovery Scenario
5/14
When to use on error resume next or programmatic handling of errors VS Recovery Scenarios ?
If you can predict that a certain event may happen at a specific point in your test or component, it is
recommended to handle that event directly within your test or component by adding steps such as If
statements or optional steps or on error resume next, rather than depending on a recovery scenario. Using
Recovery Scenarios may result in unusually slow performance of your tests.They are designed to handle a
more generic set of unpredictable events which CANNOT be handled programmatically.
For Example:
A recovery scenario can handle a printer error by clicking the default button in the Printer Error message box.
You cannot handle this error directly in your test or component, since you cannot know at what point the
network will return the printer error. You could try to handle this event in your test or component by adding an
If statement immediately after the step that sent a file to the printer, but if the network takes time to return
the printer error, your test or component may have progressed several steps before the error is displayed.
Therefore, for this type of event, only a recovery scenario can handle it.
I would not go into details of how to create files and how to define them since they are fully covered in QTP
Documentation. Mercury QuickTest Professional Users Guide > Working with Advanced Testing Features >
Defining and Using Recovery Scenarios >
What constitute Recovery Scenarios?
A recovery scenario consists of the following:
Trigger Event. The event that interrupts your run session. For example, a window that may pop up
on screen, or a QTP run error.
Recovery Operations. The operations to perform to enable QTP to continue running the test after
the trigger event interrupts the run session. For example, clicking an OK button in a pop-up window,
or restarting Microsoft Windows.
Post-Recovery Test Run Option. The instructions on how QTP should proceed after the recovery
operations have been performed, and from which point in the test QTP should continue, if at all. For
example, you may want to restart a test from the beginning, or skip a step entirely and continue with
the next step in the test.
Recovery scenarios are saved in recovery scenario files having the extension .rs. A recovery scenario file is a
logical collection of recovery scenarios, grouped according to your own specific requirements.Is there a method to programmatically call them?
By default, QTP checks for recovery triggers when an error is returned during the run session. You can use the
Recovery objects method to force QTP to check for triggers after a specific step in the run session.
For a complete list go to QTP Documentation > Quick Test Advanced References > Quick Test Automation >
Recovery Object
QTP Recovery Scenario Function Call
Recovery Scenarios
Automated tests are created mainly to be run unattended, and this raises a few concerns for automation
developers. Assume a situation where you initiated your test-suite while leaving your office to be run over-night.
However, because of unforeseen errors, your test stops at a point and disrupts your results. This is what brings us to
creating Recovery Scenarios in QTP. For demonstration, a Test Run Error for item in list or menu not found is used.
This article discusses a way of creating a Recovery Scenario for an instance where an item in the list item or menu is
not found.
-
7/29/2019 Recovery Scenario
6/14
In this example, we will define a Function Call and use that Function Call to handle the error. The default syntax for
the Recovery Scenario Function is:
Function fnRecovery(Object, Method, Arguments, retVal)
'Error Handling Code
EndFunction
Explanation of each argument tofnRecoveryis given below:
Object as Object: The object of the current step.
Method as String: The method of the current step.
Arguments as Array: The actual method's arguments.
Result as Integer: The actual method's result.
To handle this scenario, we will use the function below:
Function Recovery_ListItemIsNotFound(Object, Method, Arguments, retVal)
Dim sAllItems, arrAllItems, intItem
WithObject
'Retrieve all items from the Listbox
sAllItems = .GetROProperty("all items")
'Split 'all items' using a delimiter ";" into an array
arrAllItems = Split(sAllItems, ";")
'Select a random number
intItem = RandomNumber.Value(LBound(arrAllItems), UBound(arrAllItems))
.Select"#" & intItem
Reporter.ReportEvent micInfo, "ListItemIsNotFound", "Item: " & .GetROProperty("value")
EndWith
EndFunction
-
7/29/2019 Recovery Scenario
7/14
Recovery_ListItemIsNotFound, as the same suggests, executes the Recovery Operation if the list item that we
supplied to our target WebList does not exist. This is quite common in Web applications, and Items in a WebList can
change depending upon the input(s) provided.
To start, Click Resources -> Recovery Scenario Manager. You should see a window like this:
Recovery Scenario Wizard
In the window, click the following button:
Doing so will invoke the Recovery Scenario Wizard:
http://relevantcodes.com/Articles/RecoveryScenario1/OpenRSButton.PNGhttp://relevantcodes.com/Articles/RecoveryScenario1/RecoveryScenarioWizard.PNGhttp://relevantcodes.com/Articles/RecoveryScenario1/OpenRSButton.PNGhttp://relevantcodes.com/Articles/RecoveryScenario1/RecoveryScenarioWizard.PNG -
7/29/2019 Recovery Scenario
8/14
Recovery Scenario Wizard - Welcome
When the window above opens:
1. Click Next
2. Select Test Run Erroras the Trigger Event
3. Click Next
http://relevantcodes.com/Articles/RecoveryScenario1/1TriggerEvent.PNGhttp://relevantcodes.com/Articles/RecoveryScenario1/WelcomeWizard.PNGhttp://relevantcodes.com/Articles/RecoveryScenario1/1TriggerEvent.PNGhttp://relevantcodes.com/Articles/RecoveryScenario1/WelcomeWizard.PNG -
7/29/2019 Recovery Scenario
9/14
4. Select Test Run Error: Item in list or menu not found in the Error Listbox
5. Click Next twice and navigate to Recovery Operation
http://relevantcodes.com/Articles/RecoveryScenario1/3DefineRecoveryOperation.PNGhttp://relevantcodes.com/Articles/RecoveryScenario1/2SelectTestRunError.PNGhttp://relevantcodes.com/Articles/RecoveryScenario1/3DefineRecoveryOperation.PNGhttp://relevantcodes.com/Articles/RecoveryScenario1/2SelectTestRunError.PNG -
7/29/2019 Recovery Scenario
10/14
6. Select Function Call and Click Next
7. Select a library which will store our Recovery Function.
8. Select Define New Function and in the TextArea, paste the function Recovery_ListItemIsNotFound
http://relevantcodes.com/Articles/RecoveryScenario1/5SelectFunctionLibrary.PNGhttp://relevantcodes.com/Articles/RecoveryScenario1/4SelectFunctionCall.PNGhttp://relevantcodes.com/Articles/RecoveryScenario1/5SelectFunctionLibrary.PNGhttp://relevantcodes.com/Articles/RecoveryScenario1/4SelectFunctionCall.PNG -
7/29/2019 Recovery Scenario
11/14
Define New Function
9. Click Next
10. Make sure Add Another Recovery Scenario Checkbox is not selected and click Next again.
http://relevantcodes.com/Articles/RecoveryScenario1/6RecoveryOperationComplete.PNGhttp://relevantcodes.com/Articles/RecoveryScenario1/DefineNewFunction.PNGhttp://relevantcodes.com/Articles/RecoveryScenario1/6RecoveryOperationComplete.PNGhttp://relevantcodes.com/Articles/RecoveryScenario1/DefineNewFunction.PNG -
7/29/2019 Recovery Scenario
12/14
11. Under Post-Recovery Test Run Options, select proceed to next step.
12. Give your scenario a name and Click Next
13. And finally, Check the following option:Add Scenario to current testand Click Finish. Save Changes before
closing.
We will use the WebList below to select a value that does not exist in it; so, lets write a code to select Rational
Robot. If you view the items present in the listbox, you will notice that Rational Robot indeed doesnt exist, but our
Recovery Scenario will handle the error when we select it. Instead, it will select a random value from the list.
Browser("title:=.*Recovery Scenario.*").Page("micclass:=Page")_
.WebList("name:=testTools").Select"Rational Robot"
http://relevantcodes.com/Articles/RecoveryScenario1/8RecoveryScenarioName.PNGhttp://relevantcodes.com/Articles/RecoveryScenario1/7ProceedToNextStep.PNGhttp://relevantcodes.com/Articles/RecoveryScenario1/8RecoveryScenarioName.PNGhttp://relevantcodes.com/Articles/RecoveryScenario1/7ProceedToNextStep.PNG -
7/29/2019 Recovery Scenario
13/14
MsgBox "Item Selected: " & Browser("title:=.*Recovery Scenario.*").Page("micclass:=Page")_
.WebList("name:=testTools").GetROProperty("value")
When the code above executes, you will notice that, instead of throwing a Test Run Error, a random value from the
list box was selected. You will know that the Recovery Scenario was triggered and ran successfully when you view
the Test Results:
Recovery Scenario Executed
There are plenty of other scenarios as well, and I will try to cover some of the important ones. If you have any
suggestions, or a scenario that you would like me to cover first, please use the comments section of this post to
share your ideas/thoughts with me. Thanks! :)
All about Recovery Scenarios using QTP
While executing scripts, we usually encounter unexpected & unpredictable events &errors, which results into application crashing during a run session causing total
disruption of the run session and distortion of results. Such problems are quite frequent
especially when the tests are made to run unattended. In such a case the test process
halts until the user perform some desired recovery operation.
Recovery scenarios are useful when it is difficult to predict at which step the errors can come or when we are
confident that the error will not come in the QTP script, whereas it can be anywhere outside the QTP Script. For
illustration; Pop-up message of "out of paper", as caused by the printer device driver. "On error resume next"
is preferred when we sure that the error is expected one and wish to perform some other actions.
In order to handle such situations QTP comes to our rescue by creating recovery scenarios and associates them
with the particular tests. What does a Recovery Scenarios do is to activate a specific recovery operation when a
trigger events takes place. Most simple example of a typical unexpected & unpredictable events & errors is like
Incompatible Media in portable Drive.
The Recovery Scenario Manager presents a structured wizard which helps us in defining
the recovery scenario, like detailed definition of the unexpected event and the operations
required to recover from the exception during the run session.
Advantages of Recovery Scenario Manager: Recovery Scenario Manager can be used to
handle several known errors occurring at runtime. Following four events available in the
recovery scenario manager are extremely helpful
1) Application Crash: This event is useful in handling crashed applications at runtime.
http://www.softwaretestinggenius.com/articals.php?mode=details&qry=153&parent=112http://www.softwaretestinggenius.com/articals.php?mode=details&qry=153&parent=112http://relevantcodes.com/Articles/RecoveryScenario1/ScenarioExecuted.PNGhttp://www.softwaretestinggenius.com/articals.php?mode=details&qry=153&parent=112 -
7/29/2019 Recovery Scenario
14/14
2) Pop Up Window: This event is useful in managing various unwanted application
windows, which get built-up at runtime.
3) Test Run Error: This event is useful in handling VBScript statement errors at
runtime.
4) Object State: This event is useful in handling object related errors at runtime.
Elements of Recovery Scenario: Steps to handle the exceptions are
1) Trigger Event: Is an unexpected event like appearance of a Pop-up window, object
state, test run error causing application crash or interruption in our running session.
2) Recovery Steps: Constitutes a series of steps required to be performed to enable
QTP to proceed further with the process of test after some trigger event has interrupted
the run session. Examples of a recovery operation can be 1) A keyboard or mouse
Operation like a Click over the "OK" button in the Pop-up window 2) Close Application
Process 3) Function Call 4) Restarting the OS etc.
3) Post-Recovery Test Run: Are a set of instructions designed to be provided to QTP
on proceeding further with the test after some recovery operation has been carried out.
Examples of Post Recovery actions can be repeating the complete test from the
beginning or some steps may be skipped altogether & continuing with the remaining
steps in the test.
QTP & Recovery Scenarios:
All Recovery scenarios get saved & logically grouped in recovery scenario files. Grouping
of various recovery scenarios in recovery scenario file can be managed according the
user requirements. Recovery scenario files carry a typical extension of .rs.
In order to instruct QTP to carry out a recovery scenario during a particular test run, we
firstly associate it with the particular test. There is no limitation to any fixed number of
recovery scenarios associated with a test. Order of execution of various recovery
scenarios associated with a test can easily be prioritized, thereby the trigger events get
recognized and handled in the desired sequence.
Whenever any error comes during the execution of a test having many recovery
scenarios associated with it; QTP intelligently hunts for the defined trigger event which
had caused the particular error. After detecting the trigger event, QTP automatically
performs the desired recovery steps and post-recovery test runs etc.
Recovery statements can be inserted in the tests to comfortably control and activate the
recovery scenarios during the test run.
Cons of Recovery Scenarios:
Although Recovery Scenarios are users friendly on one hand; they tend to slow down the
speed of the Test Run. Presence of a few such recovery scenarios would reduce the
speed of Test Run significantly. This can become irritant to the testers, who can prefer
the approach of using VBScript On Error/Goto 0 far more useful for catching & handling
small errors.