Skip to main content

Python unittest test suite for Robot Framework

This is an experimental package for wrapping Robot Framework test suites into Python unittest suites to make it possible to run Robot Framework tests as plone.testing’s layered test suites:

import unittest

from plone.testing import layered
from robotsuite import RobotTestSuite

from my_package.testing import ACCEPTANCE_TESTING


def test_suite():
    suite = unittest.TestSuite()
    suite.addTests([
        layered(RobotTestSuite('mysuite.txt'),
                layer=ACCEPTANCE_TESTING),
    ])
    return suite

RobotTestSuite splits Robot Framework test suites into separate unittest test cases so that Robot will be run once for every test case in every test suite parsed from the given Robot Framework test suite. Because of that, each Robot will generate a separate test report for each test. Each report will have it’s own folder, which are created recursively reflecting the structure of the given test suite.

RobotTestSuite’s way of wrapping tests into unittest’s test suite is similar to how doctest-module’s DocTestSuite does its wrappings. See the documentation of DocTestSuite for possible common parameters (e.g. for how to pass a test suite from a different package).

The main motivation behind this package is to make Robot Framework support existing test fixtures and test isolation when testing Plone. Yet, this should help anyone wanting to use Robot Framework with zope.testrunner or other Python unittest compatible test runner.

If this works for you, please contribute at: http://github.com/collective/robotsuite/

https://github.com/collective/robotsuite/actions/workflows/build.yml/badge.svg?branch=master

Setting robot variables from environment variables

Robot Framework supports overriding test variables from command-line, which is not-available when running tests as robotsuite-wrapped with other test runners. That’s why robotsuite supports settings variables as environment variables so that every ROBOT_-prefixed environment variable will be mapped into corresponding test variable without the ROBOT_-prefix.

Declaring tests non-critical by given set of tags

Robot Framework supports declaring tests with given tags as non-critical to prevent their failing to fail the complete build on CI. This is supported as keyword argument for RobotTestSuite as follows:

def test_suite():
    suite = unittest.TestSuite()
    suite.addTests([
        layered(RobotTestSuite('mysuite.txt',
                               noncritical=['non-critical-tag']),
                layer=ACCEPTANCE_TESTING),
    ])
    return suite

Setting zope.testrunner-level

zope.testrunner supports annotating test suites with levels to avoid slow test being run unless wanted:

def test_suite():
    suite = unittest.TestSuite()
    suite.addTests([
        layered(RobotTestSuite('mysuite.txt'),
                layer=ACCEPTANCE_TESTING),
    ])
    suite.level = 10
    return suite

Retry failing tests

You can retry a failed test. This can be useful for flaky robot browser tests. Warning: this may not be good for all types of test. For example any changes that were done in the test until the first failure, may persist.

You can enable retries in two ways:

  • Set an environment variable ROBOTSUITE_RETRY_COUNT=X.

  • Override this by passing retry_count=X to a RobotTestSuite call.

The default is zero: no retries. The retry count excludes the original try.

def test_suite():
    suite = unittest.TestSuite()
    suite.addTests([
        robotsuite.RobotTestSuite('test_example.robot', retry_count=3),
        robotsuite.RobotTestSuite('test_variables.robot'),
        robotsuite.RobotTestSuite('test_setups', retry_count=2)
    ])
    return suite

Appending test results to existing test report

When running Robot Framework through robotsuite, its test reports are created into the current working directory with filenames robot_output.xml, robot_log.html and robot_report.html. The default behavior is to override the existing robot_output.xml (and also the other report files generated from that).

To merge test results from separate test runs into the same test report, set environment variable ROBOTSUITE_APPEND_OUTPUT_XML=1 to prevent robotsuite from overriding the existing test results, but to always append to the existing robot_output.xml.

Filtering test execution errors

Set environment variable ROBOTSUITE_LOGLEVEL=ERROR to filter all top level Test Execution Errors below the given log level (e.g. ERROR) from the merged test report. This is useful when unnecessary warnings are leaking from the tested code into Robot Framework logs.

Including or skipping all RobotTestSuite-wrapped tests

Robot Framework is often used with Selenium2Library to write acceptance test using the Selenium-framework. Yet, because those test may be slow to run, one might want sometimes (e.g. on CI) to run everything except the robotsuite wrapped tests, and later only the robotsuite wrapped tests.

This can be achieved for sure, with injecting a custom string into the names of robotsuite-wrapped tests with ROBOTSUITE_PREFIX-environment variable and then filter the test with that string.

E.g. run everything except the robotsuite wrapped tests with:

$ ROBOTSUITE_PREFIX=ROBOTSUITE bin/test --all -t \!ROBOTSUITE

and the other way around with:

$ ROBOTSUITE_PREFIX=ROBOTSUITE bin/test --all -t ROBOTSUITE

Re-using test suites from other packages

Sometime it could be useful to re-use acceptance test from some upstream package to test your slightly tailored package (e.g. with a custom theme). This can be done with by defining the test lookup location with package-keyword argment for RobotTestSuite:

def test_suite():
    suite = unittest.TestSuite()
    suite.addTests([
        layered(leveled(
            robotsuite.RobotTestSuite('robot',
                                      package='Products.CMFPlone.tests'),
        ), layer=PLONE_APP_MOSAIC_NO_PAC_ROBOT),
    ])
    return suite

Metadata

Release files for robotsuite 3.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for robotsuite 3.0.1
File Size Uploaded
robotsuite-3.0.1.tar.gz 77.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for robotsuite 3.0.1
File Interpreter ABI Platform
robotsuite-3.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 93.3 kB

Release files / robotsuite-3.0.1.tar.gz

Download URL robotsuite-3.0.1.tar.gz
Size 77.0 kB
Tags Source
SHA-256 checksum
How to use checksums
de52923de65dab5cfdba6b621001103bb8d52facd14bfac2b7bea295d0def745
BLAKE2b-256 checksum
How to use checksums
91c715a968c49c5d20a1daa426ea2c19351102b58b2896decaf41b3d7f6c6ffd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.8

Release files / robotsuite-3.0.1-py3-none-any.whl

Download URL robotsuite-3.0.1-py3-none-any.whl
Size 16.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2163fada8d2bc54258354ef946ed5e12e21404406d70deeea362ab0a961f87a8
BLAKE2b-256 checksum
How to use checksums
c04c9c191221084b466f5c4d4ffd6e42620fe95038c4ed6f6ef463169a904abf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.8

Release history Release notifications | RSS feed

This release

3.0.1 This release

2 release files

3.0.0

2 release files

2.3.2

2 release files

2.3.1

2 release files

2.3.0

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.0

1 release file

1.7.0

1 release file

1.6.1

1 release file

1.6.0

1 release file

1.5.0

1 release file

1.4.3

1 release file

1.4.2

1 release file

1.4.1

1 release file

1.4.0

1 release file

1.3.4

1 release file

1.3.3

1 release file

1.3.2

1 release file

1.3.1

1 release file

1.3.0

1 release file

1.2.2

1 release file

1.2.1

1 release file

1.2.0

1 release file

1.1.0

1 release file

1.0.4

1 release file

1.0.3

1 release file

1.0.2

1 release file

1.0.1

1 release file

1.0.0

1 release file

0.9.0

1 release file

0.8.0

1 release file

0.7.0

1 release file

0.6.0

1 release file

0.5.0

1 release file

0.4.0

1 release file

0.3.1

1 release file

0.3.0

1 release file

0.2.0

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page