用pytest参数化测试

时间:2017-08-22 19:35:51

标签: python pytest fixtures parameterized-tests

我正在学习有关pyest的参数化测试。在关注the relevant pytest documentation之后,我想出了这个简单的例子:

import unittest

import pytest


@pytest.fixture(autouse=True, params=['foo', 'bar'])
def foo(request):
    print('fixture')
    print(request.param)


class Foo(unittest.TestCase):
    def setUp(self):
        print('unittest setUp()')

    def test(self):
        print('test')

这会出现以下错误:

Failed: The requested fixture has no parameter defined for the current test.
E               
E               Requested fixture 'foo' defined in:
E               tests/fixture.py:7

第7行是def foo(request):

导致此错误的原因是什么?如何解决?

1 个答案:

答案 0 :(得分:1)

灯具的目标是将对象传递给测试用例,但是你制作的灯具不会返回或产生任何东西。

然后我不确定你可以将对象传递给unittest TestCase方法,我认为它可能会与self参数产生一些冲突。

另一方面,它可以使用一个简单的功能:

@pytest.fixture(autouse=True, params=['foo', 'bar'])
def foo(request):
    print('fixture')
    print(request.param)
    yield request.param

# class Foo(unittest.TestCase):
#     def setUp(self):
#         print('unittest setUp()')
# 
#     def _test(self):
#         print('test')

def test_fixture(foo):
    assert foo == 'foo'

>>>  1 failed, 1 passed in 0.05 seconds
# test 1 run with foo : OK
# test 2 run with bar : FAILED

编辑:

确实:Why cant unittest.TestCases see my py.test fixtures?