Home |  About  | Contribute | Downloads | Documentation | FAQ | Media

Background and Goals

(or "What possessed us to do this?")

Our story began in Westford, MA at the offices of Red Hat where a group of desktop QA engineers dreamed of making their lives easier through automated testing. A survey of the Linux automated GUI automated testing landscape revealed no tool existed that would be flexible, make generating and maintaining scripts easy, and support the needs of internationalization (i18n) and localization testing as well as traditional blackbox application testing. While no such tool existed, the technology was available to create such an automated testing framework using Python and AT-SPI.

The goals for the project were decided upon. A procedural style API would be desireable to keep the barrier to entry for scriptwriting low. This was to help QA folk everywhere, some of which are not "l33t" coders, write useful scripts quickly an easily. Beneath this procedural layer would sit an object oriented class structure to do the meat of the work. Script authors with more programming experience could write against the OO API and easily extend and customize classes to their particular testing needs. Unicode strings needed to be supported for i18n testing needs.

Some quantity of blood, sweat, tears and caffeinated beverages later, dogtail was born.

Architecture

dogtail is a collection of Python modules. The highest level logical division of dogtail is between the core framework (dogtail) and the helper library (dogtail.apps). The core framework contains generalized utilities, the test case classes, the procedural API and the object oriented API. dogtail.apps contains application specific helper classes and functions that make the testing and debugging of applications easier.

The following is a list of the core framework modules and a brief description of what is contained in each. Please refer to the online documentation for a more detailed description of each modules capabilities.

  • config.py - handles the global configuration parameters for executing scripts.
  • distro.py - handles distribution specific packaging.
  • dump.py - contains utilities for dumping trees of Node objects.
  • logging.py - contains code for results and debug logging.
  • path.py - contains accessible identification code used by debug logger.
  • predicate.py - contains the code defining the critera for Node searches.
  • procedural.py - code for the procedural API.
  • rawinput.py - handles raw input by AT-SPI Event generation
  • tc.py - handles test case comparasons.
  • tree.py - defines the central Node class.
  • utils.py - code for various utility functions.
  • version.py - handles versioning of software packages.