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的升级版,设计思想是由它而来。我会在下篇进行分享,请尽情期待。
作者:全栈测试开发日记
出处:https://www.cnblogs.com/liudinglong/
csdn:https://blog.csdn.net/liudinglong1989/
微信公众号:全栈测试开发日记
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。