• python之钩子函数及起始函数作用范围【后置固件yield和终结函数addfinalizer区别】


    # coding:utf-8
    import pytest
    
    
    # 类和方法
    
    def setup_module():
        print("setup_module:整个.py模块只执行一次")
        print("比如:所有用例开始前只打开一次浏览器")
    
    
    def teardown_module():
        print("teardown_module:整个.py模块只执行一次")
        print("比如:所有用例结束只最后关闭浏览器")
    
    
    def setup_function():
        print("setup_function:每个用例开始前都会执行")
    
    
    def teardown_function():
        print("teardown_function:每个用例结束前都会执行")  # 只是每个函数,非类
    
    
    def test_one():
        print("正在执行----test_one")
        x = "this"
        assert ('h' in x)
    
    
    def test_two():
        print("正在执行----test_two")
        x = "hello"
        assert ('h' in x)
    
    
    class TestCase():
    
        def setup_class(self):
            print("setup_class:所有用例执行之前")
    
        def teardown_class(self):
            print("teardown_class:所有用例执行结束后执行")
    
        def test_three(self):
            print("正在执行----test_three")
            x = "this"
            assert 'h' in x
    
        def test_four(self):
            print("正在执行----test_four")
            x = "hello"
            assert 'h' in x
    
    
    @pytest.fixture(autouse=True)
    def show_request(request):
        print("\n=======================request start=================================")
        print("request.module==", request.module)
        print("request.function==", request.function)
        print("request.cls==", request.cls)
        print("request.fspath==", request.fspath)
        print("request.fixturenames==",request.fixturenames )
        print("request.fixturename==", request.fixturename)
        print("request.scope==", request.scope)
        print("\n=======================request end=================================")
    
    
    if __name__ == "__main__":
        pytest.main(["-s", "12.py"])
    

      

    二、【后置固件yield和终结函数addfinalizer区别】

    # 文件名是test_firstFile.py
    # coding=utf-8
    import pytest
    
    
    @pytest.fixture()
    def myfixture():
        print("执行myfixture前半部分")
        yield
        print("执行myfixture的后半部分")
    
    
    class Test_firstFile():
    
        def test_one(self, myfixture):
            print("执行test_one")
            assert 1 + 2 == 3
    
        def test_two(self):
            print("执行test_two")
            assert 1 == 1
    
        def test_three(self):
            print("执行test_three")
            assert 1 + 1 == 2
    
    
    if __name__ == "__main__":
        pytest.main(["-s", "12.py"])
    

     结果:测试代码的执行顺序是 固件中yield前的代码–测试用例中的代码–固件中yield后的;如果测试用例中的代码出现异常或者断言失败,并不会影响他的固件中yield后的代码执行;但是如果固件中的yield之前的代码也就是相当于setup部分的带代码,出现错误或断言失败,那么yield后的代码将不会再执行,当然测试用例中的代码也不会执行。 

    # test_Pytest.py文件
    # coding=utf-8
    
    import pytest
    
    
    @pytest.fixture()
    def myfixture(request):
        print("执行固件myfixture的前半部分")
    
        def myteardown():
            print("执行固件myfture的后半部分")
    
        request.addfinalizer(myteardown)
    
    
    class Test_Pytest():
    
        def test_one(self, myfixture):
            print("test_one方法执行")
            assert 1 == 1
    
        def test_two(self):
            print("test_two方法执行")
            assert "o" in "love"
    
        def test_three(self):
            print("test_three方法执行")
            assert 3 - 2 == 1
    
    
    if __name__ == "__main__":
        pytest.main(["-s", "12.py"])
    

      结果:

    12.py 执行固件myfixture的前半部分
    test_one方法执行
    .执行固件myfture的后半部分
    test_two方法执行
    .test_three方法执行
    

      注意:注释掉request.addfinalizer(myteardown)后myteardown()函数便不会执行;

    
    
  • 相关阅读:
    DBSCAN 聚类分析
    常见空间聚类算法优劣概述
    最佳实践 —— 单元测试
    C/C++ 混合编程
    映射网络路径
    时间服务器/时间同步配置
    取出根路径
    PS Studio调用.exe输出错误信息的解决办法
    远程重启IIS服务
    浏览打开窗口,打开运行窗口,文件夹
  • 原文地址:https://www.cnblogs.com/mumianhuasayyes/p/15849259.html
Copyright © 2020-2023  润新知