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
) or pytest.lazy_fixtures
.
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
@pytest.mark.parametrize('arg1,arg2', [('val1', pytest.lazy_fixtures('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
) or pytest.lazy_fixtures_callable
.
It can work with any callable and your fixtures, e.g.
import pytest
from pytest_lazy_fixtures import lf, lfc
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.7.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 87ef7424dc0229ff9cb72d482f49b7806535c3500641f612c13ddf243c9adacb |
|
MD5 | 86b8bee7a5de6e87a65674423a4e78f4 |
|
BLAKE2b-256 | d125b730a55e0a5e67686d79d18f3b8ef675be86dee357d23f1e3ef23479e812 |
Hashes for pytest_lazy_fixtures-1.0.7-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 71428385b166cdb0fa3f2a3c72b5a5f95fa58f977816877b9b9c1e857143e194 |
|
MD5 | feb103d4f1a4f0d7840707105c4a64ad |
|
BLAKE2b-256 | 77cc98e6c10db35ef76afbdbf6758eb16946e49313a0edacea8269e18c1a2a14 |