【发布时间】:2018-03-06 02:53:27
【问题描述】:
pytest 新手...
我在 conftest.py 中有以下内容,用于从命令行收集团队参数,并读入 yaml 配置文件:
import pytest
import yaml
def pytest_addoption(parser):
parser.addoption(
'--team',
action='store',
)
@pytest.fixture
def team(request):
return request.config.getoption('--team')
@pytest.fixture
def conf(request):
with open('config.yml', 'r') as f:
conf = yaml.load(f.read())
return conf
我想对 conf[team]['players'](列表)中的每个玩家进行测试。我可以在 test_players.py 中这样做:
def test_players(team, conf):
players = conf[team]['players']
for p in players:
assert p == something
这种方法很有效,因为它迭代了玩家,但整个事情都被视为一个单独的测试。如果有任何失败,整个测试将被视为失败。我希望对每个玩家进行单独测试。
如果我手动放入播放器,我可以让它工作:
import pytest
class Test_Player():
@pytest.mark.parametrize(
'player', [
'player1',
'player2',
'player3',
],
)
def test_player(self, player):
assert player == something
所以我的问题是我不知道如何将 conf[team] 传递给 pytest.mark.parametrize。我试过这些,但在这两种情况下它都抱怨没有定义 conf。
import pytest
class Test_Player():
@pytest.mark.parametrize(
'player', conf[team]['players'],
)
def test_player(self, player):
assert player == something
和
import pytest
class Test_Player(team, conf):
@pytest.mark.parametrize(
'player', conf[team]['players'],
)
def test_player(self, player):
assert player == something
我在这里错过了什么?
【问题讨论】: