In this tutorial, we will execute some tests using the Robot Framework.


Please note

This tutorial explores the integration using the JUnit XML report that the Robot Framework is capable of generate.

However, the Robot Framework native XML format is supported by Xray and thus it should be the preferable way of importing tests/results from Robot test cases. Whenever integrating through Robot's specfic XML format, you have access to more features than the ones that are available if you use JUnit's XML format, since the latter is a generic format.



  • robot framework
  • Java (if using the Java variant of the "robot framework")



This and more examples may be found in Robot framework's robotdemo repository.

class Calculator(object):
    BUTTONS = '1234567890+-*/C='
    def __init__(self):
        self._expression = ''
    def push(self, button):
        if button not in self.BUTTONS:
            raise CalculationError("Invalid button '%s'." % button)
        if button == '=':
            self._expression = self._calculate(self._expression)
        elif button == 'C':
            self._expression = ''
        elif button == '/':
            self._expression += '//'    # Integer division also in Python 3
            self._expression += button
        return self._expression
    def _calculate(self, expression):
            return str(eval(expression))
        except SyntaxError:
            raise CalculationError('Invalid expression.')
        except ZeroDivisionError:
            raise CalculationError('Division by zero.')

class CalculationError(Exception):


Next, follows the robot test.


*** Settings ***
Documentation     Example test cases using the keyword-driven testing approach.
...               All tests contain a workflow constructed from keywords in
...               ``CalculatorLibrary.py``. Creating new tests or editing
...               existing is easy even for people without programming skills.
...               The _keyword-driven_ appoach works well for normal test
...               automation, but the _gherkin_ style might be even better
...               if also business people need to understand tests. If the
...               same workflow needs to repeated multiple times, it is best
...               to use to the _data-driven_ approach.
Library           CalculatorLibrary.py
*** Test Cases ***
Push button
    Push button    1
    Result should be    1
Push multiple buttons
    Push button    1
    Push button    2
    Result should be    12
Simple calculation
    Push button    1
    Push button    +
    Push button    2
    Push button    =
    Result should be    3
Longer calculation
    Push buttons    5 + 4 - 3 * 2 / 1 =
    Result should be    3
    Push button    1
    Push button    C
    Result should be    ${EMPTY}    # ${EMPTY} is a built-in variable


After running the tests (see bellow) and generating the JUnit XML report (e.g. robot.xml), it can be imported to Xray (either by the REST API or through "Import Execution Results" action within the Test Execution).


If you're using Python,

robot -x robot.xml keyword_driven.robot


Or if you're using Java,

java -jar robotframework-3.0.jar   -x robot.xml  keyword_driven.robot


JUnit's Test Case is mapped to a Generic Test in JIRA, and the "Generic Test Definition" field contains the friendly name of the robot script concatenated with the aliias of the test case.



The Execution Details of the Generic Test contains information about the Test Suite, which in this case corresponds to the friendly name of the robot script (i.e. "Keyword Driven").