繁体   English   中英

pytest 使用单元测试框架时间接参数化

[英]pytest parameterization indirectly when using unittest framework

我同时使用 python 单元测试和 pytest 框架。 我遇到了一个案例,我有一个生成签名 header 令牌的装置,我试图在本地模拟它。 所以我想创建一个夹具,我可以在测试运行时将有效负载传递给它。 但是,我似乎无法同时使用 pytest 和单元测试。

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 package,但我认为它不支持在运行时(测试时)将自定义输入传递给夹具,这正是我想要做的,因为在gen_headers中返回的东西可能会改变。

您不能轻易地将参数化装置与单元测试结合起来。 有什么理由不直接在这里使用 pytest 吗?

仅使用 pytest,您就可以使用请求夹具轻松访问参数。

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 :(

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM