Pytest框架下的自动化测试开发实战指南:从头开始学习 - 第八章:测试的预处理和结束
最编程
2024-01-15 21:54:17
...
很多时候,我们需要在测试用例执行前做数据库连接的准备,做测试数据的准备,测试执行后断开数据库连接,清理测试脏数据这些工作。通过07小节大家对于通过env这个fixture函数,如何在测试开始前的开展准备工作有所了解,本小节将介绍更多内容。
@pytest.fixture函数的scope可能的取值有function,class,module,package 或 session。他们的具体含义如下:
- function,表示fixture函数在测试方法执行前和执行后执行一次。
- class,表示fixture函数在测试类执行前和执行后执行一次。
- module,表示fixture函数在测试脚本执行前和执行后执行一次。
- package,表示fixture函数在测试包(文件夹)中第一个测试用例执行前和最后一个测试用例执行后执行一次。
- session,表示所有测试的最开始和测试结束后执行一次。
通常,数据库连接和断开、测试配置文件的读取等工作,是需要放到session级别的fixture函数中,因为这些操作针对整个测试活动只需要做一次。而针对测试数据的准备,通常是function级别或者class级别的,因为测试数据针对不同的测试方法或者测试类往往都不相同。
在TestInTheaters测试类中,模拟一个准备和清理测试数据的fixture函数preparation,scope设置为function:
@pytest.fixture(scope="function")
def preparation(self):
print("在数据库中准备测试数据")
test_data = "在数据库中准备测试数据"
yield test_data
print("清理测试数据")
在测试方法中,将preparation作为参数,通过下面的命令执行测试:
$ pipenv py.test -s -q --tb=no tests/test_in_theaters.py
====================================================== test session starts =======================================================
platform darwin -- Python 3.7.7, pytest-5.4.1, py-1.8.1, pluggy-0.13.1
rootdir: /Users/chunming.liu/learn/api_pytest, inifile: pytest.ini
collected 2 items
tests/test_in_theaters.py 在数据库中准备测试数据
F清理测试数据
在数据库中准备测试数据
.清理测试数据
==================================================== short test summary info =====================================================
FAILED tests/test_in_theaters.py::TestInTheaters::test_in_theaters[验证响应中start和count与请求中的参数一致] - AssertionError: ...
================================================== 1 failed, 1 passed in 0.81s ===================================================
通过输出可以看到在每一条测试用例执行前后,各执行了一次“在数据库中准备测试数据”和“清理测试数据”。如果scope的值改为class,执行测试用例的输出信息将是下面这样:
tests/test_in_theaters.py 在数据库中准备测试数据
F.清理测试数据
在测试类执行前后各执行一次“在数据库中准备测试数据”和“清理测试数据”。