1. 程式人生 > 實用技巧 >pytest之conftest

pytest之conftest

fixture

fixture(scope='function',params=None,autouse=False,ids=None,name=None):
fixture裡面有個scope引數可以控制fixture的作用範圍,scope:有四個級別引數"function"(預設),"class","module","session

params:一個可選的引數列表,它將導致多個引數呼叫fixture功能和所有測試使用它。
autouse:如果True,則為所有測試啟用fixture func可以看到它。如果為False則顯示需要參考來啟用fixture
ids:每個字串id的列表,每個字串對應於params這樣他們就是測試ID的一部分。如果沒有提供ID它們將從params自動生成
name:fixture的名稱。這預設為裝飾函式的名稱。如果fixture在定義它的統一模組中使用,夾具的功能名稱將被請求夾具的功能arg遮蔽,解決這個問題的一種方法時將裝飾函式命令"fixture_<fixturename>"然後使用"@pytest.fixture(name='<fixturename>')"。

1.firture相對於setup和teardown來說應該有以下幾點優勢

scope:有四個級別引數"function"(預設),"class","module","session

  • 命名方式靈活,不侷限於setup和teardown這幾個命名
  • conftest.py 配置裡可以實現資料共享,不需要import就能自動找到一些配置
  • scope="module" 可以實現多個.py跨檔案共享前置, 每一個.py檔案呼叫一次
  • scope="session" 以實現多個.py跨檔案使用一個session來完成多個用例
  • scope="class":每一個類呼叫一次,一個類中可以有多個方法
  • scope="function":每一個函式或方法都會呼叫

2、fixture的作用範圍

fixture裡面有個scope引數可以控制fixture的作用範圍:session>module>class>function

conftest.py配置檔案

單獨管理一些預置的操作場景,pytest預設讀取conftest.py配置檔案

使用場景:

1、每個介面需共用到的token

2、每個介面需共用到的測試用例資料

3、每個介面需共用到的配置資訊

conftest.py結合fixture的 scope使用:

1. scope預設為function

conftest.py

import pytest


@pytest.fixture()
def login(): print("this is login method")

test_conftest.py

import pytest


class TestConftest:

    def setup_class(self):
        print('setup class')

    @pytest.mark.usefixtures('login')
    def test_one(self):
        print('test one case')
        flag = 1
        if flag:
            print('測試111')

    @pytest.mark.usefixtures('login')
    def test_two(self):
        print('test two case')

    def test_three(self):
        print('test three case')

    def teardown_class(self):
        print('teardown class')
View Code

執行結果:

2. scope="class",整個用例只執行一次

conftest.py

import pytest


@pytest.fixture(scope="class")
def login():
    print("this is login method")

test_conftest.py程式碼不改

執行結果: