• pytest系列(四)


    pytest 的 fixture 有很多用法,本文在上一篇的文章继续补充 fixture 的使用。

    上一篇文章地址:http://testingpai.com/article/1603683663384

    本文关于 fixture 的内容如下:

    1. fixture 的 autouse 参数
    2. session 和 module 级别的 fixture

    1、fixture 的 autouse 参数

    pytest 当中的 fixture, 默认情况下在定义好之后,需要测试用例/测试类主动请求使用,才会执行。

    但是它有一个参数叫做 autouse,默认是 False。

    关闭 fixture 的自动调用/自动执行功能。

    如果设置 autouse=True,则表示这个 fixture 在它的作用域范围内都会自动化执行。

    分为 2 种情况,接下来举例说明。

    第 1 种情况:当定义的 fixture 在测试类内部时

    如果 fixture 设置了 autouse=True,只会在测试类类内部生效。测试类以外的用例不受影响。

    定义一个 test_pytest-autouse.py,定义一个 TestDemo 类。

    在其中定义 2 个 fixture,一个设置了 autouse=True,另外一个使用默认值 False

    执行结果:

    第 2 种情况,在 conftest.py 当中的 fixture 设置 autouse=True

    conftest.py 能影响到所有测试类/测试用例都会执行(依据 fixture 的作用域决定在哪个范围内执行)。

    有如下的目录结构:

    测试用例文件(test_autouse1.py,test_autouse2.py)当中,并没有使用@pytest.mark.usefixture("func_fix")来主动请求 fixture.

    conftest.py 文件中的内容如下:

    名为 func_fix 的 fixture 设置了 autouse=True,它的作用域为 function, 那么

    在 pytest20210301 包下的每一个测试用例,在执行用例之前都会执行它的前置准备动作,在执行用例之后都会执行它的后置清理动作。

    执行 main.py(收集用例并执行)文件的结果如下:

    基于以上情况,一般 function、class、module 级别的 fixture,都不会去开启 autouse=True

    不同的测试用例/测试类,对于前置准备工作和后置清理工作的需求并不完全一样。

    如果开启了 autouse=True, 那么不管测试用例/测试类是否需要,都会去执行。

    让测试用例/测试类根据实际需求主动来请求使用 fixture 才是正确之道。

    2、session 和 module 级别的 fixture

    pytest 的 fixture 除了 function 和 class 以外,还有 session 和 module 级别。

    session 级别的 fixture

    这里的 session 是指测试会话。

    它指的是:从 pytest 开始收集用例,到执行用例完成的整个过程,为一次会话。

    比如收集到了 100 个测试用例要执行,那么 session 夹具夹的就是这 100 个用例。

    比如收集到了 30 个测试用例要执行,那么 session 夹具夹的就是这 30 个用例。

    由于它在所有用例执行的过程中,只执行一次。

    如果定义了 session 级别的 fixture,那说明你就是需要执行它的。

    所以它是可以设置 autouse=True 的。

    我们在做自动化测试的时候,如果有些前置准备工作是为整个测试会话做的,那么可以定义 session 级别的,比如清理/创建一些文件等。

    还是以上面的用例结构为例,在 conftest.py 当中添加 session 级别的 fixture,并设置为 autouse=True:

    执行结果如下:

    module 级别的 fixture

    module 是指测试 py 文件,夹具夹的是整个 test_*.py 文件里的测试用例。

    在 test_*.py 里,哪一行代码调用了 module 级别的 fixture,那么夹的就是那行代码之后的所有测试用例。

    举例来说明。还是以上面的用例结构为例,在 conftest.py 当中添加 module 级别的 fixture:

    在 test_autouse2.py 当中,调用 module 级别的 fixture,但并未在第一个用例前调用。

    执行结果如下:

    本文就介绍到了,pytest 的 fixture 还有其它的玩法,敬请期待下一篇。

    *******请大家尊重原创,如要转载,请注明出处:转载自:https://www.cnblogs.com/Simple-Small,谢谢!!*******
    *******有任何疑问,欢迎加微:qd20150815 (加时请备注:博客园-简)*******
  • 相关阅读:
    进程控制(二)
    进程控制(一)
    python的signal
    python的logging模块
    python守护进程
    C语言关键字、标识符和注释
    青春代码
    冒泡排序 js
    数组
    js 运算符
  • 原文地址:https://www.cnblogs.com/Simple-Small/p/14464878.html
Copyright © 2020-2023  润新知