zoukankan      html  css  js  c++  java
  • pytest文档17-fixture之autouse=True

    前言

    平常写自动化用例会写一些前置的fixture操作,用例需要用到就直接传该函数的参数名称就行了。当用例很多的时候,每次都传这个参数,会比较麻烦。
    fixture里面有个参数autouse,默认是Fasle没开启的,可以设置为True开启自动使用fixture功能,这样用例就不用每次都去传参了

    调用fixture三种方法

    • 1.函数或类里面方法直接传fixture的函数参数名称
    • 2.使用装饰器@pytest.mark.usefixtures()修饰
    • 3.autouse=True自动使用

    用例传fixture参数

    方法一:先定义start功能,用例全部传start参数,调用该功能

    # content of test_06.py
    import time
    import pytest
    
    # ** 作者:上海-悠悠 QQ交流群:588402570**
    
    @pytest.fixture(scope="function")
    def start(request):
        print('
    -----开始执行function----')
    
    
    def test_a(start):
        print("-------用例a执行-------")
    
    
    
    
    class Test_aaa():
    
        def test_01(self, start):
            print('-----------用例01--------------')
    
        def test_02(self, start):
            print('-----------用例02------------')
    
    if __name__ == "__main__":
        pytest.main(["-s", "test_06.py"])
    
    

    装饰器usefixtures

    方法二:使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例

    # content of test_07.py
    import time
    import pytest
    
    # ** 作者:上海-悠悠 QQ交流群:588402570**
    
    @pytest.fixture(scope="function")
    def start(request):
        print('
    -----开始执行function----')
    
    
    @pytest.mark.usefixtures("start")
    def test_a():
        print("-------用例a执行-------")
    
    @pytest.mark.usefixtures("start")
    class Test_aaa():
    
        def test_01(self):
            print('-----------用例01--------------')
    
        def test_02(self):
            print('-----------用例02------------')
    
    if __name__ == "__main__":
        pytest.main(["-s", "test_07.py"])
    
    

    设置autouse=True

    方法三、autouse设置为True,自动调用fixture功能

    • start设置scope为module级别,在当前.py用例模块只执行一次,autouse=True自动使用
    • open_home设置scope为function级别,每个用例前都调用一次,自动使用
    # content of test_08.py
    import time
    import pytest
    
    # ** 作者:上海-悠悠 QQ交流群:588402570**
    
    @pytest.fixture(scope="module", autouse=True)
    def start(request):
        print('
    -----开始执行moule----')
        print('module      : %s' % request.module.__name__)
        print('----------启动浏览器---------')
        yield
        print("------------结束测试 end!-----------")
    
    
    
    @pytest.fixture(scope="function", autouse=True)
    def open_home(request):
        print("function:%s 
    --------回到首页--------" % request.function.__name__)
    
    
    def test_01():
        print('-----------用例01--------------')
    
    def test_02():
        print('-----------用例02------------')
    
    if __name__ == "__main__":
        pytest.main(["-s", "test_08.py"])
    

    运行结果:

    ============================= test session starts =============================
    platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
    rootdir: D:\, inifile:
    plugins: metadata-1.7.0, html-1.19.0, allure-adaptor-1.7.10
    collected 2 items
    
    ............YOYOpeizhi	est_08.py 
    -----开始执行moule----
    module      : YOYO.peizhi.test_08
    ----------启动浏览器---------
    function:test_01 
    --------回到首页--------
    -----------用例01--------------
    .function:test_02 
    --------回到首页--------
    -----------用例02------------
    .------------结束测试-----------
    
    
    ========================== 2 passed in 0.01 seconds ===========================
    

    上面是函数去实现用例,写的class里也是一样可以的

    # content of test_09.py
    import time
    import pytest
    
    # ** 作者:上海-悠悠 QQ交流群:588402570**
    
    @pytest.fixture(scope="module", autouse=True)
    def start(request):
        print('
    -----开始执行moule----')
        print('module      : %s' % request.module.__name__)
        print('----------启动浏览器---------')
        yield
        print("------------结束测试 end!-----------")
    
    
    
    class Test_aaa():
        @pytest.fixture(scope="function", autouse=True)
        def open_home(self, request):
            print("function:%s 
    --------回到首页--------" % request.function.__name__)
    
    
        def test_01(self):
            print('-----------用例01--------------')
    
        def test_02(self):
            print('-----------用例02------------')
    
    if __name__ == "__main__":
        pytest.main(["-s", "test_09.py"])
    

    ---------------------------------pytest结合selenium自动化完整版-------------------------

    全书购买地址 https://yuedu.baidu.com/ebook/902224ab27fff705cc1755270722192e4536582b

    作者:上海-悠悠 QQ交流群:874033608

    也可以关注下我的个人公众号:yoyoketang

  • 相关阅读:
    NSDate的处理:前一天、后一天等关于时区偏移的处理以及在数据库中的使用
    《powershell 的版本号所引起的载入 FSharp 编译器问题》基本解决
    hdu 2055 An easy problem (java)
    昨天登陆页面,无法进入后台,今天攻克了
    关于ubuntu下qt编译显示Cannot connect creator comm socket /tmp/qt_temp.xxx/stub-socket的解决的方法
    (转)Struts2的拦截器
    (转)Struts2的标签库
    (转)OGNL与值栈
    (转)Struts2访问Servlet的API及......
    (转)Struts2快速入门
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/9530741.html
Copyright © 2011-2022 走看看