pytest框架的fixture使用

fixture特点

更加灵活–命名不受到之前的命名限定
更加智能–可以通过conftest.py实现自动寻找配置的能力
更好使用–可以通过装饰器模式来指定自己的作用范围

使用方式

fixture(scope=”function”, params=None, autouse=False, ids=None, name=None):
scope: 表示作用域 默认为function,可选择为 “class”, “module” or “session”.

params: 一个可选的参数列表,它将导致多个参数调用fixture功能和所有测试使用它
autouse: 如果为True,则为所有测试激活fixture func 可以看到它。 如果为False(默认值)则显式需要参考来激活fixture
ids: 每个字符串id的列表,每个字符串对应于params 这样他们就是测试ID的一部分。 如果没有提供ID它们将从params自动生成
name: fixture的名称。 这默认为装饰函数的名称。 如果fixture在定义它的同一模块中使用,夹具的功能名称将被请求夹具的功能arg遮蔽;
解决这个问题的一种方法是将装饰函数命名 “fixture_ “然后使用”@ pytest.fixture(name =”)””。

pytest框架的fixture使用
运行结果:
pytest框架的fixture使用
注意:方法1和方法3都是在执行前执行了fixture内容,而方法2没有执行,这就说明了插件配置的灵活性
同样的,在此基础上,我们可以针对于整个项目来进行插件设置–fixture的conftest
新建一个conftest.py 将之前的装饰器代码放进来
pytest框架的fixture使用
然后测试代码
import pytest
def test_1(login):
    print("我是test1我要登录后执行")

def test_2():
    print("我是test2,我不用登录,也能执行")

def test_3(login):
    print("我是test3,我要登录")

if __name__ == "__main__":
    pytest.main(['-vs'])

这时候,会发现conftest的执行会变为全局的内容

fixture中的yield函数

fixtrue的装饰器可以用于我们的用例的前置执行逻辑,相应的,如果我们需要在函数执行结束之后需要去做一些其他操作,那么我们也可以进行特定的操作,如yield函数,可以帮助到我们.

代码如下:

import pytest

@pytest.fixture()
def login():
    print("登录成功,账号是xiaoming")

    yield
    print("执行teardown操作")
    print("关闭浏览器" )

看一下运行结果:

pytest框架的fixture使用
总结:
yield前的代码为前置执行逻辑
yiled为分界线,后面的代码为用例结束后执行的代码逻辑
这里的调用都是直接将方法名当做参数传入的
执行流程 – 运行测试用例 –> 发现参数为方法名 –> 寻找同名的函数方法 –> 先执行同名的函数方法 –>碰到yield –> 执行测试用例 –>执行yield后续代码

思考: 如果在执行过程中出现了异常会怎么样?

代码如下:

pytest框架的fixture使用
看下运行结果:
pytest框架的fixture使用
由此可见,异常不会影响到yield的执行,会在异常结束后继续执行yield后续的代码。

; 同样,我们可以思考下,在setup出现异常的时候还会执行yield后续内容吗?

看下代码:

import pytest

@pytest.fixture()
def login():
    print("登录成功,账号是xiaoming")
    3/0

    yield
    print("执行teardown操作")
    print("关闭浏览器" )

看下运行结果:

pytest框架的fixture使用
当我们人为制造一个异常的时候,会发现,后续的yield不会继续执行了

Original: https://blog.csdn.net/weixin_43618106/article/details/126322385
Author: 扬扬扬~
Title: pytest框架的fixture使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/775042/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球