为了账号安全,请及时绑定邮箱和手机立即绑定

pytest 钩子可以使用夹具吗?

pytest 钩子可以使用夹具吗?

不负相思意 2021-12-21 16:31:42
我知道夹具可以使用其他夹具,但是钩子可以使用夹具吗?我在网上搜索了很多,但没有得到任何帮助。如果我在这里做错了,有人可以指出吗?#conftest.py@pytest.fixture()def json_loader(request):       """Loads the data from given JSON file"""    def _loader(filename):        import json        with open(filename, 'r') as f:            data = json.load(f)        return data    return _loaderdef pytest_runtest_setup(item,json_loader): #hook fails to use json_loader    data = json_loader("some_file.json")     print(data)     #do something useful here with data运行时出现以下错误。pluggy.manager.PluginValidationError: 插件 'C:\some_path\conftest.py' for hook 'pytest_runtest_setup' hookimpl 定义:pytest_runtest_setup(item, json_loader) Argument(s) {'json_loader'} 在 hookimpl 中声明但找不到在钩子规范中即使我没有将 json_loader 作为 arg 传递给 pytest_runtest_setup(),我也会收到一条错误消息,指出“Fixture“json_loader”被直接调用。Fixtures 并不意味着被直接调用”
查看完整描述

2 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

似乎当前唯一支持的动态实例化夹具request的getfixturevalue方法是通过夹具,特别是方法


这在 pytest 钩子中的测试时间之前无法访问,但您可以通过自己使用夹具来完成相同的操作


这是一个(人为的)示例:


import pytest


@pytest.fixture

def load_data():

    def f(fn):

        # This is a contrived example, in reality you'd load data

        return f'data from {fn}'

    return f



TEST_DATA = None



@pytest.fixture(autouse=True)

def set_global_loaded_test_data(request):

    global TEST_DATA

    data_loader = request.getfixturevalue('load_data')

    orig, TEST_DATA = TEST_DATA, data_loader(f'{request.node.name}.txt')

    yield   

    TEST_DATA = orig



def test_foo():

    assert TEST_DATA == 'data from test_foo.txt'


查看完整回答
反对 回复 2021-12-21
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

有一种方法可以从测试中获取使用过的夹具。


#Conftest.py#


def pytest_runtest_makereport(item, call):

    if call.when == 'call':

        cif_fixture = item.funcargs["your_cool_fixture"]

        print(cif_fixture)


#test_file.py#

@pytest.fixture(scope="module")

def your_cool_fixture(request):

    return "Hi from fixture"



def test_firsttest(your_cool_fixture):

    print(your_cool_fixture)


查看完整回答
反对 回复 2021-12-21
  • 2 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信