正如其文档所说,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.param
def test_me(name):
assert name == 'foo'
无需阅读其文档,您似乎可以重命名request为另一个名称,例如req:
import pytest
@pytest.fixture(params=['foo', 'bar'])
def name(req):
return req.param
def 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 时我必须注意多少这样的魔法名称才不会陷入陷阱?
慕哥6287543
相关分类