zoukankan      html  css  js  c++  java
  • Pytest学习笔记1——传统前后置处理

      引言

      在《Python 自动化测试框架unittest与pytest的区别》这篇文章中,已经介绍了pytest的前后置,现在单独拿出来,再来复习一次。

      文中unittest是有三个处理前后置的函数:

      setUp()&tearDown() < setUpClass()&tearDownClass() < setUpModule()&tearDownModule(),而pytest相对比unittest多了2个,函数级和方法级。

      逻辑优先级:

    • 模块级(setup_module/teardown_module)开始于模块始末,全局的
    • 函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
    • 类级(setup_class/teardown_class)只在类中前后运行一次(在类中)
    • 方法级(setup_method/teardown_method)开始于方法始末(在类中)
    • 类里面的(setup/teardown)运行在调用方法的前后

      实例

    import pytest
    
    
    # setup_function&teardown_function 不在类中使用
    def setup_function():
        print("这是函数级setup>>>>>每条用例执行前执行")
    def teardown_function():
        print("这是函数级teardown>>>>>每条用例执行后执行")
    
    # setup_module&teardown_module 全局
    def setup_module():
        print("这是模块级setup>>>>>所有用例执行前执行")
    def teardown_module():
        print("这是模块级teardown>>>>>所有用例执行后执行")
    
    # 测试用例
    def test_001():
        print("用例001")
    def test_002():
        print("用例002")
    
    # 测试类
    class Test_Api:
        def setup(self):
            print("这是方法setup>>>>>每条用例执行前执行")
        def teardown(self):
            print("这是方法teardown>>>>>每条用例执行后执行")
    
        def setup_class(cls):
            print("这是类方法setup_class>>>>>所有用例执行前执行")
        def teardown_class(self):
            print("这是类方法teardown_class>>>>>所有用例执行后执行")
    
        def setup_method(self):
            print("这是setup_method方法>>>>>每个用例开始前执行")
    
        def teardown_method(self):
            print("这是teardown_method方法>>>>>每个用例结束后执行")
    
        def test_003(self):
            print("用例003")
    
        def test_004(self):
            print("用例004")
    
    if __name__ == '__main__':
        pytest.main('-s','test2.py')
    

      

    运行结果:

    test2.py::test_001 
    这是模块级setup>>>>>所有用例执行前执行
    这是函数级setup>>>>>每条用例执行前执行
    PASSED                                                [ 25%]用例001
    这是函数级teardown>>>>>每条用例执行后执行
    
    test2.py::test_002 这是函数级setup>>>>>每条用例执行前执行
    PASSED                                                [ 50%]用例002
    这是函数级teardown>>>>>每条用例执行后执行
    
    test2.py::Test_Api::test_003 
    test2.py::Test_Api::test_004 
    
    ============================== 4 passed in 0.05s ==============================
    
    Process finished with exit code 0
    这是类方法setup_class>>>>>所有用例执行前执行
    这是setup_method方法>>>>>每个用例开始前执行
    这是方法setup>>>>>每条用例执行前执行
    PASSED                                      [ 75%]用例003
    这是方法teardown>>>>>每条用例执行后执行
    这是teardown_method方法>>>>>每个用例结束后执行
    这是setup_method方法>>>>>每个用例开始前执行
    这是方法setup>>>>>每条用例执行前执行
    PASSED                                      [100%]用例004
    这是方法teardown>>>>>每条用例执行后执行
    这是teardown_method方法>>>>>每个用例结束后执行
    这是类方法teardown_class>>>>>所有用例执行后执行
    这是模块级teardown>>>>>所有用例执行后执行
    

      

    从结果上看,逻辑优先级:

    对于类外:模块级是最大的,全局的,针对.py模块的,你可以认为(setup_module/teardown_module)是global,针对整个py文件,你可以将测试数据初始化和清理数据放到这里。

    对于类中:setup_class>setup_method>setup

    对于整个py文件(模块):首先setup_module/teardown_module永远是最先执行的,然后识别函数和类的位置,按从上到下来执行,也是python程序执行规则。

    可以试试,将类和外面的函数换一下位置:

    执行结果:

    执行顺序:

      总结

      pytest的前后置处理函数实例已经讲完,这是传统的处理方法,如果像一些场景,比如说登录,在测试业务接口的时候,我们有些接口是不需要登录,但是有些是需要登录,前置条件是登录,如果说用这种传统的函数处理,肯定不适应了,于是有大神开发的了一个fixtrue函数,它其实是setup/teardown的升级版,设计思想是由它而来。我会在下篇进行分享,请尽情期待。

  • 相关阅读:
    Sublime keymap 个性修改
    Sublime setting 个性修改
    微信公众接口测试频道
    Thinkphp 架构笔记
    mac ssh 远程容易断线解决方案
    日期按日、周、月 递增
    Centos Apache 多站点配置
    tar解压
    mac 将本地文件上传到vps
    ssh 连接vps
  • 原文地址:https://www.cnblogs.com/liudinglong/p/12885060.html
Copyright © 2011-2022 走看看