a pytest plugin that can run both python and robotframework tests while generating robot reports for them
Project description
pytest-robotframework
a pytest plugin that can run both python and robotframework tests while generating robot reports for them
install
pytest should automatically find and activate the plugin once you install it.
poetry add pytest-robotframework --group=dev
features
write robot tests in python
# you can use both robot and pytest features
from robot.api import logger
from pytest import Cache
from pytest_robotframework import keyword
@keyword # make this function show as a keyword in the robot log
def foo():
...
@mark.slow # gets converted to robot tags
def test_foo(cache: Cache):
foo()
run .robot
tests
to allow for gradual adoption, the plugin also runs regular robot tests as well:
*** Settings ***
test setup setup
*** Test Cases ***
bar
[Tags] asdf key:value
no operation
*** Keywords ***
setup
log ran setup
which is roughly equivalent to the following python code:
# conftest.py
from robot.api import logger
from pytest_robotframework import keyword
def pytest_runtet_setup():
foo()
@keyword
def foo():
logger.info("ran setup")
# test_foo.py
from pytest import mark
@mark.asdf
@mark.key("value")
def test_bar():
...
robot options
specify robot CLI arguments with the --robotargs
argument:
pytest --robotargs="-d results --listener foo.Foo"
or you could use the ROBOT_OPTIONS
environment variable:
ROBOT_OPTIONS="-d results --listener foo.Foo"
however, arguments that have pytest equivalents should not set with robot as they will probably cause the plugin to behave incorrectly.
for example, instead of pytest --robotargs="--include some_tag"
you should use pytest -m some_tag
.
setup/teardown and other hooks
to define a function that runs for each test at setup or teardown, create a conftest.py
with a pytest_runtest_setup
and/or pytest_runtest_teardown
function:
# ./tests/conftest.py
def pytest_runtest_setup():
log_in()
# ./tests/test_suite.py
def test_something():
"""i am logged in now"""
these hooks appear in the log the same way that the a .robot
file's Setup
and Teardown
options in *** Settings ***
would:
for more information, see writing hook functions. pretty much every pytest hook should work with this plugin but i haven't tested them all. please raise an issue if you find one that's broken.
tags/markers
pytest markers are converted to tags in the robot log:
from pytest import mark
@mark.slow
def test_blazingly_fast_sorting_algorithm():
[1,2,3].sort()
markers like skip
, skipif
and parameterize
also work how you'd expect:
from pytest import mark
@mark.parametrize("test_input,expected", [(1, 8), (6, 6)])
def test_eval(test_input: int, expected: int):
assert test_input == expected
robot suite variables
to set suite-level robot variables, call the set_variables
function at the top of the test suite:
from robot.libraries.BuiltIn import BuiltIn
from pytest_robotframework import set_variables
set_variables(
{
"foo": "bar",
"baz": ["a", "b"],
}
)
def test_variables():
assert BuiltIn().get_variable_value("$foo") == "bar"
set_variables
is equivalent to the *** Variables ***
section in a .robot
file. all variables are prefixed with $
. @
and &
are not required since $
variables can store lists and dicts anyway
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pytest_robotframework-1.3.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 533af6206329bf4bb08dd83d9523b861647faa7325d452058ce14b06366ce099 |
|
MD5 | 905bfd75176436cf5cd17952e5fe18a9 |
|
BLAKE2b-256 | 4c399c019698d34f3ba7d6096fa05a7ebf07a3cedc6e512a68356eb873c752cb |
Hashes for pytest_robotframework-1.3.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 161e07193928c142b00bbdf4c98a2a3a7983ddd32720dc246944a7386b5bda7f |
|
MD5 | b7b21696e32d187dd145b0a4721167db |
|
BLAKE2b-256 | 5794919d8595d94c516f9727b3a6f034721f3aaf28c8f7e6c178202399400bc3 |