Pytest 测试框架结构
同学们大家好,这个章节我们来了解一下 pytest 测试框架的基本框架结构。
简介
Pytest 测试框架的结构是指如何组织和管理你的测试代码、测试数据、配置和其他支持文件,使得测试过程高效、清晰并且易于维护。
首先,我们得先知道什么是框架结构。其实在 pytest 中,框架的结构是指如何组织和管理你的测试代码、测试数据、配置和其他支持文件,使得测试过程高效、清晰并且易于维护。简单来说,就是让你的测试项目看起来更有条理,管理起来也更方便。想象一下,如果你的测试代码和配置文件像乱七八糟的纸堆一样,那会很难找到问题或者修改错误。好的结构能帮助我们事半功倍。
基本项目结构
Pytest 的测试框架基于 Python 的标准目录结构,但在此基础上增加了一些约定和最佳实践。
my_project/
│
├── src/
│ └── my_module.py
│
├── tests/
│ ├── test_my_module.py
│ └── test_another.py
├── conftest.py
├── pytest.ini
├── requirements.txt
└── README.md
那一个比较推荐的 pytest 框架结构是怎么样的呢?其实 pytest 的测试框架可以基于 Python 的标准目录结构。比如这里给大家的案例。在 python 项目中,一般来说 src 目录用来存放项目的源代码。而 tests 目录中存放的就是测试相关代码。所以我们写测试用例可以放在 tests 目录中。除了这两个基本目录之外,项目中还可以包含 pytest 的一些相关配置文件,比如 conftest点py 和 pytest点ini。当然了,项目中不要忘记加好项目依赖文件 requirements点txt 和项目说明文件 readme。
测试装置
测试装置又可以称为测试夹具,用于为测试提供固定的测试环境或资源。它允许在测试执行之前准备所需的资源,在测试执行后清理这些资源。
在 pytest 中,既支持 unittest 中的 setup 和 teardown 用法,也提供了更灵活的 fixture。
先介绍一下基础的 setup 和 teardown 用法。
了解了基本项目结构之后,下面我们来了解一下 pytest 中的测试装置。测试装置又可以称为测试夹具,用来为测试提供固定的测试环境或者资源。它允许在测试执行之前准备所需的资源,并且可以在测试执行后清理这些资源。在 pytest 中,既支持 unittest 中 setup 和 teardown 用法,也提供了更灵活的 fixture。这个章节我们先来学习比较简单的 setup 和 teardown 用法。fixture 会放到后面再给大家做介绍。
setup 与 teardown 作用
- setup:setup 用于为测试提供准备环境的代码。该函数在测试用例运行之前执行。通常被用来初始化测试环境,例如创建数据库连接、加载测试数据等。可以定义不同的作用域(函数级别、类级别、模块级别)的 setup。
- teardown:teardown 函数用于在测试执行后进行清理工作。该函数测试用例运行完成后执行。通常用于释放资源,例如关闭数据库连接、删除临时文件等。可以定义不同的作用域(函数级别、类级别、模块级别)的 teardown。
咱们先来看看 setup 和 teardown 的作用是什么。setup 一般来说是用来做测试前准备工作的,因为它会在测试执行之前被调用,经常会用来做一些初始化的工作,比如链接数据库呀,加载测试数据等等的。而 teardown 一般是用来做测试完毕后的清理工作的。比如资源的释放,类似于关闭数据库连接,清理测试数据等等。setup 和 teardown 不需要配对出现,我们只需要根据需要来选择。而且它们都可以定义不同的作用域。下面我们来详细了解一下这些作用域都有哪些。
setup/teardown 函数的作用域
类型 | 规则 |
---|---|
setup_module/ teardown_module |
全局模块级 |
setup_class/ teardown_class |
类级,只在类中前后运行一次 |
setup_function/ teardown_function |
函数级,在类外 |
setup_method/ teardown_method |
方法级,类中的每个方法执行前后 |
总的来说常用的作用域有模块级别、类级别、函数级别和方法级别这几种。不同的作用域通过不同的方法名称来做区别。大家要注意,这里的命名必须严格按照要求的来写,写错的话就识别不出来是测试装置方法了。下面咱们分别介绍一下。模块级别其实算是全局性的设置,定义语法是 setup module 和 teardown module,module 其实就是模块也就是一个 python 文件。setup module 会在测试文件执行之前调用一次,teardown module 会在测试文件执行之后调用一次。然后就是类级别,定义语法是 setup class 和 teardown class,setup class 会在当前测试类执行前调用一次,而 teardown class 会在当前测试类执行之后调用一次。接下来就是函数级别和方法级别,这两个的区别需要大家先搞清楚。函数代表是在类的外面通过 def 关键字定义的,方法代表是在类当中通过 def 关键字定义的。所以函数级别的定义语法是 setup function 和 teardown function,setup function 会在当前文件的每个测试函数执行前调用一次,teardown function 会在当前文件的每个测试函数执行后调用一次。类似的,方法级别的定义语法是 setup method 和 teardown method,setup method 会在类中的每个方法执行前都调用一次,teardown method 在类中的每个方法执行后都调用一次。直接这么介绍可能大家会觉得有点抽象,下面我们通过一个例子来看看具体的写法。
# 模块级别(优先最高)
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_func1():
assert True
class TestDemo:
# 执行测试类前后分别执行 setup_class teardown_class
def setup_class(self):
print("TestDemo setup_class")
def teardown_class(self):
print("TestDemo teardown_class")
# 每个类里面的测试方法前后分别执行 setup teardown
def setup_method(self):
print("TestDemo setup")
def teardown_method(self):
print("TestDemo teardown")
def test_method1(self):
assert True
def test_method2(self):
assert False
来看下这个示例,代码中展示了不同作用域的 setup 和 teardown 函数是如何工作的。我们会在接下来的演示中看到这个代码的具体执行结果。
执行结果
大家可以看一下执行结果的截图。我们可以看到 Pytest 的执行过程是如何根据不同的作用域来执行 setup 和 teardown 函数的。
下面给大家演示一下具体操作。先进入项目当中,我们先创建一个测试文件,文件名称可以叫做 test setup。文件创建好之后,这些代码我们就不手动敲了,可以把对应的演示代码复制到文件中。因为这里最主要的是想要看一下不同作用域的效果。现在我们来执行一下这个测试文件。想要执行整个测试文件,可以在文件空白处点击鼠标右键,选择 run 测试文件。或者也可以把鼠标移动到文件名所在的位置,点击鼠标右键,选择 run 这个文件,这样就能执行整个测试文件了。现在测试文件已经执行结束了,我们在右侧可以看到每个测试用例的执行结果。左侧还可以看到具体执行过程。正好通过打印的日志信息来看一下不同作用域的效果。测试文件执行之前首先调用了模块级别的 setup。然后测试函数执行的前后分别调用了函数级别的 setup 和 teardown,所以我们在这里就能看到是 function 级别的日志信息。同样的道理,测试类执行之前先调用了类级别的 setup,然后类中每个测试方法执行前后分别调用了方法级别的 setup 和 teardown,可以看到最后的用例其实是执行失败的,但是失败之后也会正常调用 teardown method。接着能看到这个测试类执行完毕后调用了类级别的 teardown。整个测试文件执行完毕后调用了模块级别的 teardown。想要看到详细的执行信息,可以勾选右侧上面的这两个按钮。
./assets/pytest测试框架结构.mp4
总结
- 了解 Pytest 测试框架结构。
- 掌握测试装置用法。
好,关于测试框架的结构就先介绍这么多。简单总结一下我们学到的内容。首先,我们了解了 Pytest 测试框架的基本结构。我们看到了一个标准的项目目录结构,包括了源代码、测试代码、配置文件等各个部分。这些内容帮助我们理解如何组织一个清晰、高效的测试项目。其次,我们学习了测试装置的用法。你可以通过 setup 和 teardown 来准备和清理测试环境,确保测试能够在干净的环境下进行。关于测试框架结构的介绍先到这里吧。