python-3.x 使用unittest框架时间接进行pytest参数化

f0ofjuux  于 2023-03-22  发布在  Python
关注(0)|答案(1)|浏览(156)

我同时使用了python unittest和pytest框架,我遇到了一个例子,我有一个fixture生成签名的头标记,我试图在本地模拟它,所以我想创建一个fixture,当测试运行时,我可以传递一个有效负载到它,但是,看起来我不能同时使用pytest和unittest。

pytest.fixture
def gen_headers(value):
  return "hey bud, you got a nice header!" + value["fake_head"]

class Tests(unittest.TestCase):

  @pytest.mark.parametrize("gen_headers", [{"fake_head": "hi :)"}], indirect=True)
    def test_func(self, gen_headers):
        do_ya_thing = api.request("get", headers=gen_headers)
        ...

测试失败TypeError: ... missing 1 required positional argument: ...
我尝试过使用参数化的python包,但是我认为它不支持在运行时(测试时)向fixture传递自定义输入,而这正是我希望做的,因为在gen_headers中返回的内容可能会改变。

aelbi1ox

aelbi1ox1#

你不能轻易地将参数化的fixture和unittest结合起来,有什么理由不直接使用pytest呢?
单独使用pytest,您可以使用request fixture轻松地访问参数。

import pytest

@pytest.fixture
def gen_headers(request):
    return "hey bud, you got a nice header!" + request.param["fake_head"]

class TestWithFixtures:
    @pytest.mark.parametrize(
        "gen_headers",
        [
            {"fake_head": "hi :)"},
            {"fake_head": "bye :("}
        ],
        indirect=True
    )
    def test_func(self, gen_headers):
        print(gen_headers)
============================= test session starts =============================
collecting ... collected 2 items

test.py::TestWithFixtures::test_func[gen_headers0] 
test.py::TestWithFixtures::test_func[gen_headers1] 

============================== 2 passed in 0.02s ==============================

PASSED                [ 50%]hey bud, you got a nice header!hi :)
PASSED                [100%]hey bud, you got a nice header!bye :(

相关问题