Pytest框架 —— Fixture装饰器的使用(一)

1302 篇文章 11 订阅
682 篇文章 4 订阅

1、Fixture装饰器的用途

  1. 做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等这些操作都可以使用Fixture来实现。

  2. 测试用例的前置条件可以使用Fixture实现,比直接使用Pytest框架的setup()teardown()函数更加灵活。

  3. Fixture是Pytest用于将测试前后进行预备,清理工作的代码分离出核心测试逻辑的一种机制!

  4. Fixture可以实现Unittest不能实现的功能,比如:Unittest中的测试用例和测试用例之间是无法传递参数和数据的,但是Fixture却可以解决这个问题。

2、Fixture参数说明

可以使用pytest.fixture()查看fixture()函数的源码和所需要的参数,同Fixture装饰器需要的参数一样。

fixture(scope="function", params=None, autouse=False, ids=None, name=None):  

说明:

  • scope:表示被@pytest.fixture()装饰器所标识方法的作用域。

    作用域有四个级别,函数function(默认),类class,模块module,包package/session

    说明:function作用域包含函数和方法。

  • params:一个可选的参数列表,用于做Fixture的参数化。

    可将数据提供给其他的Fixture,或者所有测试使用它 。

  • autouseautouse=Ture则开启自动使用Fixture功能,也是调用Fixture函数一种方法。

    Fixture装饰器会自动执行作用域范围内的所有用例的前后置。

    autouse默认值为Flase。

  • ids:一个字符串id的列表,即当使用params参数化时,给每一个值设置一个变量名。

    如果没有提供ID,params将自动生成ID 。

  • name:表示给被@pytest.fixture()装饰器修饰的方法取一个别名,调用时可以使用别名调用。

    默认为装饰器所装饰的函数名称。

3、Fixture装饰器简单应用

使用Fixture装饰器来实现部分用例的前后置

比如:我们在测试一个操作流程时,有的测试用例需要登陆,有的测试用例执行不需要用户登陆。

如果要直接使用setup_function()前置函数来实现,该文件中的所有用例执行前都需要进行用户登陆。

如下示例:

import pytest

# 函数级,前置函数
def setup_function():
    print("用户登陆")

def test_add_cart():
    print("添加购物车--需要登录")


def test_add_address():
    print("添加收货地址--需要登录")


def test_browser_goods():
    print("浏览商品--不需要登录")


if __name__ == '__main__':
    pytest.main()
    
"""
执行结果:

用户登陆
添加购物车--需要登录
PASSED用户登陆
添加收货地址--需要登录
PASSED用户登陆
浏览商品--不需要登录
PASSED
"""

我们可以使用Fixture装饰器来实现部分用例的前后置,如下示例

"""
1.学习目标
    掌握pytest  fixture定义
2.操作步骤
    1.在定义的函数前添加装饰器
        @pytest.fixture()
    2.编写函数
        @pytest.fixture()
        def 函数名():
            代码
    3.使用fixture
        在测试用例中,将上面定义的函数名称,当做参数传入到测试用例中即可
        def test_xx(函数名):
            用例步骤

"""
import pytest


# 步骤1
@pytest.fixture()
def login():  # 步骤3
    print("输入账号,密码,进行登录")


def test_add_cart(login):  # 步骤3
    print("添加购物车--需要登录")


def test_add_address(login):  # 步骤3
    print("添加收货地址--需要登录")


def test_browser_goods():
    print("浏览商品--不需要登录")


if __name__ == '__main__':
    pytest.main()

"""
执行结果:

输入账号,密码,进行登录
添加购物车--需要登录
PASSED输入账号,密码,进行登录
添加收货地址--需要登录
PASSED浏览商品--不需要登录
PASSED

只有添加购物车,添加收货地址的用例,执行了登陆操作
"""

提示:Fixture装饰器既可以实现部分用例的前后置,也可以是现实全部用例的前后置,所以比单独使用前置setup()函数和后置teardown()函数灵活多了。 

END绵薄之力

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

加入我的软件测试交流群:110685036免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

获取方式 :

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值