pytest框架用例运行级别
模块级(setup_module/teardown_module)开始于横块始末,全局的,(不在类中)
函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
类级(setup_class/teardown_calss)只在类中执行用例时 运行一次(在类中)
方法级(setup_method/teardown_method)开始于方法始末(在类中)
(setup/teardown)运行在调用方法前后(类中类外均可)
01 模块级 setup_module 和 teardown_module
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| 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'])
|
输出如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ============================= test session starts ============================= platform win32 -- Python 3.7.6, pytest-5.4.3, py-1.9.0, pluggy-0.13.1 rootdir: D:\home\blog\blog\source\_posts\lepeng\python\pytest plugins: cov-2.10.0, django-3.9.0, mock-3.2.0collected 2 items
test.py setup_module:整个.py模块只执行一次 比如:所有用例开始前只打开一次浏览器 .正在执行第一条用例 .正在执行第二条用例 teradown_module:整个.py模块只执行一次 比如:所有用例结束只最后关闭浏览器 [100%]
============================== 2 passed in 0.03s ==============================
|
控制台输出解析
模块级前置后置只打开一次就执行所有的测试用例
02 函数级 setup_function 和 teardown_function
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| 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_fixt.py'])
|
输出如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ============================= test session starts ============================= platform win32 -- Python 3.7.6, pytest-5.4.3, py-1.9.0, pluggy-0.13.1 rootdir: D:\home\blog\blog\source\_posts\lepeng\python\pytest plugins: cov-2.10.0, django-3.9.0, mock-3.2.0collected 2 items
test.py setup_function:每个用例前都会执行 .正在执行第一条用例 teardown_function:每个用例后都会执行 setup_function:每个用例前都会执行 .正在执行第二条用例 teardown_function:每个用例后都会执行 [100%]
============================== 2 passed in 0.05s ==============================
|
输出解析
函数式在每条测试用例执行前都会去执行一次
03类里面的,函数级别 setup()/teardown()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import pytest class Testcaselist(): def setup(self): print('setup:每个用例前开始执行') def teardown(self): print('teardown:每个用例后开始执行') 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_fixtclass.py'])
|
输出如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ============================= test session starts ============================= platform win32 -- Python 3.7.6, pytest-5.4.3, py-1.9.0, pluggy-0.13.1 rootdir: D:\home\blog\blog\source\_posts\lepeng\python\pytest plugins: cov-2.10.0, django-3.9.0, mock-3.2.0collected 2 items
test.py setup:每个用例前开始执行 .正在执行第一条用例 teardown:每个用例后开始执行 setup:每个用例前开始执行 .正在执行第二条用例 teardown:每个用例后开始执行 [100%]
============================== 2 passed in 0.06s ==============================
|
输出解析
类里面的在每条测试用例执行前都会去执行一次
04类级 setup_class和teardown_class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| 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_fixtclass.py'])
|
输出如下
1 2 3 4 5 6 7 8 9 10 11 12
| ============================= test session starts ============================= platform win32 -- Python 3.7.6, pytest-5.4.3, py-1.9.0, pluggy-0.13.1 rootdir: D:\home\blog\blog\source\_posts\lepeng\python\pytest plugins: cov-2.10.0, django-3.9.0, mock-3.2.0collected 2 items
test.py setup_class:所有用例执行之前 .正在执行第一条用例 .正在执行第二条用例 teardown_class:所有用例执行结束之后 [100%]
============================== 2 passed in 0.03s ==============================
|
类级setup_class、teardown_class控制台输出解析
类级前置后置只打开一次就执行所有的测试用例,在一个测试内只运行一次setup_class和teardown_class,不关心测试类内有多少个测试函数。
05方法级 setup_method 和 teardown_method
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| 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_fixtclass.py'])
|
控制台输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ============================= test session starts ============================= platform win32 -- Python 3.7.6, pytest-5.4.3, py-1.9.0, pluggy-0.13.1 rootdir: D:\home\blog\blog\source\_posts\lepeng\python\pytest plugins: cov-2.10.0, django-3.9.0, mock-3.2.0collected 2 items
test.py setup_method:每个用例开始之前执行 .正在执行第一条用例 teardown_method:每个用例结束后执行 setup_method:每个用例开始之前执行 .正在执行第二条用例 teardown_method:每个用例结束后执行 [100%]
============================== 2 passed in 0.03s ==============================
|
方法级的setup_method、teardown_method控制台输出解析
方法级的在每条测试用例执行前都会去执行一次
06类级+方法级+类里面的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| import pytest class Testcaselist(): def setup(self): print('setup:每个用例前开始执行') def teardown(self): print('teardown:每个用例后开始执行') def setup_class(self): 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_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_fixtclass.py'])
|
控制台输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| ============================= test session starts ============================= platform win32 -- Python 3.7.6, pytest-5.4.3, py-1.9.0, pluggy-0.13.1 rootdir: D:\home\blog\blog\source\_posts\lepeng\python\pytest plugins: cov-2.10.0, django-3.9.0, mock-3.2.0collected 2 items
test.py setup_class:所有用例执行之前 setup_method:每个用例开始之前执行 setup:每个用例前开始执行 .正在执行第一条用例 teardown:每个用例后开始执行 teardown_method:每个用例结束后执行 setup_method:每个用例开始之前执行 setup:每个用例前开始执行 .正在执行第二条用例 teardown:每个用例后开始执行 teardown_method:每个用例结束后执行 teardown_class:所有用例执行结束之后 [100%]
============================== 2 passed in 0.03s ==============================
|
类里面的+类级+方法级前置后置控制台输出解析
从结果看出,运行的优先级:setup_class>setup_method>setup>用例>teardown>teardown_method>teardown_class
07 setup_module、setup_function
执行顺序:setup_module>>setup_function>>setup。其中setup_module表示执行用例只执行一次前置