章节目录:
一、概述
pytest 提供了类似
setup
、teardown
的方法。
- 模块级别 :
setup_module
、teardown_module
。 - 函数级别 :
setup_function
、teardown_function
,不在类中的方法。 - 类级别 :
setup_class
、teardown_class
。 - 方法级别 :
setup_method
、teardown_method
。 - 方法细化级别 :
setup
、teardown
。
二、前置与后置操作
- 代码示例:
python
import pytest
def setup_function():
print('\n这是测试用例的前置')
def teardown_function():
print('\n这是测试用例的后置')
def test01():
print('\n### case1 ###')
if __name__ == '__main__':
"""
main() 命令行参数详情:
-s: 显示程序中的 print / logging 输出。
-v: 丰富信息模式, 输出更详细的用例执行信息。
-q: 安静模式, 不输出环境信息。
-x: 出现一条测试用例失败就退出测试。调试阶段非常有用。
-k:可以使用and、not、or等逻辑运算符,区分:匹配范围(文件名、类名、函数名)。
当不传入参数时,相当于命令行输入 pytest。
当传入参数 -s -v -x 时,相当于命令行输入 pytest -s -v -x。
"""
pytest.main(['-s'])
# 执行顺序如下:
#
# 这是测试用例的前置
#
# ### case1 ###
#
# 这是测试用例的后置
- 执行顺序优先级 :前置 (setup) > 后置(teardown)。
三、各函数使用场景
setup_module
:在当前测试模块开始执行前调用一次。通常用于设置全局测试环境。teardown_module
:在当前测试模块执行完后调用一次。通常用于清理全局测试环境。setup_function
:在每个测试函数(不在类中的 方法)运行前调用一次。通常用于设置特定函数级别的测试环境。teardown_function
:在每个测试函数(不在类中的方法)运行后调用一次。通常用于清理特定函数级别的测试环境。setup_class
:在当前测试类中的所有测试方法运行前调用一次。通常用于设置类级别的测试环境。teardown_class
:在当前测试类中的所有测试方法运行后调用一次。通常用于清理类级别的测试环境。setup_method
:在每个测试类中的每个测试方法运行前调用一次。通常用于设置方法级别的测试环境。teardown_method
:在每个测试类中的每个测试方法运行后调用一次。通常用于清理方法级别的测试环境。setup
:在每个测试方法运行前调用一次。与setup_method
类似 ,但它只在类中的方法内起作用,不会影响其他测试方法。teardown
:在每个测试方法运行后调用一次。与teardown_method
类似,但它只在类中的方法内起作用,不会影响其他测试方法。
四、方法使用
- 代码示例:
python
import pytest
def setup_module():
print("\n===setup_module(设置全局测试环境,仅执行一次)===")
def teardown_module():
print("\n===teardown_module(清理全局测试环境,仅执行一次)===")
def setup_function():
print("\n===setup_function(不在类中的方法-设置特定函数级别的测试环境)===")
def teardown_function():
print("\n===teardown_function(不在类中的方法-清理特定函数级别的测试环境)===")
def test_one():
print("\n### case1 ###")
def test_two():
print("\n### case2 ###")
class TestCase:
def setup_class(self):
print("\n===setup_class(设置类级别测试环境,仅执行一次)===")
def teardown_class(self):
print("\n===teardown_class(清理类级别测试环境,仅执行一次)===")
def setup_method(self):
print("\n===setup_method(设置方法级别的测试环境)===")
def teardown_method(self):
print("\n===teardown_method(清理方法级别的测试环境)===")
def setup(self):
print("\n===setup(与 setup_method 类似,不会影响其他测试方法)===")
def teardown(self):
print("\n===teardown(与 teardown_method 类似,不会影响其他测试方法)===")
def test_three(self):
print("\n### case3 ###")
def test_four(self):
print("\n### case4 ###")
if __name__ == '__main__':
pytest.main(["-s"])
- 调用过程:
python
test.py::test_one
===setup_module(设置全局测试环境,仅执行一次)===
===setup_function(不在类中的方法-设置特定函数级别的测试环境)===
PASSED [ 25%]
### case1 ###
===teardown_function(不在类中的方法-清理特定函数级别的测试环境)===
test.py::test_two
===setup_function(不在类中的方法-设置特定函数级别的测试环境)===
PASSED [ 50%]
### case2 ###
===teardown_function(不在类中的方法-清理特定函数级别的测试环境)===
test.py::TestCase::test_three
===setup_class(设置类级别测试环境,仅执行一次)===
===setup_method(设置方法级别的测试环境)===
PASSED [ 75%]
### case3 ###
===teardown_method(清理方法级别的测试环境)===
test.py::TestCase::test_four
===setup_method(设置方法级别的测试环境)===
PASSED [100%]
### case4 ###
===teardown_method(清理方法级别的测试环境)===
===teardown_class(清理类级别测试环境,仅执行一次)===
===teardown_module(清理全局测试环境,仅执行一次)===
五、总结
setup_class
和setup_module
执行用例时,只执行一次前置和后置。setup_class
,setup_method
是在类中执行的。setup_module
,setup_function
是在类外执行的。- 其中
setup
类中,类内外都可以执行。
六 、结束语
"-------怕什么真理无穷,进一寸有一寸的欢喜。"
微信公众号搜索:饺子泡牛奶。