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 generating.

However, the Robot Framework native XML format is supported by Xray. Thus, it is the preferable way of importing tests/results from Robot test cases. When 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 more generic.


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


This and more examples are 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):

This is 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 and generating the JUnit XML report (e.g., robot.xml), it can be imported to Xray (either by the REST API or through the 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 alias 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").