美文网首页pytest
『德不孤』Pytest框架 — 11.Fixture装饰器的使用

『德不孤』Pytest框架 — 11.Fixture装饰器的使用

作者: 繁华似锦Fighting | 来源:发表于2021-02-25 09:21 被阅读0次

    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()函数灵活多了。

    相关文章

      网友评论

        本文标题:『德不孤』Pytest框架 — 11.Fixture装饰器的使用

        本文链接:https://www.haomeiwen.com/subject/kuxytltx.html