Pytest测试用例之setup与teardown方法
Posted 技术改变命运Andy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pytest测试用例之setup与teardown方法相关的知识,希望对你有一定的参考价值。
介绍
unittest里面 [前置/后置setup/teardown ]非常好,用来写一些每个case执行前都需要执行的公用代码 [ 作用:在每次用例开始前和结束后都去执行一次 ]
例如我们的进入产品前可能都需要打开浏览器登录等,执行完毕后需要关闭浏览器等,这些我们都可以用前置后置初始化环境去实现的,然后这样的前置后置方法有很多
当然还有更高级一一点的setupClass和teardownClass,需配合@classmethod装饰器起使用,在做selenium自动化的时候,它的效率尤为突显;只用启动-次浏览器就可以将在该代码文件下的所有待执行用例,进行执行完毕。不需要执行每条每次就打开浏览器
pytest框架也有类似于setup和teardown的语法,并且还不止这四个,下面我们简单看看这些方法的简单介绍
用例运行级别
- 模块级(setup_module/teardown_module)开始于横块始末,全局的
- 函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
- 类级(setup_class/teardown_calss)只在类中前后运行一次(在类中)
- 方法级(setup_method/teardown_method)开始于方法始末(在类中)
- 类里面的(setup/teardown)运行在调用方法前后
###
函数级 setup_function/teardown_function
import pytest # 函数式 def setup_function(): print(\'setup_function:每个用例前都会执行\') def teardown_function(): print(\'teardown_function:每个用例后都会执行\') def test_001(): print("正在执行第一条用例") p = "Python" assert "h" in p def test_002(): print("正在执行第二条用例") p = \'Test\' assert \'T\' in p if __name__ == \'__main__\': pytest.main([\'-s\', \'test_updown_demo1.py\'])
###
test_updown_demo1.py::test_001 setup_function:每个用例前都会执行 PASSED [ 50%]正在执行第一条用例 teardown_function:每个用例后都会执行 test_updown_demo1.py::test_002 setup_function:每个用例前都会执行 PASSED [100%]正在执行第二条用例 teardown_function:每个用例后都会执行
###
模块级 setup_module/teardown_module
import pytest # 模块级 def setup_module(): print(\'setup_module:整个.py模块只执行一次\') print("比如:所有用例开始前只打开一次浏览器") def teardown_module(): print(\'teradown_module:整个.py模块只执行一次\') print("比如:所有用例结束只最后关闭浏览器") def test_001(): print("正在执行第一条用例") p = "Python" assert "h" in p def test_002(): print("正在执行第二条用例") p = \'Test\' assert \'T\' in p if __name__ == \'__main__\': pytest.main([\'-s\', \'test_fixt.py\'])
###
test_updown_demo1.py::test_001 setup_module:整个.py模块只执行一次 比如:所有用例开始前只打开一次浏览器 PASSED [ 50%]正在执行第一条用例 test_updown_demo1.py::test_002 PASSED [100%]正在执行第二条用例 teradown_module:整个.py模块只执行一次 比如:所有用例结束只最后关闭浏览器
###
类级 setup_class/teardown_calss
import pytest class Testcaselist(): print(\'setup_class:所有用例执行之前\') # 类级 def setup_class(self): print(\'setup_class:所有用例执行之前\') def teardown_class(self): print(\'teardown_class:所有用例执行结束之后\') # 测试用例 def test_001(self): print("正在执行第一条用例") p = "Python" assert "h" in p def test_002(self): print("正在执行第二条用例") p = \'test\' assert \'t\' in p if __name__ == \'__main__\': pytest.main([\'-s\', \'test_updown_demo1.py\'])
###
test_updown_demo1.py::Testcaselist::test_001 setup_class:所有用例执行之前 PASSED [ 50%]正在执行第一条用例 test_updown_demo1.py::Testcaselist::test_002 PASSED [100%]正在执行第二条用例 teardown_class:所有用例执行结束之后
###
方法级 setup_method/teardown_method
import pytest class Testcaselist(): # 方法级 def setup_method(self): print(\'setup_method:每个用例开始之前执行\') def teardown_method(self): print(\'teardown_method:每个用例结束后执行\') # 测试用例 def test_001(self): print("正在执行第一条用例") p = "Python" assert "h" in p def test_002(self): print("正在执行第二条用例") p = \'test\' assert \'t\' in p if __name__ == \'__main__\': pytest.main([\'-s\', \'test_updown_demo1.py\'])
####
test_updown_demo1.py::Testcaselist::test_001 setup_method:每个用例开始之前执行 PASSED [ 50%]正在执行第一条用例 teardown_method:每个用例结束后执行 test_updown_demo1.py::Testcaselist::test_002 setup_method:每个用例开始之前执行 PASSED [100%]正在执行第二条用例 teardown_method:每个用例结束后执行
####
以上是关于Pytest测试用例之setup与teardown方法的主要内容,如果未能解决你的问题,请参考以下文章