pytest之前置、后置方法(二)
1、简介
本文将介绍pytest的前置、后置方法,分别为setup、teardown,在介绍之前先回忆下我们之前学过的unittest框架,它提供了两个前置和两个后置方法,分别为:
- setup()
- setupClass()
- teardown()
- teardownClass()
由unittest提供的方法可以看出,只支持方法和类级别的前置和后置,而今天我们要学习的pytest支持的更多,下面让我们一起来学习下吧。
2、pytest前后置方法
pytest前后置方法分为多个级别:
- 模块级别:setup_module()、teardown_module()
- 类级别:setup_class()、teardown_class()
- 方法级别:setup_method()、teardown_method()
- 方法细化级别:setup()、teardown()
- 函数级别:setup_function()、teardown_function()
下面我们写代码测试下它们的运行顺序:
# -*- coding: utf-8 -*-
# @Time : 2023/11/21 14:55
# @Author : 梗小旭
# @File : test_login.py
import pytest
def setup_module():
print("我是setup_module。。。")
def teardown_module():
print("我是teardown_module。。。")
def setup_function():
print("我是setup_function。。。")
def teardown_function():
print("我是teardown_function。。。")
def test_login_success():
print("登录成功。。。")
def test_login_fail():
print("登录失败。。。。")
class TestLogin:
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 setup(self):
print("我是setup。。。")
def teardown(self):
print("我是teardown。。。")
def test_login_class_success(self):
print("类-登录成功。。。")
def test_login_class_fail(self):
print("类-登录失败。。。")
if __name__ == '__main__':
pytest.main(["-s", "-q", "test_login.py"])
通过执行我们发现setup和teardown并没有执行,带着疑问,去找了资料发现pytest7.0.0版本之后,和setup_method/teardown_method一起使用时,只会执行setup_method/teardown_method,而不会执行setup/teardown,而我的版本是7.4.3,把版本降到7.0.0以下后就可以正常执行了,先执行setup_method/teardown_method,后执行setup/teardown。
所以pytest的前后置运行顺序是:
setup_module->setup_function->test_login_success->teardown_function->setup_function->test_login_fail>teardown_function->setup_class->setup_method->setup->test_login_class_success->teardown->teardown_method->setup_method->setup->test_login_class_fail->teardown->teardown_method->teardown_class->teardown_module
总结:
- setup_module/teardown_module模块级别是整个py文件用例运行前和运行后执行一次
- setup_class/teardown_class类级别是整个测试类运行前和运行后执行一次
- setup_method/teardown_method是类中的每个测试用例运行前和运行后都调用一次
- setup/teardown是类中的每个测试用例运行前和运行后都调用一次(前提pytest7.0.0版本以下)
- setup_function/teardown_function是每个函数用例执行前和之前后都调用一次
下一章介绍如何使用fixture设置前后置条件。