Pytest基本用法

1历造、pytest的規(guī)則:

①pytest支持 pip安裝。

> pip install pytest

②即測(cè)試文件和測(cè)試函數(shù)必須以“test”開(kāi)頭。這也是在執(zhí)行

“pytest”命令時(shí)并沒(méi)有指定測(cè)試文件也可以執(zhí)行 test_sample.py文件的原因帕膜,因?yàn)樵撐募?/p>

以“test”開(kāi)頭枣氧。

③通過(guò) main()方法執(zhí)行測(cè)試用例呢溢十?當(dāng)然可以垮刹,pytest同樣提供了

main()方法。

import pytest

def inc(x):

return x + 1

def test_answer():

assert inc(3) == 5

if __name__ == '__main__':

pytest.main()

2张弛、基本用法:

①Fixture通常用來(lái)對(duì)測(cè)試方法荒典、測(cè)試函數(shù)、測(cè)試類(lèi)和整個(gè)測(cè)試文件進(jìn)行初始化或還原測(cè)試環(huán)境吞鸭。

主要用到模塊級(jí)別和函數(shù)級(jí)別的 Fixture寺董。

? setup_module/teardown_module:在當(dāng)前文件中,在所有測(cè)試用例執(zhí)行之前與之后

執(zhí)行刻剥。

? setup_function/teardown_function:在每個(gè)測(cè)試函數(shù)之前與之后執(zhí)行遮咖。

? setup/teardown:在每個(gè)測(cè)試函數(shù)之前與之后執(zhí)行。這兩個(gè)方法同樣可以作用于

類(lèi)方法

主要用到類(lèi)級(jí)別和方法級(jí)別的 Fixture造虏。

? setup_class/teardown_class:在當(dāng)前測(cè)試類(lèi)的開(kāi)始與結(jié)束時(shí)執(zhí)行御吞。

? setup_method/teardown_method:在每個(gè)測(cè)試方法開(kāi)始與結(jié)束時(shí)執(zhí)行。

? setup/teardown:在每個(gè)測(cè)試方法開(kāi)始與結(jié)束時(shí)執(zhí)行漓藕,同樣可以作用于測(cè)試函數(shù)陶珠。

運(yùn)行結(jié)果

②pytest是支持使用測(cè)試類(lèi)的,同樣必須以“Test”開(kāi)頭享钞,注意首字母大寫(xiě)揍诽。

③調(diào)用順序如下:setup_module>setup_class>setup_function>setup_method>setup>teardown>teardown_method>teardown_function>teardown_class>teardown_module

#coding:utf-8

import pytest

def multiply(a,b):

? ? return a*b

#-------------------Fixture------------

def setup_module(module):

? ? print("\nsetup_module,只執(zhí)行一次,當(dāng)有多個(gè)測(cè)試類(lèi)的時(shí)候使用")

def teardown_module(module):

? ? print("\nteardown_module,只執(zhí)行一次栗竖,當(dāng)有多個(gè)測(cè)試類(lèi)的時(shí)候使用")

def setup_function(function):

? ? print("\nsetup_function,在每個(gè)測(cè)試函數(shù)之前執(zhí)行暑脆。")

def teardown_function(function):

? ? print("\nteardown_function,在每個(gè)測(cè)試函數(shù)之后執(zhí)行。")

def setup():

? ? print("setup------每個(gè)測(cè)試方式都執(zhí)行一次----------->")

def teardown():

? ? print("teardown-----每個(gè)測(cè)試方式都執(zhí)行一次--------->")

def test_multiply_3_4():

? ? print('test_numbers_3_4')

? ? assert multiply(3,4) == 12

def test_multiply_2_3():

? ? print('test_strings_2_3')

? ? assert multiply(2,3) == 6

class TestPytest1(object):

? ? @classmethod

? ? def setup_class(cls):

? ? ? ? print("\nsetup_class,只執(zhí)行一次")

? ? @classmethod

? ? def teardown_class(cls):

? ? ? ? print("\nteardown_class狐肢,只執(zhí)行一次")

? ? def setup_method(self):

? ? ? ? print("\nsetup_method,每個(gè)測(cè)試方法都執(zhí)行一次")

? ? def teardown_method(self):

? ? ? ? print("\nteardown_method,每個(gè)測(cè)試方式都執(zhí)行一次")

? ? def setup(self):

? ? ? ? print("setup-----每個(gè)測(cè)試方式都執(zhí)行一次------------>>")

? ? def teardown(self):

? ? ? ? print("teardown----每個(gè)測(cè)試方式都執(zhí)行一次---------->>")

? ? def test_numbers_5_6(self):

? ? ? ? print('test_numbers_5_6')

? ? ? ? assert multiply(5,6) == 30

? ? def test_numbers_6_6(self):

? ? ? ? print('test_numbers_6_6')

? ? ? ? assert multiply(6,6) == 36

if __name__ == "__main__":

? ? pytest.main()

3添吗、參數(shù)化:

當(dāng)一組測(cè)試用例有固定的測(cè)試數(shù)據(jù)時(shí),就可以通過(guò)參數(shù)化的方式簡(jiǎn)化測(cè)試用例的編寫(xiě)处坪。

pytest本身是支持參數(shù)化的根资,不需要額外安裝插件。

#pytest參數(shù)化

@pytest.mark.parametrize(

? ? "base,exponent,expected",

? ? [(2,2,4),

? ? (2,3,8),

? ? (1,9,1),

? ? (0,9,0)],

? ? ids=["case1","case2","case3","case4"]

)

def test_pow(base,exponent,expected):

? ? assert math.pow(base,exponent) == expected

if __name__ == "__main__":

? ? pytest.main()

4同窘、運(yùn)行測(cè)試:

“-s”參數(shù)用于關(guān)閉捕捉玄帕,從而從控制臺(tái)輸出打印信息;

“-v”參數(shù)用于增加測(cè)試用例冗長(zhǎng)想邦,打印詳細(xì)的日志信息裤纹,方便定位問(wèn)題。

1.運(yùn)行名稱(chēng)中包含某字符串的測(cè)試用例

> pytest -k add test_assert.py

test_assert.py文件中,我們寫(xiě)了很多測(cè)試用例鹰椒,其中有 4條是關(guān)于 add()功能的锡移,并且在測(cè)試用例的名稱(chēng)上包含了“add”字符串,因此這里可以通過(guò)“-k”來(lái)指定在名稱(chēng)中包含“add”的測(cè)試用例漆际。

pytest -k "類(lèi)名"

pytest -k '方法名'

pytest -k ’類(lèi)名 and not 方法名‘#運(yùn)行類(lèi)里面所有的方法淆珊,不包含某個(gè)方法

2.減少測(cè)試的運(yùn)行冗長(zhǎng)

> pytest -q test_assert.py

“-q”用來(lái)減少測(cè)試運(yùn)行的冗長(zhǎng);也可以使用“--quiet”代替奸汇。

3.如果出現(xiàn)一條測(cè)試用例失敗施符,則退出測(cè)試

> pytest -x test_fail.py

這在測(cè)試用例的調(diào)試階段是有用的,當(dāng)出現(xiàn)一條失敗的測(cè)試用例時(shí)擂找,應(yīng)該先通過(guò)調(diào)試讓這條測(cè)試用例運(yùn)行通過(guò)戳吝,而不是繼續(xù)執(zhí)行后面的測(cè)試用例。

4.用例失敗個(gè)數(shù)達(dá)到閾值停止運(yùn)行贯涎。具體用法:

>pytest --maxfail=[num]

5.運(yùn)行測(cè)試目錄

> pytest ./test_dir

測(cè)試目錄既可以指定相對(duì)路徑(如 ./test_dir)听哭,也可以指定絕對(duì)路(D:\pytest\test_dir)

6.指定特定類(lèi)或方法執(zhí)行

> pytest test_fixtures_02.py::TestMultiply::test_numbers_5_6

這里指定運(yùn)行 test_fixtures_02.py文件中 TestMultiply類(lèi)下的 test_numbers_5_6()方法,文件名塘雳、類(lèi)名和方法名之間用“::”符號(hào)分隔陆盘。

7.通過(guò) main()方法運(yùn)行測(cè)試

import pytest

if __name__ == '__main__':

pytest.main(['-s', './test_dir'])

創(chuàng)建 run_tests.py文件,在文件中通過(guò)數(shù)組指定參數(shù)粉捻,每個(gè)參數(shù)為數(shù)組中的一個(gè)元素礁遣。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市肩刃,隨后出現(xiàn)的幾起案子祟霍,更是在濱河造成了極大的恐慌凶掰,老刑警劉巖咽筋,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件副瀑,死亡現(xiàn)場(chǎng)離奇詭異躺酒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)慎式,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)蝴光,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吭历,“玉大人叛氨,你說(shuō)我怎么就攤上這事呼渣。” “怎么了寞埠?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵屁置,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我仁连,道長(zhǎng)蓝角,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮使鹅,結(jié)果婚禮上揪阶,老公的妹妹穿的比我還像新娘。我一直安慰自己患朱,他們只是感情好鲁僚,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著麦乞,像睡著了一般蕴茴。 火紅的嫁衣襯著肌膚如雪劝评。 梳的紋絲不亂的頭發(fā)上姐直,一...
    開(kāi)封第一講書(shū)人閱讀 49,821評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音蒋畜,去河邊找鬼声畏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛姻成,可吹牛的內(nèi)容都是我干的插龄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼科展,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼均牢!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起才睹,我...
    開(kāi)封第一講書(shū)人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤徘跪,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后琅攘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體垮庐,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年坞琴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哨查。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剧辐,死狀恐怖寒亥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荧关,我是刑警寧澤溉奕,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站羞酗,受9級(jí)特大地震影響腐宋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一胸竞、第九天 我趴在偏房一處隱蔽的房頂上張望欺嗤。 院中可真熱鬧,春花似錦卫枝、人聲如沸煎饼。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吆玖。三九已至,卻和暖如春马篮,著一層夾襖步出監(jiān)牢的瞬間沾乘,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工浑测, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留翅阵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓迁央,卻偏偏與公主長(zhǎng)得像掷匠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子岖圈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349