从参数化测试中访问夹具(例如,capsys)

时间:2017-02-22 12:39:52

标签: python pytest

我在参数化测试中无法访问灯具(在本例中为capsys)。目前我正在使用虚设夹具来完成这项工作:

import pytest

@pytest.fixture
def params(request):
    from collections import namedtuple
    return namedtuple('Params', 'input output')(*request.param)

@pytest.mark.parametrize('params', [
    ('a', '1a\n'),
    ('b', '1b\n'),
], indirect=True)
def test_output(capsys, params):
    print('1' + params.input)
    out, err = capsys.readouterr()
    assert out == params.output

有没有办法在没有params灯具的情况下重写此代码?

1 个答案:

答案 0 :(得分:1)

您只需删除indirect参数:

即可
import pytest

@pytest.mark.parametrize('params', [
    ('a', '1a\n'),
    ('b', '1b\n'),
])
def test_output(capsys, params):
    inp, expected = params
    print('1' + inp)
    out, err = capsys.readouterr()
    assert out == expected

但更好的方法是使parametrize直接通过名称传递参数:

import pytest

@pytest.mark.parametrize('inp, expected', [
    ('a', '1a\n'),
    ('b', '1b\n'),
])
def test_output(capsys, inp, expected):
    print('1' + inp)
    out, err = capsys.readouterr()
    assert out == expected