Pytest+Allure搭建接口框架(五)

前言:前面我們已經(jīng)對pytest有個大致的了解了滋饲,現(xiàn)在我們開始深入的挖掘它一些其他功能吧先改!

三、進階

A)玩轉(zhuǎn)裝飾器@pytest.fixture
主要作用:通常會被用于完成預(yù)置處理和重復(fù)操作朵诫。

@pytest.fixture(scope="function", params=None, autouse=False, ids=None, name=None)

常用參數(shù):scope:被標記方法的作用域
function" (default):作用于每個測試方法,每個test都運行一次
"class":作用于整個類毅哗,每個class的所有test只運行一次
"module":作用于整個模塊,每個module的所有test只運行一次
"session:作用于整個session捧挺,每個session只運行一次
params:(list類型)提供參數(shù)數(shù)據(jù)虑绵,供調(diào)用標記方法的函數(shù)使用
autouse:是否自動運行,默認為False不運行寝凌,設(shè)置為True自動運行

case1:@pytest.fixture(autouse=True)

import pytest


@pytest.fixture(autouse=True)
def must():
    print("======》first & must run")


class TestCase:

    def setup_class(self):
        print("=======>setup class")

    def teardown_class(self):
        print("=======>teardown class")

    def test_one(self):
        assert 0 == 1

    def test_twp(self):
        assert 1 == 1


if __name__ == '__main__':
    pytest.main(['-s', 'test_report.py'])

結(jié)果如下:

test_report.py =======>setup class
======》first & must run
F======》first & must run
.=======>teardown class

你嘗試下會發(fā)現(xiàn)標志了@pytest.fixture(autouse=True)會在每個測試函數(shù)運行前運行裕偿,且運行優(yōu)先級高于setup/teardown函數(shù)而低于setup_class/teardown_class函數(shù)诚些。

case2:@pytest.fixture() # 參數(shù)引用

import pytest


class TestCase:

    @pytest.fixture() 
    def para(self):
        print('=====>para func')
        return 1

    def test_one(self, para):  # 以變量形式傳入
        a = para + 1
        assert a == 2


if __name__ == '__main__':
    pytest.main(['-s', 'test_report.py'])

運行結(jié)果如下:

test_report.py =====>para func
.

========================== 1 passed in 0.05 seconds ===========================

同時邓尤,被@pytest.fixture標記的函數(shù)也可以作返回值、函數(shù)引用... ...

case3:@pytest.fixture(scope="function")

import pytest


@pytest.fixture(scope='function', autouse=True)
def para():
    print('=====>para func')


class TestCase:
    def test_one(self):
        assert 1 == 2

    def test_two(self):
        assert 2 == 2


def test_para():
    assert 0 != 0


if __name__ == '__main__':
    pytest.main(['-s', 'test_report.py'])

運行結(jié)果如下:

test_report.py =====>para func
F=====>para func
.=====>para func
F

建議大家使用上面的代碼切換scope限制不同的區(qū)域渴肉,體驗scope的效果。

case4:@pytest.fixture(params=[1,2,3])

import pytest


@pytest.fixture(params=[1, 2, 3])  # 注意此處必須是可迭代的參數(shù)
def data(request):
    print("=====>data")
    return request.param


class TestCas:
    def test_one(self, data):
        print("=====>test_one")
        assert data > 1


if __name__ == '__main__':
    pytest.main(['-s', 'test_report.py'])

運行結(jié)果為:

test_report.py =====>data
=====>test_one
F=====>data
=====>test_one
.=====>data
=====>test_one
.

進階二、跳過待測試函數(shù)

主要作用:跳過標記的測試cases摊溶。

import pytest


a = 2


class TestCase:
    @pytest.mark.skip('跳過測試')
    def test_one(self):
        assert 1 == 2

    @pytest.mark.skipif(condition=a > 1, reason='若condition成立則跳過測試')
    def test_two(self):
        assert 2 == 2

    def test_para(self):
        assert 0 != 1


if __name__ == '__main__':
    pytest.main(['-s', 'test_report.py'])

運行結(jié)果為:

test_report.py ss.

進階三、標記為預(yù)期失敗的測試用例

主要作用:預(yù)先標記測試用例為失敗的充石,方便局部執(zhí)行莫换。

import pytest


a = 2

class TestCase:
   @pytest.mark.xfail(condition=a > 1, reason='若condition成立則跳過測試')
   def test_two(self):
       assert 2 == 2

   def test_para(self):
       assert 0 != 1


if __name__ == '__main__':
   pytest.main(['-s', 'test_report.py'])

運行結(jié)果為:

test_report.py X.

進階四、測試函數(shù)添加待測參數(shù)

主要作用:為待測試的case迭代多個參數(shù)骤铃,減少多數(shù)測試case的重復(fù)編寫拉岁。

import pytest


class TestCase:
    @pytest.mark.parametrize('a', [1, 2])
    def test_two(self, a):
        print("====test data: %s" % a)
        assert 2 == 2

    def test_para(self):
        assert 0 != 1


if __name__ == '__main__':
    pytest.main(['-s', 'test_report.py'])

執(zhí)行結(jié)果如下:

test_report.py ====test data: 1
.====test data: 2
.

總結(jié)

好了,pytest庫就暫告一段落惰爬,接著我要開始重構(gòu)我的測試框架了喊暖。期間時間可能稍微久一點,我還是會繼續(xù)學(xué)習(xí)的~
加油K呵啤A赀础!

?著作權(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)容