Pytest中conftest.py共享fixture(五)

  • 2019 年 10 月 7 日
  • 筆記

有一点首先需要确认的的是,pytest中的fixture是pytest用于将测试前后进行预备,清理工作的代码分离出核心测试逻辑的一种机制。但是我们更加希望的是在一个测试套件中,能够共享fixture的机制,这样所一个测试套件里面的所有测试点都能够共同使用,和我在早期介绍的分离测试固件的思想有点雷同。在pytest中通过conftest.py来共享fixture,如果希望多个测试文件共同使用一个fixture时候,可以在该目录下创建conftest.py文件,但是切记该文件绝对不能倒入使用,这点一定要注意,创建conftest.py文件后,把需要的fixture加入到里面,就可以使用了。先来一个简单的案例,在一个包中,有三个测试模块,每个测试点都显示开始前执行和结束后执行,也就是说,每个测试点执行的时候,先打印测试开始,然后执行测试点,然后最后打印测试结束,见案例代码:

见conftest.py的源码:

#!/usr/bin/python3  #coding:utf-8  import pytest    @pytest.fixture(autouse=True)  def wuya():      print('开始测试')      yield      print('结束测试')

执行模块test_001.py 或者 test_002.py的测试代码,见执行后的结果信息:

cachedir: .pytest_cache  rootdir: /Applications/code/stack/study/xunit/conftest01, inifile:  plugins: allure-adaptor-1.7.10  collected 2 items    test_001.py::test_login_001          SETUP    F wuya          test_001.py::test_login_001 (fixtures used: wuya)PASSED          TEARDOWN F wuya  test_002.py::test_logout_001          SETUP    F wuya          test_002.py::test_logout_001 (fixtures used: wuya)PASSED          TEARDOWN F wuya

回溯过程使用到的命令为:pytest –setup-show,如上结果信息就是回溯的过程。

fixture也可以传递测试数据,那么也可以写到conftest.py的文件中,还是看一个案例,见conftest.py的最新源码:

#!/usr/bin/python3  #coding:utf-8  import pytest    @pytest.fixture(autouse=True)  def wuya():      print('开始测试')      yield      print('结束测试')    @pytest.fixture()  def login():      return 'adfghjk34567dsfg'

测试代码见如下:

#!/usr/bin/python3  #coding:utf-8  import pytest      def test_login(login):      if login=='adfghjk34567dsfg':          assert True      else:          assert  False

执行如上的测试代码,见执行后的结果信息:

platform darwin -- Python 3.7.4, pytest-4.0.2, py-1.8.0, pluggy-0.12.0  rootdir: /Applications/code/stack/study/xunit/conftest01, inifile:  plugins: allure-adaptor-1.7.10  collected 3 items / 2 deselected    test_login.py          SETUP    F wuya          SETUP    F login          test_login.py::test_login (fixtures used: login, wuya).          TEARDOWN F login          TEARDOWN F wuya

依据如上的测试代码,可以看出在一个conftest.py中,可以编写多个共享fixture的代码。关于cionftest.py共享fixture的几个注意事项,再次总结下,具体如下:

1、conftest.py文件绝对不能当平常的模块来倒入,是绝对不能

2、conftest.py很多时候是被当作pytest一个本地插件库

3、可以 把一个目录下的conftest.py看成是一个供该目录下所有测试用例使用的fixture仓库