通常我将结果放在一个单独的装置中,该装置根据其他参数选择预期值。例子:
expected_records = {'US': {'12345': 'fizz', '54321': 'buzz'}, 'DE': ...}
@pytest.fixture
def expected_record(request):
country = request.node.funcargs['country']
number = request.node.funcargs['number']
return expected_records.get(country, dict()).get(number, None)
@pytest.mark.parametrize('country', ['US', 'DE', 'FR', 'IT'])
@pytest.mark.parametrize('number', ['12345', '54321'])
def test_correct_record_is_selected_for_number(country, number, expected_record):
record = get_record(country, number)
assert record == expected_record
然而,在实践中,数据很少被硬编码在脚本中,所以逻辑expected_record
通常是数据驱动的,例如:
@pytest.fixture
def expected_record(request):
country = request.node.funcargs['country']
number = request.node.funcargs['number']
file = pathlib.Path(request.config.rootdir, 'data', country).with_suffix('.json') # data/DE.json
data = json.loads(file.read_text()) # {12345: "fizz", 54321: "buzz"}
return data[number]