- Project tools
-
-
-
- How do I...
-
| Category |
Featured projects |
| scm |
Subversion,
Subclipse,
TortoiseSVN,
RapidSVN
|
| issuetrack |
Scarab |
| requirements |
xmlbasedsrs |
| design |
ArgoUML |
| techcomm |
SubEtha,
eyebrowse,
midgard,
cowiki |
| construction |
antelope,
scons,
frameworx,
build-interceptor,
propel,
phing
|
| testing |
maxq,
aut
|
| deployment |
current |
| process |
ReadySET |
| libraries |
GEF,
Axion,
Style,
SSTree
|
| Over 500 more tools... |
|
mbt
Project home
On Friday, May 18, the normal maintenance window (17:00 Pacific time) will be extended for data center maintenance until 23:00 Pacific. No extended down-time is planned, but brief delays and interruptions are possible throughout the period.
If you were registered and logged in, you could join this project.
Mission
This project will be re-named to GraphWalker. See graphwalker.org for more details!
org.tigris.mbt is an implementation of Model-based testing
built in java. It allows you to generate test sequences from a
finite-state machine or an extended finite-state machine. The test
sequences can be created offline, or run online The tool itself supports no actual modeling. This is done in a separate tool, yEd from yWorks, which is available as a free download with unrestricted functionality. But org.tigris.mbt should work with any graphml-compatible editor. org.tigris.mbt runs on any platform that is supported by java. Download! The tool requires Java 1.6. Support Visit the forums at mbttigrisorg.freeforums.org Visit the wiki A collection of articles can be found here .
Documentation is here Running the tool - Copy mbt-2.2-beta15.jar and mbt.properties to the same folder of choice.
- Open a command window, and type: 'java -jar mbt-2.1-beta15.jar -v', and you should get something like this:
$> java -jar mbt-2.2-beta13.jar -v org.tigris.mbt version 2.2 (revision 758) Beta 13
org.tigris.mbt is open source software licensed under GPL The software (and it's source) can be downloaded from http://mbt.tigris.org/
This package contains following software packages: crimson-1.1.3.jar http://xml.apache.org/crimson/ commons-collections-3.2.1.jar http://jakarta.apache.org/commons/collections/ jdom-1.0.jar http://www.jdom.org/ log4j-1.2.15.jar http://logging.apache.org/log4j/ commons-cli-1.2.jar http://commons.apache.org/cli/ colt-1.2..0jar http://dsd.lbl.gov/~hoschek/colt/ jung-3d-2.0.jar http://jung.sourceforge.net/ jung-algoritms-2.0.jar http://jung.sourceforge.net/ jung-api-2.0.jar http://jung.sourceforge.net/ jung-graph-impl-2.0.jar http://jung.sourceforge.net/ jung-io-2.0.jar http://jung.sourceforge.net/ jung-jai-2.0.jar http://jung.sourceforge.net/ jung-visualization-2.0.jar http://jung.sourceforge.net/ bsh-2.0b4.jar http://www.beanshell.org/ commons-configuration-1.5.jar http://commons.apache.org/configuration/ commons-lang-2.4.jar http://commons.apache.org/lang/ commons-logging-1.1.1.jar http://commons.apache.org/logging/
- You can also type: 'java -jar mbt-2.2-beta15.jar help' to investigate what mbt can do:
$> java -jar mbt-2.2-beta15.jar help usage: 'java -jar mbt.jar [OPTION] [ARGUMENT]'
Type 'java -jar mbt.jar help ' to get specific help about a command. Valid commands are: gui help manual merge methods offline online requirements soap source xml
Type 'java -jar mbt.jar -v (--version)' for version information.
Quick start guide offline - Generate a test sequence Let's create a test sequence from a simple model of www.amazon.com, which is called UC01.graphml.
We want to create an offline test sequence, that is generated by
random, but we want the generation to stop when we have passed all
vertices. The command for doing this would look like this: $>java -jar mbt-2.2-beta15.jar offline -g RANDOM -s EDGE_COVERAGE:100 -f model/UC01.graphml e_init v_BrowserStopped e_StartBrowser v_BrowserStarted e_EnterBaseURL v_BaseURL e_SearchBook v_SearchResult e_ClickBook v_BookInformation e_AddBookToCart v_OtherBoughtBooks : :
Let's examine the command a bit closer: offline - This is the command of mbt that
will make it generate an offline test sequence. The sequence is always
printed to the console, to standard output. If you want it to a file,
you can always redirect it using '>' . $>java -jar mbt-2.2-beta15.jar offline -g RANDOM -s EDGE_COVERAGE:100 -f model/UC01.graphml > my_test_sequence.txt -g RANDOM - This tells mbt that the sequence should be generated in a randomized fashion. Possible generators for generating test sequences are: | Generator | Description | | A_STAR | Will try to generate the shortest possible test sequence through a model.
This is very good when trying to find the fastest path with
complete coverage in a model. The downside is that it only works on
smaller models. If used on large models, mbt will take a lot of CPU time, computing the shortest path. See Wikipedia article: A* search algorithm | | SHORTEST_NON_OPTIMIZED | This is a compromise between A_STAR and RANDOM. The algorithm works as follows: - Choose an edge not yet visited by random.
- Select the shortest path to that edge using Dijkstra's algorithm (See Wikipedia: Dijkstra's algorithm)
- Walk that path, and mark all those edges as visited.
- When reaching the selected edge in step 1, start all over, repeating steps 1->4.
The algorithm works well an very large models, and generates reasonably short sequences. | | RANDOM | This algorithm selects an out-edge from a vertex by random, and repeats the process in the next vertex. | -s EDGE_COVERAGE:100 - This gives mbt a
stop condition. In this case, 100% coverage of all edges. It means that
whenever that stop conditions is evaluated to true, mbt will immediately halt the test sequence generation. Possible stop conditions are: | Stop condition | Description | Value | | VERTEX_COVERAGE | The amount of vertex coverage, in percent of the model. | An integer between 1 and 100. | REACHED_EDGE | Stop at designated edge. | The name of an edge. | NEVER | Continue for ever. | N/A | | REQUIREMENT_COVERAGE | Run until a certain amount of percentage of requirement coverage is reached. | An integer between 1 and 100. | | REACHED_VERTEX | Stop at designated vertex. | The name of a vertex. | | TEST_DURATION | Run the test for certain period of time. | The time, given in seconds. | | REACHED_REQUIREMENT | Run the test until a specific requirement is reached. | The name/tagid of the requirement. | | TEST_LENGTH | How
long the test sequence should be. This is given as how many pairs of
edges/vertices should be generated. One pair gives 2 lines to the
console output, one edge and one vertex. | An integer. | | EDGE_COVERAGE | The amount of edge coverage, in percent of the model. | An integer between 1 and 100 | -f model/UC01.graphml - This tells mbt what model to use. It can be one graphml file, but it can also be a folder. requirements - Find and list all requirements in a model mbt has
the capability of keeping track of requirements. What this means, is
that you have the possibility to tag your requirements into your model.
Later on, when executing tests, you will know which requirements were
tested, and if they passed or failed. Look at the model www.amazon.com.
The requirements are tagged in the model using the 'REQTAG' tag. The
command below, lists all requirements found in that model, and writes
them to the console in alphabetical order: $> java -jar mbt-2.2-beta15.jar requirements -f model/UC01.graphml UC01 2.2.1 UC01 2.2.2 UC01 2.2.3 UC01 2.3
methods - Find and list vertices and edges, by name This command
lists all vertices and edges by their names and writes them
to the console in alphabetical order. This is practical to know when
implementing a tool which shall execute the actual tests. $> java -jar mbt-2.2-beta15.jar methods -f model/UC01.graphml e_AddBookToCart e_ClickBook e_EnterBaseURL e_SearchBook e_ShoppingCart e_StartBrowser e_init v_BaseURL v_BookInformation v_BrowserStarted v_BrowserStopped v_OtherBoughtBooks v_SearchResult v_ShoppingCart
merge - Write a model to the standard output
When working with large and complex models, it is
usually practical to break them down into subgraphs. To see what the
actual model will look like, you need to merge the model using
this command. $> java -jar mbt-2.2-beta15.jar merge -f model/UC01.graphml
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/graphml http://www.yworks.com/xml/schema/graphml/1.0/ygraphml.xsd" xmlns:y="http://www.yworks.com/xml/graphml"> : :
The output of this commands needs
to be redirected to a file. Open the file in yEd, and there, use a
Layout Algorithm do make it look good. xml - Wrap all fancy options into one xml file
The command xml, enables you to put all command and
options into on single xml file. For instance the command: $> java -jar mbt-2.2-beta15.jar offline -g RANDOM -s EDGE_COVERAGE:100 -f model/UC01.graphml could also be expressed in a xml file as: NOTE: copy this file [mbt_setup.dtd] to the same folder as the xml file. So the new command would be: $> java -jar mbt-2.2-beta15.jar xml -f xml/offline.xml e_init v_BrowserStopped e_StartBrowser v_BrowserStarted e_EnterBaseURL v_BaseURL e_SearchBook v_SearchResult : : soap - Run mbt as a web services The command soap, enables you run mbt as web services. The purpose of running mbt as web services, is that other testing tools which also understands web services, now can communicate with mbt. For instance, Quick Test Professional [QTP] from HP, has that capability.
The soap command needs a xml file, containing all
information regarding the test run. In the example below, I'm using the
same xml file from above. $> java -jar mbt-2.2-beta15.jar soap -f xml/offline.xml Now running as a SOAP server. For the WSDL file, see: http://myComputerName:9090/mbt-services?WSDL Press Ctrl+C to quit You can now open the WSDL file browsing to: http://myComputerName:9090/mbt-services?WSDL. Available requests are: | Request | Description | Indata | Outdata | SetCurrentVertex | Changes the current state in the model. | The name of the new current state of the model. If an empty string is given, the default value will be the START vertex in the model. If given vertex does not exist in the model, nothing happens, and the current vertex is unaffected. [String] | The name (label) of the vertex to be the new current vertex in the model. [String] | GetDataValue | Retrieves the value of a variable in the model. (Only if the model is EFSM, extended finite-state machine) | The name of the variable [String] | The current value of that variable [String] | ExecAction | Executes an action on an object in the model. | The action [String] | The outcome of the action. [String] | | GetNextStep | Retrieves the name of the next vertex or edge to execute. | N/A | The name of the label of the edge or the vertex. [String] | GetStatistics | Retrieve the statistics of the run. | N/A | The statistics of the run. [String] | HasNextStep | Asks mbt if there is any more edges or vertices to execute. | N/A | Returns true if there still are steps to do, else false. [String] | Load | Restart mbt with a new xml file. | The name of the xml file. | Returns true if the operation was succefull, else false. [String] | Reload | Restart mbt with the current xml file. | N/A | Returns true if the operation was successful, else false. [String] | An example of a script in QTP, executing a test using mbt. WebService("SoapServicesService").SetTOProperty "WSDL", "http://myComputerName:9090/mbt-services?WSDL" If ( not WebService("SoapServicesService").Reload() )Then
Reporter.ReportEvent micFail, "MBT failure", "MBT
encountered an error. See the MBT log files for information." ExitTest End If Do until not WebService("SoapServicesService").HasNextStep() action = WebService("SoapServicesService").GetNextStep() If len(action) > 0 Then If not Eval( action ) Then
Reporter.ReportEvent micFail, "Script failure", "The script encountered
an error when trying to run function: " & action ExitTest End if End If Loop Reporter.ReportEvent micDone, "MBT Statistics", WebService("SoapServicesService").GetStatistics() | The script above executes within QTP, and calls mbt until the stop condition is reached. The request to GetNextStep, which returns a string, is put into the Eval which will call the appropriate function. gui - Run mbt with a graphical user interface The command gui will launch mbt with a GUI. $> java -jar mbt-2.2-beta15.jar gui source - Generate stub code
The command source will generate source code
for you. It will use a template, and write the code to the console. The
template used in the example below is java.template, which will generate a stub for you. $> java -jar mbt-2.2-beta15.jar source -f model/UC01.graphml -t templates/java.template /** * This method implements the Edge 'e_AddBookToCart' */ public void e_AddBookToCart() { log.info( "Edge: e_AddBookToCart" ); throw new RuntimeException( "The Edge: e_AddBookToCart is not implemented yet!" ); }
/** * This method implements the Edge 'e_ClickBook' */ public void e_ClickBook() { log.info( "Edge: e_ClickBook" ); throw new RuntimeException( "The Edge: e_ClickBook is not implemented yet!" ); } : : You can make you own template. Let's look at the java.template: /** * This method implements the {EDGE_VERTEX} '{LABEL}' */ public void {LABEL}() { log.info( "{EDGE_VERTEX}: {LABEL}" ); throw new RuntimeException( "The {EDGE_VERTEX}: {LABEL} is not implemented yet!" ); } | The keywords which are going to be replaced by relevant data are: | Keyword | Replaced by | | {EDGE_VERTEX} | Either the word Vertex or Edge. | {LABEL} | The name of the edge or the vertex. | Demo and examples Demo An example of a model that depicts a demo of the www.amazon.com site. It uses the Extended Finite-State machine notation. Which means, that in this model, mbt keeps track of how many books the user has put in the shopping cart during the test. Go to the demo. Examples Samples of simple models are can be found here . To open the models in a graph editor, please go to yEd of yWorks , and get their graph editor. Go to the examples. How to's A collection of how to . FAQ A collection of Frequently Asked Questions . Related resource Other
|