欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Pytest框架下的自动化测试开发实战指南:从头开始学习 - 第八章:测试的预处理和结束

最编程 2024-01-15 21:54:17
...

很多时候,我们需要在测试用例执行前做数据库连接的准备,做测试数据的准备,测试执行后断开数据库连接,清理测试脏数据这些工作。通过07小节大家对于通过env这个fixture函数,如何在测试开始前的开展准备工作有所了解,本小节将介绍更多内容。

@pytest.fixture函数的scope可能的取值有function,class,module,package 或 session。他们的具体含义如下:

  1. function,表示fixture函数在测试方法执行前和执行后执行一次。
  2. class,表示fixture函数在测试类执行前和执行后执行一次。
  3. module,表示fixture函数在测试脚本执行前和执行后执行一次。
  4. package,表示fixture函数在测试包(文件夹)中第一个测试用例执行前和最后一个测试用例执行后执行一次。
  5. 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.清理测试数据
在测试类执行前后各执行一次“在数据库中准备测试数据”和“清理测试数据”。