【问题标题】:pytest - @parametrize - can i @parametrize a test using data GIVEN by a fixture?pytest - @parametrize - 我可以使用夹具给定的数据@parametrize 测试吗?
【发布时间】:2020-04-15 15:34:31
【问题描述】:

使用 python 3.8 和 pytest 5.3.2

在 conftest.py 我有一个从 json 配置文件读取数据的夹具, 以便在多次测试中重用从 json 配置文件中读取的数据。

configuration.json

{"username":"user", "endpoints":["https://www.something.com/url1", "https://www.something.com/url2"]}

conftest.py


def pytest_addoption(parser):
    parser.addoption("--configuration", action="store", default="configuration.json")


@pytest.fixture(scope="session")
def configuration(request):
    configuration= None
    configuration= request.config.getoption("--configuration")
    with open(configuration, 'r') as f:
        configuration= json.load(f)
    return configuration

这很好用:


class TestService():
   def test_something(configuration)
      assert configuration['username'] == 'user' 

在这种情况下,测试从配置夹具读取数据,该夹具从 configuration.json 文件读取数据。

问题是当我想将此数据与@parametrize 一起使用时:

我想转换这种方法:


@mark.parametrize('endpoint', [
    "https://www.something.com/url1", "https://www.something.com/url2"
])
def test_endpoints_parametrizzato(endpoint):
    print(endpoint)
    assert requests.get(endpoint).status_code == 200

用这种方法


@mark.parametrize('endpoint', configuration['endpoints'])
def test_endpoints_parametrizzato(endpoint):
    print(endpoint)
    assert requests.get(endpoint).status_code == 200

但这不起作用,因为@parametrize 不会“看到”我想用来参数化它的夹具。我读了很多文章,但我无法理解我是否做错了什么,或者我无法参数化从夹具读取数据。有人可以再帮我解释一下吗?我读了

【问题讨论】:

    标签: pytest fixtures


    【解决方案1】:

    正如here 所讨论的那样,你不能。

    你可以使用a custom test generator

    【讨论】:

      猜你喜欢
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多