pytest-@parametrize-我可以使用夹具提供的数据给@parametrize测试吗?

问题描述 投票:0回答:1

使用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个回答
0
投票

正如您所讨论的here,不能。

您可以使用a custom test generator

© www.soinside.com 2019 - 2024. All rights reserved.