【发布时间】: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 不会“看到”我想用来参数化它的夹具。我读了很多文章,但我无法理解我是否做错了什么,或者我无法参数化从夹具读取数据。有人可以再帮我解释一下吗?我读了
【问题讨论】: