文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么用pytest解读fixture有效性及跨文件共享fixtures

2023-06-30 18:22

关注

这篇文章主要介绍“怎么用pytest解读fixture有效性及跨文件共享fixtures”,在日常操作中,相信很多人在怎么用pytest解读fixture有效性及跨文件共享fixtures问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用pytest解读fixture有效性及跨文件共享fixtures”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

fixture有效性及跨文件共享fixtures

一、fixture有效性

fixture有效性,说白了就是fixture函数只有在它定义的使用范围内,才可以被请求到。比如,在类里面定义了一个fixture,
那么就只能是这个类中的测试函数才可以请求。但是,如果一个fixture定义的范围是整个模块,那么这个模块下的每个测试函数都可以去请求。

这里还有另一个影响fixture有效性的参数autouse=True,默认为False,等于True的话会在其他fixture之前先执行该fixture,后面有需要另起一篇,这里简短带过。

另外,一个fixture函数还可以请求任何其他的fixture函数。不管被请求的那个fixture函数在哪里定义,只要测试函数请求了它们,fixture函数就可以。

看示例代码(为了更直观的看效果,在官方代码基础上我加了几个fixture函数的print):

#  content of test_module1.py import pytest  @pytest.fixturedef order():    print("\n运行fixture函数-order")    return []  @pytest.fixturedef outer(order, inner):    print("运行fixture函数-outer")    order.append("outer")  class TestOne:    @pytest.fixture    def inner(self, order):        print("运行TestOne下的fixture-inner")        order.append("one")     def test_order(self, order, outer):        assert order == ["one", "outer"]  class TestTwo:    @pytest.fixture    def inner(self, order):        print("运行TestTwo下的fixture-inner")        order.append("two")     def test_order(self, order, outer):        assert order == ["two", "outer"]

注意:

现在我只运行类TestOne,看运行结果:

test_module1.py 运行fixture函数-order运行TestOne下的fixture-inner运行fixture函数-outer.                                                        [100%] ============================== 1 passed in 0.01s ==============================Process finished with exit code 0

说明测试函数里的断言通过。测试函数执行的时候,外部outer请求的innerTestOne下的。
虽然TestOne类下的inner,只能作用于TestOne下的测试函数。但是,由于测试函数请求了
外部的outer,所以,外部的outer也就可以请到内部的inner

官方还给出一个示意图,可以结合着上述的思路,理解一下。

怎么用pytest解读fixture有效性及跨文件共享fixtures

注意,fixture定义的范围与它将被实例化的顺序无关:实例化顺序由调用逻辑强制执行(可以参考这篇)。

二、跨文件共享fixtures

如果你把fixture函数放到conftest.py文件中,那么在这个文件所在的整个目录下,都可以直接请求里面的fixture,不需要导入。

在实际场景中,我们的测试目录或者包可能有多层的嵌套,这种情况下,每个目录都可以有一个自己的conftest文件。
比如,像这样:

怎么用pytest解读fixture有效性及跨文件共享fixtures


各层级里的内容是这样的:

tests/    __init__.py     conftest.py        # content of tests/conftest.py        import pytest         @pytest.fixture        def order():            return []         @pytest.fixture        def top(order, innermost):            order.append("top")     test_top.py        # content of tests/test_top.py        import pytest         @pytest.fixture        def innermost(order):            order.append("innermost top")         def test_order(order, top):            assert order == ["innermost top", "top"]     subpackage/        __init__.py         conftest.py            # content of tests/subpackage/conftest.py            import pytest             @pytest.fixture            def mid(order):                order.append("mid subpackage")         test_subpackage.py            # content of tests/subpackage/test_subpackage.py            import pytest             @pytest.fixture            def innermost(order, mid):                order.append("innermost subpackage")             def test_order(order, top):                assert order == ["mid subpackage", "innermost subpackage", "top"]

同样的,这里也有一张作用域边界图帮助理解。

怎么用pytest解读fixture有效性及跨文件共享fixtures

知识点:

其实对于上述,按照我的白话来说,想用conftest里的fixture函数,你只能用同层级或者上层级的。但是上级里的其他兄弟目录或者包,以及他们的下层级的conftest,你是不能用的。

到此,关于“怎么用pytest解读fixture有效性及跨文件共享fixtures”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯