有一点首先需要确认的的是,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 dashen():
print('开始测试')
yield
print('结束测试')
执行模块test_001.py 或者 test_002.py的测试代码,见执行后的结果信息:
================================================ test session starts ================================================ platform darwin -- Python 3.7.4, pytest-4.0.2, py-1.8.0, pluggy-0.12.0 -- /Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 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 dashen test_001.py::test_login_001 (fixtures used: dashen)PASSED TEARDOWN F dashen test_002.py::test_logout_001 SETUP F dashen test_002.py::test_logout_001 (fixtures used: dashen)PASSED TEARDOWN F dashen ============================================= 2 passed in 0.01 seconds ============================================== l
回溯过程使用到的命令为:pytest --setup-show,如上结果信息就是回溯的过程。
fixture也可以传递测试数据,那么也可以写到conftest.py的文件中,还是看一个案例,见conftest.py的最新
源码:
#!/usr/bin/python3
#coding:utf-8
import pytest
@pytest.fixture(autouse=True)
def dashen():
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 dashen SETUP F login test_login.py::test_login (fixtures used: login, dashen). TEARDOWN F login TEARDOWN F dashen ================================================= 1 passed, 2 deselected in 0.04 seconds =================================================
依据如上的测试代码,可以看出在一个conftest.py中,可以编写多个共享fixture的代码。关于cionftest.py共享
fixture的几个注意事项,再次总结下,具体如下:
1、conftest.py文件绝对不能当平常的模块来倒入,是绝对不能
2、conftest.py很多时候是被当作pytest一个本地插件库
3、可以 把一个目录下的conftest.py看成是一个供该目录下所有测试用例使用的fixture仓库