I have used STAF/STAX in the past, and liked the way that information was tracked in the tests.

STAX Job Monitor

I'm currently investigating Technologies to tie together a few tools that use XML-RPC, and am interested in recommendations of a good tracking tool, preferably with a decent API.

In the absence of this, I'd appreciate any tips on creating my own such monitoring system (I have GUI development experience, but I'm not sure how I'd model the test run) or integrating the test technologies into STAX (I know I should be able to send XML-RPC commands from jython, but I can see issues around the level of granularity in reporting).


Having done some further research, I'm interested if anyone has any experience with robot framework (robotframework on github)?

Without any external input, this is where I'm currently looking at going.

  • Creating your own tracking tool, while it might seem as a good idea upfront, can come back to bite you later (maintenance and adding enhancements). Would you, instead, like any recommendations of some ready-to-use opensource or paid applications that have similar features? May 9, 2012 at 12:56
  • @rishimaharaj indeed this was my question - what tools are there that do this, and only if there is nothing suitable, tips on rolling my own. May 10, 2012 at 9:45

1 Answer 1


In the end I have gone with robotframework, as it is open source, well documented, and highly extensible. I've gone for the python version as opposed to jython, but this is mostly because I already have a decent python environment set up and have experience with python, but not java, so would like to be able to make use of its standard library in my test libraries. For those with a lot more experience in Java, I hear it's just as good an experience to use the jython version which gives you access to the JVM.

One thing that made my decision easier was the RIDE tool:

RIDE - Writing keywords

RIDE - Running tests

This is just a UI that makes it simple to put together your robot tests and manage tags and execution, that is written in wxPython. The choice of GUI framework leads to a few things being non-optimal on OSX, such as copy/paste and a few keyboard shortcuts, however this is still workable. What this tool excels at however is guiding you towards a sensible architecture. Your test suites can form a logical hierarchy, with common keywords encapsulated as a resource. The RIDE interface also make it possible to see documentation and argument hints from libraries.

For a note on libraries this is simple - all you need in order to implement a library usable from robot, is a class that sits in a file of the same name. You can then use robot's library import to initialise an instance of this class. Methods of this class are then made available by name in your robot tests.

when you then run these tests, you get an automatically generated html log/report, which reports any successes or failures, and allows you to drill down to see the finer grained results of individual test steps, or will just give you an overview of what went on:

robot results

For an example of a test library this is the skeleton of my simple class for interacting with Eggplant over XML-RPC:

class EggplantDriver(object):
    #Snipped docstring and class attributes
    def print_thing(self, name, value): #Snipped method
    def client(self): #Snipped method
    def __init__(self, uri, suite, SUT=None, verbose=False): #Snipped method
    def change_suite(self, new_suite): #Snipped method
    def start_session(self, new_suite=None): #Snipped method
    def end_session(self): #Snipped method
    def connect_SUT(self, SUT=None): #Snipped method
    def disconnect_SUT(self): #Snipped method
    def execute(self, cmd): #Snipped method

I then subclassed this as the following:

from EggplantDriver import EggplantDriver
class SenseTalkCommands(EggplantDriver):
    An additional wrapper around EggplantDriver to give some common sensetalk
    commands directly in Robot
    def Click(self, locator):
        return self.execute(
            "Click %s"%locator
    def WaitFor(self, Time, Image):
        return self.execute(
            'WaitFor %d, %s'%(int(Time),

Which gives you the keywords to use as in the first screenshot - RIDE - Writing keywords.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.