『德不孤』Pytest框架 — 14.Fixture裝飾器的參數(shù)說明示例

1、ids參數(shù)說明

ids參數(shù)就是給每一個變量起一個別名赴涵。

示例:

import pytest

data = [("孫悟空", 666), ("豬八戒", 777), ("沙和尚", 888)]


# ids參數(shù)的個數(shù)要與params參數(shù)的個數(shù)相同垄琐,用的很少
@pytest.fixture(params=data, ids=['suk', 'zbj', 'shs'])
def need_data(request):
    return request.param


def test_data(need_data):
    print(f"測試人物:{need_data[0]}")
    print(f"測試分數(shù):{need_data[1]}")


if __name__ == '__main__':
    pytest.main()

"""
之前的測試結(jié)果:
test_01.py::test_data[need_data0] 測試人物:孫悟空
測試分數(shù):666
PASSED
test_01.py::test_data[need_data1] 測試人物:豬八戒
測試分數(shù):777
PASSED
test_01.py::test_data[need_data2] 測試人物:沙和尚
測試分數(shù):888
PASSED

加上ids參數(shù)后的執(zhí)行結(jié)果:只是[]的內(nèi)容變化了蹦肴,這就是ids參數(shù)的作用
test_01.py::test_data[suk] 測試人物:孫悟空
測試分數(shù):666
PASSED
test_01.py::test_data[zbj] 測試人物:豬八戒
測試分數(shù):777
PASSED
test_01.py::test_data[shs] 測試人物:沙和尚
測試分數(shù):888
PASSED
"""

2、name參數(shù)說明

name參數(shù)就是給Fixture修飾的方法起個別名揽涮。

示例:

import pytest

data = [("孫悟空", 666), ("豬八戒", 777), ("沙和尚", 888)]


# ids參數(shù)的個數(shù)要與params參數(shù)的個數(shù)相同抠藕,用的很少
@pytest.fixture(params=data, name="abc")
def need_data(request):
    return request.param

# 注意,如果定義了name屬性蒋困,用例的方法參數(shù)就需要傳入name屬性定義的值盾似。
# 否則將會報錯。
# 還有用例中調(diào)用參數(shù)的使用雪标,也需要使用name定義的別名零院。
# 即:當取了別名之后,那么原來的方法名就用不了了村刨。
def test_data(abc):
    print(f"測試人物:{abc[0]}")
    print(f"測試分數(shù):{abc[1]}")


if __name__ == '__main__':
    pytest.main()

"""
執(zhí)行結(jié)果:

test_01.py::test_data[abc0] 測試人物:孫悟空
測試分數(shù):666
PASSED
test_01.py::test_data[abc1] 測試人物:豬八戒
測試分數(shù):777
PASSED
test_01.py::test_data[abc2] 測試人物:沙和尚
測試分數(shù):888
PASSED
"""

3告抄、scope參數(shù)說明

scope參數(shù)有四個級別:function(默認)class嵌牺,module打洼,session龄糊。

作用范圍:session > module > class > function

  • scope="function"@pytest.fixture()裝飾器如果不寫參數(shù),默認參數(shù)就是scope="function"拟蜻。它的作用范圍是绎签,在每個測試用例執(zhí)行的前(后)運行一次枯饿。
  • scope="class"@pytest.fixture()裝飾器為class級別的時候酝锅,F(xiàn)ixture方法只在此class里所有用例開始執(zhí)行前(后)執(zhí)行一次。與class中的function沒有關(guān)系奢方。
  • scope="module"@pytest.fixture()裝飾器為module級別的時候搔扁,在一個.py腳本中所有用例開始執(zhí)行前(后)執(zhí)行一次。
  • scope="session"@pytest.fixture()裝飾器為session級別的時候蟋字,是可以跨.py模塊調(diào)用的稿蹲,每個.py文件就是module

?

(1)scope="function"

import pytest


@pytest.fixture(scope="function")
def login():
    print("打開APP")
    print("輸入賬號鹊奖,密碼苛聘,進行登錄")
    yield  # 當用例執(zhí)行完成后,執(zhí)行yield后的代碼
    print("關(guān)閉APP")


def test_add_cart(login):
    print("添加購物車--需要登錄")


def test_browser_goods():
    print("瀏覽商品--不需要登錄")


if __name__ == '__main__':
    pytest.main()


"""
執(zhí)行結(jié)果: 只作用域方法或者函數(shù)范圍

test_01.py::test_add_cart 打開APP
輸入賬號,密碼忠聚,進行登錄
添加購物車--需要登錄
PASSED關(guān)閉APP

test_01.py::test_browser_goods 瀏覽商品--不需要登錄
PASSED
"""

(2)scope="class"

import pytest


@pytest.fixture(scope="class")
def login():
    print("\nscope=class 作用域的前置函數(shù)\n")
    yield  # 當用例執(zhí)行完成后,執(zhí)行yield后的代碼
    print("\n\nscope=class 作用域的后置函數(shù)")


class Test_Demo:

    def test_add_cart(self, login):
        print("添加購物車--測試用例")

    def test_add_address(self):
        print("添加收貨地址--測試用例")


if __name__ == '__main__':
    pytest.main()

"""
執(zhí)行結(jié)果: 只在測試類開始前后執(zhí)行了

scope=class 作用域的前置函數(shù)

添加購物車--測試用例
PASSED
test_01.py::Test_Demo::test_add_address 添加收貨地址--測試用例
PASSED

scope=class 作用域的后置函數(shù)
"""

(3)scope="module"

import pytest


@pytest.fixture(scope="module")
def login():
    print("\nscope=module 作用域的前置函數(shù)\n")
    yield  # 當用例執(zhí)行完成后,執(zhí)行yield后的代碼
    print("\n\nscope=module 作用域的后置函數(shù)")

# 如果該用例不傳入fixture方法设哗,該用例會優(yōu)先與fixture前置執(zhí)行
def test_browser_goods(login):
    print("瀏覽商品--不需要登錄")

class Test_Demo:

    def test_add_cart(self, login):
        print("添加購物車--測試用例")

    def test_add_address(self):
        print("添加收貨地址--測試用例")

class Test_Demo2:

    def test_add_cart(self, login):
        print("第2次-添加購物車--測試用例")

    def test_add_address(self):
        print("第2次-添加收貨地址--測試用例")


if __name__ == '__main__':
    pytest.main()

"""
執(zhí)行結(jié)果: 
說明一下:scope=module時,整個.py模塊中fixture只執(zhí)行一次

scope=module 作用域的前置函數(shù)

瀏覽商品--不需要登錄
PASSED
test_01.py::Test_Demo::test_add_cart 添加購物車--測試用例
PASSED
test_01.py::Test_Demo::test_add_address 添加收貨地址--測試用例
PASSED
test_01.py::Test_Demo2::test_add_cart 第2次-添加購物車--測試用例
PASSED
test_01.py::Test_Demo2::test_add_address 第2次-添加收貨地址--測試用例
PASSED

scope=module 作用域的后置函數(shù)

"""

(4)scope="session"

test_01.py文件中的用例两蟀。

import pytest

@pytest.fixture(scope="session")
def login():
    print("\nscope=session 作用域的前置函數(shù)\n")
    yield  # 當用例執(zhí)行完成后,執(zhí)行yield后的代碼
    print("\n\nscope=session 作用域的后置函數(shù)")

# 如果該用例不傳入fixture方法网梢,該用例會優(yōu)先與fixture前置執(zhí)行
def test_browser_goods(login):
    print("瀏覽商品--不需要登錄")

class Test_Demo:

    def test_add_cart(self, login):
        print("添加購物車--測試用例")

    def test_add_address(self):
        print("添加收貨地址--測試用例")


if __name__ == '__main__':
    pytest.main()

test_02.py文件中的用例。

# 如果該用例不傳入fixture方法赂毯,該用例會優(yōu)先與fixture前置執(zhí)行
def test_browser_goods():
    print("第2次-瀏覽商品--不需要登錄")

class Test_Demo2:

    def test_add_cart(self):
        print("第2次-添加購物車--測試用例")

    def test_add_address(self):
        print("第2次-添加收貨地址--測試用例")

all.py文件內(nèi)容:

import pytest

if __name__ == '__main__':
    pytest.main()

"""
執(zhí)行結(jié)果:只在該包內(nèi)執(zhí)行一次fixture前后置

scope=session 作用域的前置函數(shù)

瀏覽商品--不需要登錄
PASSED
test_01.py::Test_Demo::test_add_cart 添加購物車--測試用例
PASSED
test_01.py::Test_Demo::test_add_address 添加收貨地址--測試用例
PASSED
test_02.py::test_browser_goods 第2次-瀏覽商品--不需要登錄
PASSED
test_02.py::Test_Demo2::test_add_cart 第2次-添加購物車--測試用例
PASSED
test_02.py::Test_Demo2::test_add_address 第2次-添加收貨地址--測試用例
PASSED

scope=session 作用域的后置函數(shù)
"""

說明:

我把session作用域的Fixture寫在了test_01.py文件中战虏,其實應(yīng)該提取出來寫到conftest.py文件中。(后面文章會說明)

all.py文件就是為了執(zhí)行所有測試用例党涕,pytest.ini文件中配置的模糊匹配查詢烦感,這樣兩個文件中的用例就都能執(zhí)行到了。

這里就是一個練習(xí)膛堤,寫的十分不規(guī)范手趣,理解其意思就可以。

4骑祟、autouse參數(shù)說明

示例:實全部用例的前后置

很簡單回懦,只需要把Fixture中的autouse參數(shù)設(shè)置為True即可。

Fixture裝飾器會自動執(zhí)行作用域范圍內(nèi)的所有用例的前后置次企。

import pytest

@pytest.fixture(autouse=True)
def login():
    print("輸入賬號怯晕,密碼,進行登錄")

def test_add_cart():  # 不需要傳入fixture方法
    print("添加購物車--需要登錄")

def test_add_address():  # 不需要傳入fixture方法
    print("添加收貨地址--需要登錄")


if __name__ == '__main__':
    pytest.main()

"""
執(zhí)行結(jié)果:

輸入賬號缸棵,密碼舟茶,進行登錄
添加購物車--需要登錄
PASSED輸入賬號,密碼,進行登錄
添加收貨地址--需要登錄
PASSED
"""
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吧凉,一起剝皮案震驚了整個濱河市隧出,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌阀捅,老刑警劉巖胀瞪,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異饲鄙,居然都是意外死亡凄诞,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門忍级,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帆谍,“玉大人,你說我怎么就攤上這事轴咱⊙打” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵朴肺,是天一觀的道長窖剑。 經(jīng)常有香客問我,道長宇挫,這世上最難降的妖魔是什么苛吱? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮器瘪,結(jié)果婚禮上翠储,老公的妹妹穿的比我還像新娘。我一直安慰自己橡疼,他們只是感情好援所,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著欣除,像睡著了一般住拭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上历帚,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天滔岳,我揣著相機與錄音,去河邊找鬼挽牢。 笑死谱煤,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的禽拔。 我是一名探鬼主播刘离,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼室叉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了硫惕?” 一聲冷哼從身側(cè)響起茧痕,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎恼除,沒想到半個月后踪旷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡缚柳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年埃脏,在試婚紗的時候發(fā)現(xiàn)自己被綠了搪锣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秋忙。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖构舟,靈堂內(nèi)的尸體忽然破棺而出灰追,到底是詐尸還是另有隱情,我是刑警寧澤狗超,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布弹澎,位于F島的核電站,受9級特大地震影響努咐,放射性物質(zhì)發(fā)生泄漏苦蒿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一渗稍、第九天 我趴在偏房一處隱蔽的房頂上張望佩迟。 院中可真熱鬧,春花似錦竿屹、人聲如沸报强。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秉溉。三九已至,卻和暖如春碗誉,著一層夾襖步出監(jiān)牢的瞬間召嘶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工哮缺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弄跌,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓蝴蜓,卻偏偏與公主長得像碟绑,于是被迫代替她去往敵國和親俺猿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容