Allows you to use fixtures in @pytest.mark.parametrize.
Project description
pytest-lazy-fixtures
Use your fixtures in @pytest.mark.parametrize
.
This project was inspired by pytest-lazy-fixture.
Improvements that have been made in this project:
- You can use fixtures in any data structures
- You can access the attributes of fixtures
- You can use functions in fixtures
Installation
pip install pytest-lazy-fixtures
Usage
To use your fixtures inside @pytest.mark.parametrize
you can use lf
(lazy_fixture
).
import pytest
from pytest_lazy_fixtures import lf
@pytest.fixture()
def one():
return 1
@pytest.mark.parametrize('arg1,arg2', [('val1', lf('one'))])
def test_func(arg1, arg2):
assert arg2 == 1
lf
can be used with any data structures. For example, in the following example, lf
is used in the dictionary:
import pytest
from pytest_lazy_fixtures import lf
@pytest.fixture()
def one():
return 1
@pytest.mark.parametrize('arg1,arg2', [('val1', {"value": lf('one')})])
def test_func(arg1, arg2):
assert arg2 == {"value": 1}
You can also specify getting an attribute through a dot:
import pytest
from pytest_lazy_fixtures import lf
class Entity:
def __init__(self, value):
self.value = value
@pytest.fixture()
def one():
return Entity(1)
@pytest.mark.parametrize('arg1,arg2', [('val1', lf('one.value'))])
def test_func(arg1, arg2):
assert arg2 == 1
And there is some useful wrapper called lfc
(lazy_fixture_callable
). It can work with any callable and your fixtures, e.g.
import pytest
from pytest_lazy_fixtures import lf
class Entity:
def __init__(self, value):
self.value = value
def __str__(self) -> str:
return str(self.value)
def sum(self, value: int) -> int:
return self.value + value
@pytest.fixture()
def entity():
return Entity(1)
@pytest.fixture()
def two():
return 2
@pytest.fixture()
def three():
return 3
@pytest.fixture()
def entity_format():
def _entity_format(entity: Entity):
return {"value": entity.value}
return _entity_format
@pytest.mark.parametrize(
"message",
[
lfc(
"There is two lazy fixture args, {} and {}! And one kwarg {field}! And also simple value {simple}".format,
lf("entity"),
lf("two"),
field=lf("three"),
simple="value",
),
],
)
def test_lazy_fixture_callable_with_func(message):
assert message == "There is two lazy fixture args, 1 and 2! And one kwarg 3! And also simple value value"
@pytest.mark.parametrize("formatted", [lfc("entity_format", lf("entity"))])
def test_lazy_fixture_callable_with_lf(formatted, entity):
assert formatted == {"value": entity.value}
@pytest.mark.parametrize("result", [lfc("entity.sum", lf("two"))])
def test_lazy_fixture_callable_with_attr_lf(result):
assert result == 3
Contributing
Contributions are very welcome. Tests can be run with pytest
.
License
Distributed under the terms of the MIT
license, pytest-lazy-fixtures
is free and open source software
Issues
If you encounter any problems, please file an issue along with a detailed description.
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_lazy_fixtures-1.0.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 357c9f0ca2d80ec4060d3efcd428f4091c2da537101703e5009635271205e5d9 |
|
MD5 | c925ca1a8012a789428216696fe8b0ea |
|
BLAKE2b-256 | 67bb886468ad73d95659009511adcad02f3448cd1f2472f97f9788d44b856ca1 |
Hashes for pytest_lazy_fixtures-1.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 41069ef5b98162fa42c20e97aacf15271e03ff9588422dae8e2a0b748a466bba |
|
MD5 | 53fc2e13bb1d2ee3eb47e54675068bc3 |
|
BLAKE2b-256 | ee5e9b262e4b7cb897702a1b8f07bd874bab1cf8af1e1ef172b2b45deb97925c |