参数化pytest夹具

时间:2015-10-07 18:09:32

标签: python pytest

据我从有关pytest fixture参数化的文档中了解到 - 它使用给定的参数创建了fixture的副本,因此调用每个测试,这需要使用这个不同的副本。

我的需求有点不同。假设有一个夹具:

@pytest.fixture
def sample_foo():
    return Foo(file_path='file/path/test.json')

def test1(sample_foo):
    pass

def test2(sample_foo):
    pass

问题是,测试test1test2需要同一个类Foo的实例,但具有不同的值file_path

所以我现在这样做:

def build_foo(path):
   return Foo(file_path=path)

 def test1():
     sample_foo = build_foo('file/path/some.json')

 def test2():
     sample_foo = build_foo('file/path/another.json')

这看起来像是一点代码重复。我可以为每个文件创建一个单独的灯具,但看起来更糟糕。看起来每个测试都需要它自己的唯一文件,所以也许这可以通过查看请求夹具的测试函数的名称找出文件的名称来解决。但这并不能保证。

1 个答案:

答案 0 :(得分:4)

您需要fixture parameters

  

可以对Fixture函数进行参数化,在这种情况下,它们将被多次调用,每次执行一组依赖测试,i。即依赖于此灯具的测试。

def build_foo(path):
   return Foo(file_path=path)

@pytest.fixture(params=["file/path/some.json", "file/path/another.json"])
def file_path(request):
    return request.param

def test(file_path):    
    sample_foo = build_foo(file_path) 

也许你可以直接

def test(file_path):    
    sample_foo = Foo(file_path)