1.前言
一個(gè)測(cè)試工程下是可以有多個(gè)conftest.py的文件,一般在工程根目錄放一個(gè)conftest.py起到全局作用。
在不同的測(cè)試子目錄也可以放conftest.py,作用范圍只在該層級(jí)以及以下目錄生效。
2.conftest層級(jí)關(guān)系
在web_conf_py項(xiàng)目工程下建兩個(gè)子項(xiàng)目baidu、blog硕噩,并且每個(gè)目錄下都放一個(gè)conftest.py和init.py(python的每個(gè)package必須要有init.py)
web_conf_py是工程名稱
├─baidu
│ │ conftest.py
│ │ test_1_baidu.py
│ │ __init__.py
│
│
├─blog
│ │ conftest.py
│ │ test_2_blog.py
│ │ __init__.py
│
│ conftest.py
│ __init__.py
圖片.png
3.案例分析
web_conf_py工程下conftest.py文件代碼案例
# web_conf_py/conftest.py
import pytest
@pytest.fixture(scope="session")
def start():
print("\n打開首頁(yè)")
baidu目錄下conftest.py和test_1_baidu.py
# web_conf_py/baidu/conftest.py
import pytest
@pytest.fixture(scope="session")
def open_baidu():
print("打開百度頁(yè)面_session")
# web_conf_py/baidu/test_1_baidu.py
import pytest
def test_01(start, open_baidu):
print("測(cè)試用例test_01")
assert 1
def test_02(start, open_baidu):
print("測(cè)試用例test_02")
assert 1
if __name__ == "__main__":
pytest.main(["-s", "test_1_baidu.py"])
運(yùn)行test_1_baidu.py結(jié)果可以看出,start和open_baidu是session級(jí)別的缭贡,只運(yùn)行一次
============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
rootdir: E:\YOYO\web_conf_py\baidu, inifile:
plugins: metadata-1.7.0, html-1.19.0
collected 2 items
test_1_baidu.py
打開首頁(yè)
打開百度頁(yè)面_session
測(cè)試用例test_01
.測(cè)試用例test_02
.
========================== 2 passed in 0.01 seconds ===========================
blog目錄下conftest.py和test_2_blog.py代碼
# web_conf_py/blog/conftest.py
import pytest
@pytest.fixture(scope="function")
def open_blog():
print("打開blog頁(yè)面_function")
# web_conf_py/blog/test_2_blog.py
import pytest
def test_03(start, open_blog):
print("測(cè)試用例test_03")
assert 1
def test_04(start, open_blog):
print("測(cè)試用例test_04")
assert 1
def test_05(start, open_baidu):
'''跨模塊調(diào)用baidu模塊下的conftest'''
print("測(cè)試用例test_05,跨模塊調(diào)用baidu")
assert 1
if __name__ == "__main__":
pytest.main(["-s", "test_2_blog.py"])
運(yùn)行結(jié)果可以看出炉擅,start起到全局作用,blog目錄下的open_blog是function級(jí)別阳惹,每個(gè)用例調(diào)用一次谍失。
test_05(start, open_baidu)用例不能跨模塊調(diào)用baidu模塊下的open_baidu,所以test_05用例會(huì)運(yùn)行失敗
============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
rootdir: E:\YOYO\web_conf_py\blog, inifile:
plugins: metadata-1.7.0, html-1.19.0
collected 3 items
test_2_blog.py
打開首頁(yè)
打開blog頁(yè)面_function
測(cè)試用例test_03
.打開blog頁(yè)面_function
測(cè)試用例test_04
.E
=================================== ERRORS ====================================
__________________________ ERROR at setup of test_05 __________________________
file E:\YOYO\web_conf_py\blog\test_2_blog.py, line 11
def test_05(start, open_baidu):
E fixture 'open_baidu' not found
> available fixtures: cache, capfd, capfdbinary, caplog, capsys, capsysbinary, doctest_namespace, metadata, monkeypatch, open_blog, pytestconfig, record_property, record_xml_attribute, record_xml_property, recwarn, start, tmpdir, tmpdir_factory
> use 'pytest --fixtures [testpath]' for help on them.
E:\YOYO\web_conf_py\blog\test_2_blog.py:11
====================== 2 passed, 1 error in 0.02 seconds ======================