正如其文档所说,pytest 接受夹具作为函数参数。然而,这与几乎所有语言中参数名称不应影响函数行为的约定有些矛盾。例如:这有效:import pytest@pytest.fixture()def name(): return 'foo'def test_me(name): assert name == 'foo'但这不会:import pytest@pytest.fixture()def name(): return 'foo'def test_me(nam): assert nam == 'foo'我认为这里必须有一些内省,需要测试函数参数是有效的装置。我在这方面正确吗?除了fixtures,还有其他神奇的参数名称让我感到困惑。其中之一是request:import pytest@pytest.fixture(params=['foo', 'bar'])def name(request): return request.paramdef test_me(name): assert name == 'foo'无需阅读其文档,您似乎可以重命名request为另一个名称,例如req:import pytest@pytest.fixture(params=['foo', 'bar'])def name(req): return req.paramdef test_me(name): assert name == 'foo'但是然后运行测试会抱怨req找不到夹具。这让我更加困惑,因为列出的可用装置不包括request. 我不确定request在这里调用夹具是否合适,但错误消息自相矛盾:未找到 E 夹具“req”> 可用设备:缓存、capfd、capfdbinary、caplog、capsys、capsysbinary、doctest_namespace、monkeypatch、名称、pytestconfig、record_xml_attribute、record_xml_property、recwarn、tmpdir、tmpdir_factory、worker_id> 使用 'pytest --fixtures [testpath]' 寻求帮助。那么在使用 pytest 时我必须注意多少这样的魔法名称才不会陷入陷阱?
1 回答

慕哥6287543
TA贡献1831条经验 获得超10个赞
是的,Py.test 注入了一点参数名称自省魔法来保持你的测试用例简洁。
除了您可用的任何装置(正如您发现的那样pytest --fixtures
)之外,我确实认为这request
是唯一的附加魔术参数(当然,除非您使用,例如@pytest.mark.parametrize('foo', (...))
,在这种情况下foo
是标记的测试用例或装置的魔术参数, 等等。)。
顺便说一句,我认为最好不要将 Py.testtest_
函数视为常规的旧函数,因为 Py.test 不会直接调用它们。
添加回答
举报
0/150
提交
取消