【问题标题】:Parametrizing Pytest fixtures with unique parameters参数化具有独特参数的 Pytest 夹具
【发布时间】:2022-12-08 07:22:59
【问题描述】:

我正在尝试在多个灯具上运行同一组测试,并让灯具通过多个不同的输入运行,每个灯具的输入都是唯一的。

我当前的代码减少到与此类似的东西

FN_A_FILES = ['ab/x.txt','ab/y.txt','ab/z.txt']
FN_B_FILES = ['abcd/x.txt','abcd/y.txt','abcd/z.txt']

@pytest.fixture
def foo(request, fn_a, fn_b):
    return request.getfixturevalue(request.param)

@pytest.fixture(scope='session', params=FN_A_FILES)
def fn_a(request):
    file_path = request.param[:3]
    file_name = request.param[3:]
    return [file_path, file_name]

@pytest.fixture(scope='session', params=FN_B_FILES)
def fn_b(request):
    file_path = request.param[:5]
    file_name = request.param[5:]
    return [file_path, file_name]

@pytest.mark.parametrize('foo', ['fn_a', 'fn_b'], indirect=True)
def test_foo(foo):
    assert '/' in foo[0]
    assert '.txt' in foo[1]

我想要发生的是 test_foo 测试

fn_a('ab/x.txt')
fn_a('ab/y.txt')
fn_a('ab/z.txt')
fn_b('abcd/x.txt')
fn_b('abcd/y.txt')
fn_b('abcd/z.txt')

就目前而言,上面的代码似乎正在运行比必要的更多的测试,所以我认为它正在找到(FN_A_FILES,FN_B_FILES)的每个排列,然后在上面找到一些;我不能完全理解我脑子里的数字。

在我的非抽象代码中,我有三个文件列表,两个每个有 3 个文件,一个有 1 个文件。我有三个固定装置(每个列表一个)和一个调用固定装置的 test_function。以某种方式运行它会增加多达 27 个不同的测试运行,而我只想运行 7 个(两个灯具具有不同的 3 个输入集,一个灯具具有 1 个输入)。

有谁知道如何设置它以便只运行 6 个测试?

【问题讨论】:

    标签: python-3.x pytest


    【解决方案1】:

    我会避开固定装置来实现您正在寻找的东西,而是使用 yield 来采用简单的 data driven 方法来参数化测试,如下所示:

    import pytest
    
    FN_A_FILES = ['ab/x.txt','ab/y.txt','ab/z.txt']
    FN_B_FILES = ['abcd/x.txt','abcd/y.txt','abcd/z.txt']
    
    def test_data():
        for entry in FN_A_FILES:
            yield [entry[:3], entry[3:]]
        for entry in FN_B_FILES:
            yield [entry[:5], entry[5:]]
    
    def bar(q):
        return f"{q[0]}-{q[1]}"
        
    
    @pytest.mark.parametrize('foo', test_data(), ids=bar)
    def test_foo(foo):
        assert '/' in foo[0]
        assert '.txt' in foo[1]
    

    ids=bar 用于将测试名称动态设置为测试数据中的文件名。 运行此测试会创建以下测试:

    test_foo[ab/-x.txt]
    test_foo[ab/-y.txt]
    test_foo[ab/-z.txt]
    test_foo[abcd/-x.txt]
    test_foo[abcd/-y.txt]
    test_foo[abcd/-z.txt]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 2022-01-21
      • 1970-01-01
      相关资源
      最近更新 更多