1. 程式人生 > 其它 >Pytest--fixture詳解

Pytest--fixture詳解

fixture

  • fixture介紹
    1.命名方式靈活,不侷限於setup和teardown這幾個命名
    2.conftest.py配置裡可以實現資料共享

  • fixture原始碼詳解
    @pytest.fixture(scope="function", params=None, autouse=False, ids=None, name=None)
    引數說明:
    scope:標記方法的作用域(functipn,class,module,session上篇文章有介紹)
    params:一個可選的引數列表,它將導致多個引數呼叫fixture功能和所有測試使用它
    autouse:預設:False,需要用例手動呼叫該fixture;如果是True,所有作用域內的測試用例都會自動呼叫該fixture
    ids:每個字串id的列表,每個字串對應於params這樣他們就是測試ID的一部分。如果沒有提供ID它們將從params自動生成
    name:fixture的名稱。這預設為裝飾函式的名稱。如果fixture在定義它的統一模組中使用,夾具的功能名稱將被請求夾具的功能arg遮蔽,解決這個問題的一種方法時將裝飾函式命令"fixture_"然後使用"@pytest.fixture(name='')"

  • fixture具體使用
    1.將fixture作為測試函式的輸入引數

#conftest.py
import pytest
@pytest.fixture(scope='function', autouse=False)
def open_server():
    a = 1
    print('---開啟服務---')
    return a

@pytest.fixture(scope='function', autouse=False)
def close_server():
    print('---關閉服務---')

#test_case.py
    def test_run(self, open_server):
        print('---開始執行用例---')
        assert open_server == 1

#結果
test_001_case.py::TestCase001::test_run demo
---開啟服務---
PASSED                           [100%]---開始執行用例---

2.assert在fixture裡,斷言失敗就是error

@pytest.fixture()
def user():
    print("獲取使用者名稱")
    name = "xoxo"
    assert name == "oxox"  # fixture失敗就是error
    return name