前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >测试之路 pytest接口自动化框架-fixture与conftest

测试之路 pytest接口自动化框架-fixture与conftest

作者头像
歪小王
发布2022-12-12 16:38:48
7090
发布2022-12-12 16:38:48
举报

哈喽,大家好,我是小王~本期内容说说pytest中的工厂函数。说完本期内容,pytest基础使用就告一段落。下期就开始围绕封装思想展开细说。好了,废话少说,开整。

01 前言

上期内容说到了pytest装饰器中的跳过、预期失败、以及数据参数化;还有分布式执行的内容。其中数据参数化,更是在日常工作中,必用到的一个点。

那么本期内容,就来说pytest比较有意思的一个函数。工厂函数。也可以叫它夹具--fixture函数

fixture函数的效果与setup、teardown效果类似。setup、teardown应用于在模块内部。可以是类、可以是方法。但是不能跨模块使用。fixture则可以应用于每个模块中。

02 fixture

使用方式:

fixture是通过pytest中的pytest.fixture()装饰器来标记工厂函数。在函数中,用yield来标记前置处理与后置处理,yield前的代码表示前置处理,yield后的代码表示后置处理。

代码语言:javascript
复制
import pytest
class TestFixture:
    @pytest.fixture()
    def be(self):
        print('be') 
        # 如果需要使用后置方法。需要增加一个yield关键字。而后在关键字后面写入后置代码
        # 效果类似teardown
        yield
        print('退出')   
    # 方法1方法名的括号中。添加上工厂函数名即可
    def test_login(self, be):
        print('login1')
    # 方法2 @pytest.mark.usefixtures('工厂函数名')
    @pytest.mark.usefixtures('be')
    def test_login2(self):
        print('login2')

参数说明:

scope:标记fixture的作用域

  • function:在函数或方法运行时执行fixture函数的功能 默认作用域
  • class:在类运行时调用一次。
  • module:在一个模块(一个py文件为一个模块)被运行时,执行一次fixture
  • package:当前被使用fixture的文件所在的包,执行一次fixture
  • session:当前被使用fixture的文件所在的整个项目目录,执行一次fixture

ids:当使用参数化时,给每一个参数的值一个变量名(用处不大)

params:一个可选的参数列表,它将导致对夹具函数和所有使用它的测试的多次调用。使用参数是

特别说明:ids与params结合使用。

name:给fixture函数起一个别名

autouse:自动执行工厂函数 。默认false

  • 在修饰工厂函数时,将autouse参数设置为True;@pytest.fixture(autouse = True)

作用域:

  • 在修饰工厂函数时,添加参数scope;@pytest.fixture(autouse = True,scope = ‘class’)
    • scope = ‘class’ 为类函数
    • 需要指定某一个类使用工厂函数的话。就可以使用usefixtures的装饰器装饰该类
代码语言:javascript
复制
@pytest.mark.usefixtures('fixure')
class Test2():
    def test01(self, fixure):
        print('第二个类中的函数')

03 conftest.py

conftest.py是夹具的文件。可以将所有夹具方法,写入这个文件中。当fixture放在这个文件中后,结合fixture装饰器中的scope参数,可以明确夹具执行的时机以及覆盖的作用域。

conftest.py也有他自己的作用域。如果是根目录。则作用域是属于根目录的。如果是模块内。那作用域就在模块内。

结合这个特性。可以根据不同的业务场景。定制属于自己的夹具方法。

04 实际应用

应用场景1:清理日志,默认保留30天。在每次脚本运行前检查日志。超过30天的文件清空。

应用场景2:在某条业务线中,每个接口都需要登录才能进行后续验证。在该业务线的模块下,定义夹具,调用login接口。生成所用的数据并存入临时文件中,以便后续方法调用。

如上两个场景是小王在近期工作中应用到夹具的场景。还是非常好用的

05 结语


好了。本期内容到这里了。大佬们下期见~小王先退下了

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 歪小王的测试成长之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档