• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
测试界的吴彦祖
帮助1

学新通

6、带返回值的Fixture

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

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

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

示例:

  1.  
    """
  2.  
    1.学习目标
  3.  
    掌握带返回值的fixture
  4.  
    2.操作步骤
  5.  
    2.1 编写带返回值fixture
  6.  
    2.2 使用测试用例调用
  7.  
    3.需求
  8.  
    """
  9.  
    import pytest
  10.  
     
  11.  
     
  12.  
    # 编写fixture
  13.  
    @pytest.fixture()
  14.  
    def data():
  15.  
    print("准备好的测试数据")
  16.  
    return 3 # 返回数据
  17.  
     
  18.  
     
  19.  
    def test_data(data):
  20.  
    print("执行用例步骤")
  21.  
    print(f"得到参数{data}") # 可以使用在用例步骤中
  22.  
    assert data == 3 # 使用在断言中
  23.  
     
  24.  
    """
  25.  
    执行结果:
  26.  
     
  27.  
    test_01.py::test_data 准备好的测试数据
  28.  
    执行用例步骤
  29.  
    得到参数3
  30.  
    PASSED
  31.  
    """
学新通

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

7、Fixture实现参数化

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

(1)params参数的使用

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

示例:

  1.  
    """
  2.  
    1.学习目标
  3.  
    掌握带参数化fixture编写
  4.  
    2.操作步骤
  5.  
    @pytest.fixture(params=[列表格式数据])
  6.  
    request是pytest中内置关键字
  7.  
     
  8.  
    """
  9.  
    import pytest
  10.  
     
  11.  
    # 编写fixture,带参数
  12.  
    data = [666, 888, 1000]
  13.  
     
  14.  
    # request会接收到params=data的参数
  15.  
    # 然后request.param(固定写法)每次传递一个参数
  16.  
    @pytest.fixture(params=data)
  17.  
    def need_data(request):
  18.  
    return request.param
  19.  
     
  20.  
     
  21.  
    def test_data(need_data):
  22.  
    print(f"测试数据:{need_data}")
  23.  
    assert 666 == need_data
  24.  
     
  25.  
    if __name__ == '__main__':
  26.  
    pytest.main()
  27.  
     
  28.  
    """
  29.  
    test_01.py::test_data[666] 测试数据:666
  30.  
    PASSED
  31.  
    test_01.py::test_data[888] 测试数据:888
  32.  
    FAILED
  33.  
    test_01.py::test_data[1000] 测试数据:1000
  34.  
    FAILED
  35.  
    """
学新通

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

(2)进阶使用

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

  1.  
    """
  2.  
    1.学习目标
  3.  
    掌握带参数化fixture编写
  4.  
    2.操作步骤
  5.  
    @pytest.fixture(params=[列表格式数据])
  6.  
    request是pytest中内置关键字
  7.  
    3.需求
  8.  
    4.总结
  9.  
    1.pytest fixture 主要是用来完成测试用例执行前后操作
  10.  
    例如:测试前后对数据库连接/断开;打开/关闭浏览器APP
  11.  
    2.fixture还可以用来准备测试数据
  12.  
    带参数fixture
  13.  
    有返回值fixture (在实际工作中返回数据比较灵活,推荐使用)
  14.  
    3.fixture中的参数
  15.  
    scope: 确定fixture作用范围 默认function,class,module,session
  16.  
    autouse:当值true时,相当于setup
  17.  
    name: 对fixture重命名
  18.  
    """
  19.  
    import pytest
  20.  
     
  21.  
     
  22.  
    # 编写fixture,带参数
  23.  
    @pytest.fixture(params=[("孙悟空", 666), ("猪八戒", 777), ("沙和尚", 888)])
  24.  
    def need_data(request):
  25.  
    return request.param
  26.  
     
  27.  
     
  28.  
    def test_data(need_data):
  29.  
    print(f"测试人物:{need_data[0]}")
  30.  
    print(f"测试分数:{need_data[1]}")
  31.  
     
  32.  
     
  33.  
     
  34.  
    if __name__ == '__main__':
  35.  
    pytest.main()
  36.  
     
  37.  
    """
  38.  
    执行结果:
  39.  
     
  40.  
    测试人物:孙悟空
  41.  
    测试分数:666
  42.  
    PASSED测试人物:猪八戒
  43.  
    测试分数:777
  44.  
    PASSED测试人物:沙和尚
  45.  
    测试分数:888
  46.  
    PASSED
  47.  
    """
学新通

总结: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()装饰器作用一样。

示例:

  1.  
    import pytest
  2.  
     
  3.  
     
  4.  
    # 步骤1
  5.  
    @pytest.fixture()
  6.  
    def login():
  7.  
    print("打开APP")
  8.  
    print("输入账号,密码,进行登录")
  9.  
    yield # 当用例执行完成后,执行yield后的代码
  10.  
    print("关闭APP")
  11.  
     
  12.  
    # 方式一:
  13.  
    def test_add_cart(login):
  14.  
    print("添加购物车--需要登录")
  15.  
     
  16.  
     
  17.  
    # 方式二:就是把fixture方法传入usefixtures装饰器中
  18.  
    @pytest.mark.usefixtures("login")
  19.  
    def test_add_address(): #
  20.  
    print("添加收货地址--需要登录")
  21.  
     
  22.  
     
  23.  
    if __name__ == '__main__':
  24.  
    pytest.main()
  25.  
     
  26.  
    """
  27.  
    执行结果:
  28.  
     
  29.  
    test_01.py::test_add_cart 打开APP
  30.  
    输入账号,密码,进行登录
  31.  
    添加购物车--需要登录
  32.  
    PASSED关闭APP
  33.  
     
  34.  
    test_01.py::test_add_address 打开APP
  35.  
    输入账号,密码,进行登录
  36.  
    添加收货地址--需要登录
  37.  
    PASSED关闭APP
  38.  
    """
学新通

 END绵薄之力

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

学新通

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

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

软件测试面试小程序

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

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

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

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

学新通

获取方式 :

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggahkf
系列文章
更多 icon
同类精品
更多 icon
继续加载