TestOptimal uses a scripting format called mScript. mScript is a simple, XML based scripting to drive your web applications. It has only 14 tags and is very easy to learn and use for writing your testing scripts. It's also very powerful. Here's a list of the 14 tags:
- action - executes the action specified in the code attribute, e.g. to click the button named "Order", you would enter code="click('name=Order')". See mScript function. You may also create your own user defined functions.
- assert - asserts the condition specified. if condition fails throw the MBTException.
- dataset - defines a dataset. Its body contains tags that populates the dataset.
- db - defines a jdbc data source to be used by sql tag.
- field - defines a field in a row and sets its value.
- if - performs condition check and if evaluates to true then execute the command tags in the body.
- log - logs a message to TestOptimal server log file.
- mbt - container tag to hold one or many scripts to control MBT execution.
- rowdata - adds a row to the data set. Must be within a dataset tag and contain at least one field tag.
- script - defines a script method to be executed at state entry/exit or transition prep, action or verify. The body of the script tag is the command tags. This tag is equivalent to the method declaration in a java class.
- sql - declares the sql statement to populate dataset.
- state - container tag to hold scripts for a state including transition.
- transition - container tag to hold scripts for a transition.
- while - executes the script in its body if the condition specified is true.
1. Generate a skeleton mScript. To do so, just click on mScriptTab, the mScript displayed is the mScript we will use. Right-mouse click on the script content and select "View Source" option, copy and paste the code into your XML editor.
2. Gather UI identifiers from the target web interface (google maps). I used the FireFox Selenium IDE to do this. By recording each action from my model, e.g. click Search maps, the Selenium IDE captured the identifiers I needed.
3. Add the specific script actions that pertain to each transition in the model. There were 11 transitions in my model, so I had 11 scripts to write. Within the skeleton script generated in Step #1 above, there are 2 sets of function stubs under each state and 3 sets of function stubs under each transition. To keep things simple, I did not use any of the state functions, instead concentrating on the transition function actions. The transitions for my model involved only two actions: clicking on objects (e.g. buttons) or selecting from a pop-down menu. Hence I needed to write two action scripts:
<action code="$click(element_locator)"/>
<action code="$selectOption(element_locator,label)"/>
"element_locator" is a string to locate the link on the page. Again, I used the Selenium IDE FireFox plug-in to find the identifiers for each element locator. To refresh our memory on what we are testing, here's a screenshot of the limited UI we selected for these articles:Referring to the above graphic, here are the mScript action codes I used for the transitions in my model:
Click Show options
<action code="$click('id=showss')"/>Click Remove options<action code="$click('id=hidess')"/>Select option 'All Results'<action code="$selectOption('id=mrtbox','label=All results')"/>Select option 'Locations'<action code="$selectOption('id=mrtbox','label=Locations')"/>Select option 'Businesses'<action code="$selectOption('id=mrtbox','label=Businesses')"/>Select option 'User-created content'<action code="$selectOption('id=mrtbox','label=User-created content')"/>Select option 'Related maps'<action code="$selectOption('id=mrtbox','label=Related maps')"/>Select option 'Mapped web pages'<action code="$selectOption('id=mrtbox','label=Mapped web pages')"/>Select option 'Real estate'<action code="$selectOption('id=mrtbox','label=Real estate')"/>Click Search Maps<action code="$click('id=q-sub')"/>Click Google maps logo<action code="$click('id=logo')"/>4. Modify the skeleton mScript code with the action codes from above (and remove any unneeded tags as desired).
5. Deploy your mScript code. To do so, copy or save to the /script/ folder in the TestOptimal home directory using the same name as the model name, e.g. "google_maps.xml".
We're now ready to exercise our model using the mScript that has been tailored to our test target (I've included the script below). Next week we'll generate test sequences and start testing.
<xml version="1.0">
<mscript>
<state id="n1">
<transition event="show_options">
<script type="action">
<action code="$click('id=showss')" />
</script>
</transition>
</state>
<state id="n2">
<transition event="remove_options">
<script type="action">
<action code="$click('id=hidess')" />
</script>
</transition>
<transition event="select_all">
<script type="action">
<action code="$selectOption('id=mrtbox','label=All results')" />
</script>
</transition>
<transition event="select_locations">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Locations')" />
</script>
</transition>
<transition event="select_bus">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Businesses')" />
</script>
</transition>
<transition event="select_user">
<script type="action">
<action code="$selectOption('id=mrtbox','label=User-created content')" />
</script>
</transition>
<transition event="select_related">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Related maps')" />
</script>
</transition>
<transition event="select_mapped">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Mapped web pages')" />
</script>
</transition>
<transition event="select_real">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Real estate')" />
</script>
</transition>
<transition event="search_maps">
<script type="action">
<action code="$click('id=q-sub')" />
</script>
</transition>
<transition event="click_google_maps">
<script type="action">
<action code="$click('id=logo')" />
</script>
</transition>
</state>
<state id="n3">
<transition event="remove_options">
<script type="action">
<action code="$click('id=hidess')" />
</script>
</transition>
<transition event="select_all">
<script type="action">
<action code="$selectOption('id=mrtbox','label=All results')" />
</script>
</transition>
<transition event="select_locations">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Locations')" />
</script>
</transition>
<transition event="select_bus">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Businesses')" />
</script>
</transition>
<transition event="select_user">
<script type="action">
<action code="$selectOption('id=mrtbox','label=User-created content')" />
</script>
</transition>
<transition event="select_related">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Related maps')" />
</script>
</transition>
<transition event="select_mapped">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Mapped web pages')" />
</script>
</transition>
<transition event="select_real">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Real estate')" />
</script>
</transition>
<transition event="search_maps">
<script type="action">
<action code="$click('id=q-sub')" />
</script>
</transition>
<transition event="click_google_maps">
<script type="action">
<action code="$click('id=logo')" />
</script>
</transition>
</state>
<state id="n4">
<transition event="remove_options">
<script type="action">
<action code="$click('id=hidess')" />
</script>
</transition>
<transition event="select_all">
<script type="action">
<action code="$selectOption('id=mrtbox','label=All results')" />
</script>
</transition>
<transition event="select_locations">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Locations')" />
</script>
</transition>
<transition event="select_bus">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Businesses')" />
</script>
</transition>
<transition event="select_user">
<script type="action">
<action code="$selectOption('id=mrtbox','label=User-created content')" />
</script>
</transition>
<transition event="select_related">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Related maps')" />
</script>
</transition>
<transition event="select_mapped">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Mapped web pages')" />
</script>
</transition>
<transition event="select_real">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Real estate')" />
</script>
</transition>
<transition event="search_maps">
<script type="action">
<action code="$click('id=q-sub')" />
</script>
</transition>
<transition event="click_google_maps">
<script type="action">
<action code="$click('id=logo')" />
</script>
</transition>
</state>
<state id="n5">
<transition event="remove_options">
<script type="action">
<action code="$click('id=hidess')" />
</script>
</transition>
<transition event="select_all">
<script type="action">
<action code="$selectOption('id=mrtbox','label=All results')" />
</script>
</transition>
<transition event="select_locations">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Locations')" />
</script>
</transition>
<transition event="select_bus">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Businesses')" />
</script>
</transition>
<transition event="select_user">
<script type="action">
<action code="$selectOption('id=mrtbox','label=User-created content')" />
</script>
</transition>
<transition event="select_related">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Related maps')" />
</script>
</transition>
<transition event="select_mapped">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Mapped web pages')" />
</script>
</transition>
<transition event="select_real">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Real estate')" />
</script>
</transition>
<transition event="search_maps">
<script type="action">
<action code="$click('id=q-sub')" />
</script>
</transition>
<transition event="click_google_maps">
<script type="action">
<action code="$click('id=logo')" />
</script>
</transition>
</state>
<state id="n6">
<transition event="remove_options">
<script type="action">
<action code="$click('id=hidess')" />
</script>
</transition>
<transition event="select_all">
<script type="action">
<action code="$selectOption('id=mrtbox','label=All results')" />
</script>
</transition>
<transition event="select_locations">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Locations')" />
</script>
</transition>
<transition event="select_bus">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Businesses')" />
</script>
</transition>
<transition event="select_user">
<script type="action">
<action code="$selectOption('id=mrtbox','label=User-created content')" />
</script>
</transition>
<transition event="select_related">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Related maps')" />
</script>
</transition>
<transition event="select_mapped">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Mapped web pages')" />
</script>
</transition>
<transition event="select_real">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Real estate')" />
</script>
</transition>
<transition event="search_maps">
<script type="action">
<action code="$click('id=q-sub')" />
</script>
</transition>
<transition event="click_google_maps">
<script type="action">
<action code="$click('id=logo')" />
</script>
</transition>
</state>
<state id="n7">
<transition event="remove_options">
<script type="action">
<action code="$click('id=hidess')" />
</script>
</transition>
<transition event="select_all">
<script type="action">
<action code="$selectOption('id=mrtbox','label=All results')" />
</script>
</transition>
<transition event="select_locations">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Locations')" />
</script>
</transition>
<transition event="select_bus">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Businesses')" />
</script>
</transition>
<transition event="select_user">
<script type="action">
<action code="$selectOption('id=mrtbox','label=User-created content')" />
</script>
</transition>
<transition event="select_related">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Related maps')" />
</script>
</transition>
<transition event="select_mapped">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Mapped web pages')" />
</script>
</transition>
<transition event="select_real">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Real estate')" />
</script>
</transition>
<transition event="search_maps">
<script type="action">
<action code="$click('id=q-sub')" />
</script>
</transition>
<transition event="click_google_maps">
<script type="action">
<action code="$click('id=logo')" />
</script>
</transition>
</state>
<state id="n8">
<transition event="remove_options">
<script type="action">
<action code="$click('id=hidess')" />
</script>
</transition>
<transition event="select_all">
<script type="action">
<action code="$selectOption('id=mrtbox','label=All results')" />
</script>
</transition>
<transition event="select_locations">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Locations')" />
</script>
</transition>
<transition event="select_bus">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Businesses')" />
</script>
</transition>
<transition event="select_user">
<script type="action">
<action code="$selectOption('id=mrtbox','label=User-created content')" />
</script>
</transition>
<transition event="select_related">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Related maps')" />
</script>
</transition>
<transition event="select_mapped">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Mapped web pages')" />
</script>
</transition>
<transition event="select_real">
<script type="action">
<action code="$selectOption('id=mrtbox','label=Real estate')" />
</script>
</transition>
<transition event="search_maps">
<script type="action">
<action code="$click('id=q-sub')" />
</script>
</transition>
<transition event="click_google_maps">
<script type="action">
<action code="$click('id=logo')" />
</script>
</transition>
</state>
</mscript>
</xml>

0 comments. Add Comment.:
Post a Comment