有没有办法保存参数的值,由pytest fixture提供:
以下是conftest.py
的示例# content of conftest.py
import pytest
def pytest_addoption(parser):
parser.addoption("--parameter", action="store", default="default",
help="configuration file path")
@pytest.fixture
def param(request):
parameter = request.config.getoption("--parameter")
return parameter
以下是pytest模块的示例:
# content of my_test.py
def test_parameters(param):
assert param == "yes"
好的 - 一切正常,但有一种方法可以在测试之外获得param
的值 - 例如使用一些内置pytest函数pytest.get_fixture_value["parameter"]
已编辑 - 详细解释我想要取得什么成就
我正在编写一个模块,在部署之后为测试提供参数,在pytest中编写。我的想法是,如果有人测试看起来像这样:
class TestApproachI:
@load_params_as_kwargs(parameters_A)
def setup_class(cls, param_1, param_2, ... , param_n):
# code of setup_class
def teardown_class(cls):
# some code
def test_01(self):
# test code
这个人给了我一个配置文件,解释了运行他的代码的参数,我将分析这些参数(在其他一些脚本中),我将使用命令pytest --parameters=path_to_serialized_python_tuple test_to_run
运行他的测试将按正确的顺序包含此某人参数的提供值。我会告诉那个人(带有测试)将这个装饰器添加到他希望我提供参数的所有测试中。这个装饰器看起来像这样:
class TestApproachI:
# this path_to_serialized_tuple should be provided by 'pytest --parameters=path_to_serialized_python_tuple test_to_run'
@load_params(path_to_serialized_tuple)
def setup_class(cls, param_1, param_2, ... , param_n):
# code of setup_class
def teardown_class(cls):
# some code
def test_01(self):
# test code
装饰器功能应如下所示:
def load_params(parameters):
def decorator(func_to_decorate):
@wraps(func_to_decorate)
def wrapper(self):
# deserialize the tuple and decorates replaces the values of test parameters
return func_to_decorate(self, *parameters)
return wrapper
return decorator
答案 0 :(得分:2)
我正在使用 pytest-lazy-fixture
来获取任何装置的值:
pip install pytest-lazy-fixture
或 pipenv install pytest-lazy-fixture
安装 fixture_value = pytest.lazy_fixture('fixture')
灯具必须用引号包裹
答案 1 :(得分:1)
将parameter
设置为os环境变量,然后通过os.getenv('parameter')
所以,你可以使用like,
@pytest.fixture
def param(request):
parameter = request.config.getoption("--parameter")
os.environ["parameter"]=parameter
return parameter
@pytest.mark.usefixtures('param')
def test_parameters(param):
assert os.getenv('parameter') == "yes"