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

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

6、带返回值的Fixture

上面例子是带返回值并且还要实现teardown()后置函数的Fixture写法。

这里就是单纯的说明带返回值的Fixture。

我们可以选择让Fixture返回我们需要的东西,如果Fixture需要配置一些数据,读个文件,或者连接一个数据库,那么你可以让Fixture返回这些数据或资源。

示例:

"""
1.学习目标
    掌握带返回值的fixture
2.操作步骤
    2.1 编写带返回值fixture
    2.2 使用测试用例调用
3.需求
"""
import pytest


# 编写fixture
@pytest.fixture()
def data():
    print("准备好的测试数据")
    return 3 # 返回数据


def test_data(data):
    print("执行用例步骤")
    print(f"得到参数{data}")  # 可以使用在用例步骤中
    assert data == 3  # 使用在断言中
    
"""
执行结果:

test_01.py::test_data 准备好的测试数据
执行用例步骤
得到参数3
PASSED
"""

说明:Fixture装饰类中,也可以实现数据的准备。 

7、Fixture实现参数化

Fixture修饰的函数可以通过添加params参数来实现参数化。(实际工作中,不常用此方式)

(1)params参数的使用

request代表Fixture的调用状态,request.param作为返回值供测试使用。

示例:

"""
1.学习目标
    掌握带参数化fixture编写
2.操作步骤
    @pytest.fixture(params=[列表格式数据])
    request是pytest中内置关键字

"""
import pytest

# 编写fixture,带参数
data = [666, 888, 1000]

# request会接收到params=data的参数
# 然后request.param(固定写法)每次传递一个参数
@pytest.fixture(params=data)
def need_data(request):
    return request.param


def test_data(need_data):
    print(f"测试数据:{need_data}")
    assert 666 == need_data

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

"""
test_01.py::test_data[666] 测试数据:666
PASSED
test_01.py::test_data[888] 测试数据:888
FAILED
test_01.py::test_data[1000] 测试数据:1000
FAILED
"""

说明:上面的例子,通过assert简单判断下拿到的request.param值,有没有在原来的参数列表中。实际上就相当于遍历了一遍参数列表,们可以看到测试方法被调用了3次。

(2)进阶使用

参数是一个元组列表格式的数据

"""
1.学习目标
    掌握带参数化fixture编写
2.操作步骤
    @pytest.fixture(params=[列表格式数据])
    request是pytest中内置关键字
3.需求
4.总结
    1.pytest fixture 主要是用来完成测试用例执行前后操作
        例如:测试前后对数据库连接/断开;打开/关闭浏览器APP
    2.fixture还可以用来准备测试数据
        带参数fixture
        有返回值fixture  (在实际工作中返回数据比较灵活,推荐使用)
    3.fixture中的参数
        scope: 确定fixture作用范围 默认function,class,module,session
        autouse:当值true时,相当于setup
        name: 对fixture重命名
"""
import pytest


# 编写fixture,带参数
@pytest.fixture(params=[("孙悟空", 666), ("猪八戒", 777), ("沙和尚", 888)])
def need_data(request):
    return request.param


def test_data(need_data):
    print(f"测试人物:{need_data[0]}")
    print(f"测试分数:{need_data[1]}")



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

"""
执行结果:

测试人物:孙悟空
测试分数:666
PASSED测试人物:猪八戒
测试分数:777
PASSED测试人物:沙和尚
测试分数:888
PASSED
"""

总结:params参数支持的格式

  • 列表[ ]
  • 元组( )
  • 元素列表[(),(),()]
  • 字典列表[{},{},{}],提示:只能取{}整体。
  • 字典元祖({},{},{}),提示:只能取{}整体。

8、@pytest.mark.usefixtures()的使用

@pytest.mark.usefixtures("fixturename")装饰类也是一种调用Fixture的方式。

@pytest.mark.usefixtures("fixturename")装饰类可以装饰模块、类、函数、方法。

usefixtures与传fixture区别:

如果Fixture有返回值,则不能用`@pytest.mark.usefixtures("fixturename")装饰器修饰用例。

如果Fixture没有返回值,用@pytest.mark.usefixtures("fixturename")装饰器和`@pytest.fixture()装饰器作用一样。

示例:

import pytest


# 步骤1
@pytest.fixture()
def login():
    print("打开APP")
    print("输入账号,密码,进行登录")
    yield  # 当用例执行完成后,执行yield后的代码
    print("关闭APP")

# 方式一:
def test_add_cart(login):
    print("添加购物车--需要登录")


# 方式二:就是把fixture方法传入usefixtures装饰器中
@pytest.mark.usefixtures("login")
def test_add_address():  #
    print("添加收货地址--需要登录")


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

"""
执行结果:

test_01.py::test_add_cart 打开APP
输入账号,密码,进行登录
添加购物车--需要登录
PASSED关闭APP

test_01.py::test_add_address 打开APP
输入账号,密码,进行登录
添加收货地址--需要登录
PASSED关闭APP
"""

 END绵薄之力

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

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

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

软件测试面试小程序

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

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

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

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

获取方式 :

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值