Python 用pytest参数化测试

Python 用pytest参数化测试,python,pytest,fixtures,parameterized-tests,Python,Pytest,Fixtures,Parameterized Tests,我正在学习pyest的参数化测试。接下来,我给出了一个简单的例子: 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

我正在学习pyest的参数化测试。接下来,我给出了一个简单的例子:

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(请求):


是什么导致了这个错误?我如何修复它?

fixture的目标是将对象传递给测试用例,但是您制作的fixture不会返回或产生任何结果

然后我不确定是否可以将对象传递给UnitTestCase方法,我认为这可能会与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
编辑:


事实上:

我通常使用
@pytest.mark.parametrise('request',['foo','bar'))
。它不能回答您的问题,但可能会起到快速修复的作用(其中,
request
是参数的名称)@Artyer谢谢您的建议。我链接的文档没有这个,所以我仍然有兴趣了解我做错了什么。我认为问题就像错误中提到的一样,您没有定义参数,正如@Artyer在他的示例中所说,他命名“请求”,然后传递值。在代码中,您将请求参数传递给foo函数,但由于没有在fixture@GenaroMorales我的示例与中的文档中给出的示例有何不同?使用autouse意味着,如果您删除了要使用的夹具,则类中的所有测试方法都将使用该夹具fixture仅在具有request参数的方法中,并且该方法将通过我在pytest中重写的unittest测试。谢谢你的链接,这促使我走这个方向。