zoukankan      html  css  js  c++  java
  • pytest中fixture使用,控制使用域

    pytest中使用fixture装饰器是来固定的工厂函数,fixture函数可以在测试执行前和执行后进行必要的准备和清理工作

    1. fixture做为函数引用使用

     比如以下

    import pytest
    # fixture作为函数引用
    
    @pytest.fixture()
    def before():
        print("before执行啦。。。")
    
    #@pytest.mark.usefixtures("before")    #在每个方法前运行
    class Test_b():
        def setup(self):
            print("setup....")
        def test_a(self):
            print("test a")
        def test_b(self):
            print("test b")
    

     注释掉 pytest.mark.usefixtures("before")  执行效果

     开启 pytest.mark.usefixtures("before")  执行效果

    每个运行方法前都会打印before函数的内容

    1.1设置自动执行

    在before中设置自动执行,不用在每个类中进行执行,

    @pytest.fixture(autouse=True)
    def before():
    print("before执行啦。。。")
    class Test_b():
    def setup(self):
    print("setup....")
    def test_a(self):
    print("test a")
    def test_b(self):
    print("test b")
    执行效果是如上图

    2.做为函数使用

    @pytest.fixture
    def  param_numbenr():
        return 5
    
    
    def test_cacult(param_numbenr):
        print(param_numbenr)
        assert 5==param_numbenr

    3.设置作用域为function

    作用域:每个函数、类中的每个方法都运行一次

    @pytest.fixture(scope="function",autouse=True)
    def before():
        print("before执行啦。。。")
    
    
    class Test_b():
        def setup(self):
            print("setup....")
        def test_a(self):
            print("test a")
        def test_b(self):
            print("test b")
    class Test_c():
        def test_c(self):
            print("test c")

     4.设置作用域为class

    一个类只运行一次

    @pytest.fixture(scope="class",autouse=True)
    def before():
        print("before执行啦。。。")
    
    class Test_b():
        def setup(self):
            print("setup....")
        def test_a(self):
            print("test a")
        def test_b(self):
            print("test b")
    class Test_c():
        def test_c(self):
            print("test c")
    

      

     5.设置作用域module

    作用域:作用于整个模块,每个module的所有test只运行一次

    @pytest.fixture(scope="module",autouse=True)
    def before():
        print("before执行啦。。。")
    
    class Test_b():
        def setup(self):
            print("setup....")
        def test_a(self):
            print("test a")
        def test_b(self):
            print("test b")
    class Test_c():
        def test_c(self):
            print("test c")
    
    

      

    6.设置作用域session

    作用于整个session,每个session只运行一次,比如以下

    @pytest.fixture(scope="session",autouse=True)
    def before():
        print("before执行啦。。。")
    
    class Test_b():
        def setup(self):
            print("setup....")
        def test_a(self):
            print("test a")
        def test_b(self):
            print("test b")
    class Test_c():
        def test_c(self):
            print("test c")
    

     7.设置参数

    @pytest.fixture(params=[1,2,3])  #固定用法
    def  param_numbenr(request):  
        return request.param  #固定用法
    
    
    def test_a(param_numbenr):
        print(param_numbenr)
    
    def test_b (param_numbenr):
        print(param_numbenr)
    

      

  • 相关阅读:
    codeforces 862B
    codeforces 863B
    codeforces 864B
    codeforces 867B
    codeforces 868B Race Against Time
    codeforces 869B The Eternal Immortality
    CodeForces
    nyoj 括号配对问题(模拟栈的过程)
    HDU
    nyoj 119 士兵杀敌(三)线段树
  • 原文地址:https://www.cnblogs.com/chongyou/p/12634658.html
Copyright © 2011-2022 走看看