pytest之fixture前置后置設(shè)置、打標(biāo)記糠溜、重運(yùn)行

首先來看看設(shè)置unittest前置后置的方法:

unittest:

? ? ? ? ? setup/teardown

? ? ? ? ? setup當(dāng)中得到的變量,怎么傳遞給測試用例的:self.XXX = value

? ? ? ? ? setupClass,tearDownClass

? ? ? ? ? setupClass當(dāng)中得到的變量直撤,怎么傳遞給測試用例的:cls.XXX = value

fixture前置后置的方法:

原則上:先定義再調(diào)用非竿、共享。

定義:

1谊惭、用函數(shù)實(shí)現(xiàn)汽馋,函數(shù)名稱不固定。--- 如何知道它是前置還是后置圈盔?

@pytest.fixture

def fix():

? ? pass

2豹芯、前置操作和后置操作,寫在一個(gè)函數(shù)里驱敲。 --用yeild 關(guān)鍵字區(qū)分前置后置

? @pytest.fixture

def fix():

? ? 前置代碼

? ? yeild? #分隔線

? ? 后置代碼

3铁蹈、4個(gè)作用域,即給到這4個(gè)類型的語句試用的前置后置众眨,4選一握牧,默認(rèn)是測試函數(shù)類型。測試函數(shù)(function)娩梨、測試類(class)沿腰、測試模塊文件(module)、測試會(huì)話(session)

@pytest.fixture(scope=function(默認(rèn)值)/class/module/session)

def fix():

? ? ? ? 前置代碼

? ? ? ? yeild? #分隔線

? ? ? ? 后置代碼

4狈定、不跟測試類/測試函數(shù)放在一起颂龙。 ---如果說有測試類要用的話,怎么辦纽什?需要的時(shí)候再調(diào)用措嵌。

5、前置操作得到的一些數(shù)據(jù)芦缰,如何傳遞給測試用例企巢?

yeild返回值

在測試用例當(dāng)中:以fixture函數(shù)名作為用例參數(shù)。用例參數(shù)接收返回值让蕾。

測試函數(shù)的參數(shù):1浪规、fixture? 2或听、參數(shù)化

6、共享機(jī)制:conftest.py

conftest.py定義fixture,可以定義多個(gè)罗丰。

7神帅、調(diào)用:

用例/類 主動(dòng)調(diào)用fixtures.

? 哪兒需要哪兒調(diào):

@pytest.mark.usefixtures("fixture的函數(shù)名稱")

? 測試類/測試函數(shù)

如果fixture有返回值,那么萌抵,將它作為測試函數(shù)的參數(shù)時(shí)找御,則可以不用使用:@pytest.mark.usefixtures("fixture的函數(shù)名稱")

參考代碼:

conftest.py共享

原則上:

1、所在目錄下全面共享

2绍填、支持嵌套

conftest.py規(guī)則:

1霎桅、放的都是fixture

2、fixtures可以對外共享讨永。

3滔驶、共享的范圍:

? 當(dāng)前conftest.py所在目錄下的(含子孫目錄),所有用例共享

4卿闹、conftest.py揭糕,是可以創(chuàng)建多個(gè),在不同的包下锻霎≈牵可以層級創(chuàng)建的。

5旋恼、優(yōu)先級:就近原則@艨凇!

? ? 發(fā)現(xiàn)fiXture:用例自己的模塊 -》用例所在目錄下的conftest.py -》目錄的父級目錄下的conftest.py

6冰更、嵌套方式:

? 6.1什么時(shí)候嵌套产徊?? 一個(gè)fixture,想完全使用另外一個(gè)fixture,并在人家的基礎(chǔ)上新增一些代碼蜀细。

? 6.2怎么嵌套舟铜?

@pytest.fixture

def fix1():

? ? ? ? ? ?pass

@pytest.fixture

def fix2(fix1):

? ? ? ? ? ? #新增的代碼

? ? ? ? ? ? pass

6.3嵌套后的執(zhí)行順序?

? ? ? fix1的前置

? ? ? fix2的前置

? ? ? fix2的后置

? ? ? fix1的后置

? 6.4可以任意fixture級別嵌套嗎奠衔?

? ? ? fix1 >= fix2的級別

數(shù)據(jù)驅(qū)動(dòng)實(shí)現(xiàn):

@pytest.mark.parametrized()

在測試用例的前面加上:

@pytest.mark.parametrize("參數(shù)名",列表數(shù)據(jù))

參數(shù)名:用來接收每一項(xiàng)數(shù)據(jù)蛋褥,并作為測試用例的參數(shù)丧凤。

列表數(shù)據(jù):一組測試數(shù)據(jù)郭脂。

@pytest.mark.parametrize("參數(shù)1,參數(shù)2",[(數(shù)據(jù)1智亮,數(shù)據(jù)2),(數(shù)據(jù)1聂儒,數(shù)據(jù)2)])

示例:

@pytest.mark.parametrize("a,b,c",[(1,3,4),(10,35,45),(22.22,22.22,44.44)])

def test_add(a,b,c):

? ? ? ? ? res = a + b

? ? ? ? ? assert res == c

組合參數(shù)化:多組參數(shù)迹恐,依次組合看彼。

使用多個(gè)@pytest.mark.parametrize

示例:用例有4個(gè):0,2/0,3/1,2/1,3 迪卡爾積

@pytest.mark.parametrize("x", [0, 1])

@pytest.mark.parametrize("y", [2, 3])

def test_foo(x, y):

? ? ? ? ? pass

打標(biāo)記:mark功能

對用例打標(biāo)記瓷马,運(yùn)行的時(shí)候难捌,只運(yùn)行打標(biāo)記的用例膝宁。

300個(gè)回歸用例鸦难。-- 打標(biāo)記50個(gè),作為冒煙測試员淫。

1合蔽、得先注冊標(biāo)記名

pytest.ini

[pytest]

markers=

? ? ? ?標(biāo)簽名:說明(只能是英文)

? ? ? ? 標(biāo)簽名

? ? ? ? 標(biāo)簽名

圖示:

2、給測試用例/測試類打標(biāo)記

? @pytest.mark.已注冊的標(biāo)記名

3介返、運(yùn)行時(shí)設(shè)置只運(yùn)行標(biāo)記的用例

?使用方法-1: pytest命令行:-m標(biāo)記名

? 在收集到的所有用例當(dāng)中拴事,只運(yùn)行有標(biāo)記名的用例。

另外一種方式:

打標(biāo)記范圍:測試用例圣蝎、測試類刃宵、模塊文件

使用方法-2:

在測試類里,使用以下申明(測試類下徘公,所有用例都被打上該標(biāo)簽):

class TestClass(object):

? ? ? ? ?pytestmark = pytest.mark.已注冊標(biāo)簽名

? ? ? ? ?pytestmark = [pytest.mark.標(biāo)簽1, pytest.mark.標(biāo)簽2]? #多標(biāo)簽?zāi)J?/p>

在 模塊文件里牲证,同理(py文件下,所有測試函數(shù)和測試類里的測試函數(shù)关面,都有該標(biāo)簽):

import pytest

pytestmark = pytest.mark.webtest

pytestmark = [pytest.mark.標(biāo)簽1, pytest.mark.標(biāo)簽2]? #多標(biāo)簽?zāi)J?/p>


失敗重運(yùn)行機(jī)制? :

用例失敗的情況下坦袍,可以重運(yùn)行用例。

一旦用例失敗等太,馬上重運(yùn)行捂齐。重運(yùn)行的次數(shù)?

Pytest提供了失敗重試機(jī)制:

插件名稱:rerunfailures

? ? 安裝方法:pip install pytest-rerunfailures

使用方式:

命令行參數(shù)形式:

命令:pytest --reruns 重試次數(shù)

比如:pytest --reruns 2 表示:運(yùn)行失敗的用例可以重新運(yùn)行2次澈驼。

命令:pytest --reruns 重試次數(shù)--reruns-delay 次數(shù)之間的延時(shí)設(shè)置(單位:秒)

Pytest --reruns 2 --reruns-delay 5

? ? 表示失敗的用例可以重新運(yùn)行2次辛燥。第一次和第二次的間隔時(shí)間為5秒鐘。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缝其,一起剝皮案震驚了整個(gè)濱河市挎塌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌内边,老刑警劉巖榴都,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異漠其,居然都是意外死亡嘴高,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門和屎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拴驮,“玉大人,你說我怎么就攤上這事柴信√灼。” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵随常,是天一觀的道長潜沦。 經(jīng)常有香客問我萄涯,道長,這世上最難降的妖魔是什么唆鸡? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任涝影,我火速辦了婚禮,結(jié)果婚禮上争占,老公的妹妹穿的比我還像新娘燃逻。我一直安慰自己,他們只是感情好燃乍,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布唆樊。 她就那樣靜靜地躺著,像睡著了一般刻蟹。 火紅的嫁衣襯著肌膚如雪逗旁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天舆瘪,我揣著相機(jī)與錄音片效,去河邊找鬼。 笑死英古,一個(gè)胖子當(dāng)著我的面吹牛淀衣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播召调,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼膨桥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了唠叛?” 一聲冷哼從身側(cè)響起只嚣,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎艺沼,沒想到半個(gè)月后册舞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡障般,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年调鲸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挽荡。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡藐石,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出定拟,到底是詐尸還是另有隱情贯钩,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站角雷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏性穿。R本人自食惡果不足惜勺三,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望需曾。 院中可真熱鬧吗坚,春花似錦、人聲如沸呆万。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谋减。三九已至牡彻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間出爹,已是汗流浹背庄吼。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留严就,地道東北人总寻。 一個(gè)月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像梢为,于是被迫代替她去往敵國和親渐行。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359