当前位置: 首页 > 知识库问答 >
问题:

pytest-获取fixture参数的值

孔寒
2023-03-14

是否有一种方法来保存参数的值,由pytest夹具提供:

这里有一个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"

好的-一切正常,但是有没有一种方法可以在测试之外获得参数的值-例如使用一些内置的pytest函数pytest.get_fixture_value[参数]

编辑-详细解释我想达到的目标

我正在编写一个模块,它部署并在部署之后为测试提供参数,并在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\u to\u serialized\u python\u tuple test\u to\u run运行他的测试,其中这个tuple将以正确的顺序包含为这个参数提供的值。我会告诉那个家伙(有测试)把这个装饰器添加到所有测试中,他希望我提供参数。此装饰器将如下所示:

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

decorator函数应该如下所示:

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

共有3个答案

阎坚成
2023-03-14

你可以使用pytest函数config.cache,像这样

def function_1(request):
  request.config.cache.set("user_data", "name")
  ...

def function_2(request):
  request.config.cache.get("user_data", None)
  ...

这里有更多关于它的信息

https://docs.pytest.org/en/latest/reference/reference.html#std-夹具缓存https://docs.pytest.org/en/6.2.x/cache.html

谭毅然
2023-03-14

将该参数设置为os环境变量,然后通过os.getenv('parameter')

所以,你可以用,

@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"

沈自珍
2023-03-14

我正在使用pytest lazy fixture获取任何fixture的值:

  • 首先使用pip install pytest lazy fixturepipenv install pytest lazy fixture
  • 然后,如果需要,只需将夹具指定给如下变量
    fixture_value = pytest.lazy_fixture('fixture')

固定装置必须用报价单包装

 类似资料:
  • 本文向大家介绍python pytest进阶之fixture详解,包括了python pytest进阶之fixture详解的使用技巧和注意事项,需要的朋友参考一下 前言 学pytest就不得不说fixture,fixture是pytest的精髓所在,就像unittest中的setup和teardown一样,如果不学fixture那么使用pytest和使用unittest是没什么区别的(个人理解)。

  • 本文向大家介绍python pytest进阶之xunit fixture详解,包括了python pytest进阶之xunit fixture详解的使用技巧和注意事项,需要的朋友参考一下 前言 今天我们再说一下pytest框架和unittest框架相同的fixture的使用, 了解unittest的同学应该知道我们在初始化环境和销毁工作时,unittest使用的是setUp,tearDown方法,

  • 问题内容: 我正在尝试使用Swift从URL获取参数。假设我有以下网址: 如何获取test1和test2的值? 问题答案: 您可以使用以下代码获取参数 像这样调用方法 其他扩展方法:

  • 问题内容: 考虑以下Pytest: 该测试使用Pytest固定装置,其本身具有属性。在测试中迭代该属性,以便仅在每个in的断言均成立的情况下测试才通过。 但是,我实际上想做的是生成3个测试,其中2个应该通过,其中1个将失败。我试过了 但这导致 据我了解,在Pytest固定装置中,函数“成为”其返回值,但是在对参数进行参数化时,这似乎尚未发生。如何以所需的方式设置测试? 问题答案: 从 pytest

  • 上一章节,主要介绍了一下如何使用不同 location 进行协作,对 location 进行糅合,往往都是要需要参数的二次调整。如何正确获取传递参数、设置参数,就是你的必修课了。本章目的是给出在 OpenResty 的世界中,我们如何正确获取、设置 uri 参数。 获取请求 uri 参数 首先看一下官方 API 文档,获取一个 uri 有两个方法:ngx.req.get_uri_args、ngx.

  • 我们经常需要获取用户传递的数据,包括 Get、POST 等方式的请求,beego 里面会自动解析这些数据,你可以通过如下方式获取数据: GetString(key string) string GetStrings(key string) []string GetInt(key string) (int64, error) GetBool(key string) (bool, error) Get