日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python單元測(cè)試框架pytest的使用示例

瀏覽:33日期:2022-07-09 09:17:47

首先祝大家國(guó)慶節(jié)日快樂(lè),這個(gè)假期因?yàn)槲依掀乓甲?huì),我也跟著天天去圖書(shū)館學(xué)了幾天,學(xué)習(xí)的感覺(jué)還是非常不錯(cuò)的,這是一篇總結(jié)。

這篇博客準(zhǔn)備講解一下pytest測(cè)試框架,這個(gè)框架是當(dāng)前最流行的python語(yǔ)言最流行的單測(cè)框架,不掌握可不行,首先這個(gè)框架屬于第三方模塊,需要通過(guò)pip安裝即可

pip install pytest

下面我們進(jìn)入正題

一、介紹pytest的運(yùn)行規(guī)則

1、測(cè)試文件的名稱(chēng)必須要以test_*.py的格式,或者*_test.py的格式

2、測(cè)試類(lèi)的名稱(chēng)必須要以Test開(kāi)頭,且這個(gè)類(lèi)還不能有構(gòu)造方法(__init__)

3、測(cè)試函數(shù)的名稱(chēng)必須要以test開(kāi)頭

pytest默認(rèn)的就按照上面的三條規(guī)則來(lái)執(zhí)行案例,當(dāng)然我們可以自定義運(yùn)行規(guī)則,這個(gè)我們后面在講,這個(gè)不重要,看一個(gè)最簡(jiǎn)單的例子

import osimport pytest # pytest是python的單元測(cè)試框架 def func(x): return x + 1 def test_a(): print('____test_a____') assert func(2) == 5 def test_b(): print('____test_b____') assert func(2) == 3 if __name__ == ’__main__’: pytest.main(['-s','pytest1.py'])

二、介紹pytest的前置條件和后置條件,類(lèi)似unittest的testfixture(測(cè)試固件)

如果同學(xué)們之前用過(guò)unittest測(cè)試框架,對(duì)測(cè)試固件這個(gè)這個(gè)名詞就不會(huì)陌生了,如果不清楚,可以看下之前我寫(xiě)的unittest測(cè)試框架的博客(https://www.jb51.net/article/197004.htm)

pytest框架的測(cè)試固件有兩種,一種函數(shù)級(jí)別的,一種是類(lèi)級(jí)別,執(zhí)行的順序如下

a、執(zhí)行類(lèi)的前置條件

b、執(zhí)行函數(shù)的前置條件

c、執(zhí)行函數(shù)的后置條件

d、執(zhí)行類(lèi)的后置條件

使用也非常簡(jiǎn)單,當(dāng)時(shí)函數(shù)的命名一定要和我下面的備注保持完全一致

# pytest的前置和后置條件 # 1、函數(shù)級(jí)別 setup teardown# 運(yùn)行于測(cè)試方法的開(kāi)始和結(jié)束# 運(yùn)行一個(gè)測(cè)試用例,會(huì)運(yùn)行一次setup和teardown # 2、類(lèi)級(jí) setup_class teardown_class# 運(yùn)行于測(cè)試類(lèi)的開(kāi)始和結(jié)束# 一個(gè)測(cè)試類(lèi)只運(yùn)行一次setup_class teardown_class

1、函數(shù)式的案例--函數(shù)級(jí)別的前置條件&后置條件

import osimport pytest def func(x): return x + 1 def test_a(): print('____test_a____') assert func(2) == 5 def test_b(): print('____test_b____') assert func(2) == 3 def setup(): print('函數(shù)級(jí)別的前置') def teardown(): print('函數(shù)級(jí)別的后置')

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

python單元測(cè)試框架pytest的使用示例

2、類(lèi)式的案例--函數(shù)級(jí)別的前置條件&后置條件

class Testclass: def test_a(self): print('____test_a____') assert func(2) == 5 def test_b(self): print('____test_b____') assert func(2) == 3 def setup(self): print('函數(shù)級(jí)別的前置') def teardown(self): print('函數(shù)級(jí)別的后置')if __name__ == ’__main__’: pytest.main(['-s','pytest2.py'])

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

python單元測(cè)試框架pytest的使用示例

3、類(lèi)級(jí)別的前置條件&后臺(tái)置條件

import pytest def func(x): return x + 1 class Testclass: def test_a(self): print('____test_a____') assert func(2) == 5 def test_b(self): print('____test_b____') assert func(2) == 3 def setup(self): print('函數(shù)級(jí)別的前置') def teardown(self): print('函數(shù)級(jí)別的后置') def setup_class(self): print('類(lèi)級(jí)別的前置') def teardown_class(self): print('類(lèi)級(jí)別的后置')if __name__ == ’__main__’: pytest.main(['-s','pytest3.py'])

結(jié)果如下

python單元測(cè)試框架pytest的使用示例

三、介紹如何修改pytest的配置文件

我們?cè)诓┛偷牡谝徊糠纸榻B了pytest框架的運(yùn)行規(guī)則,這里我們可以修改pytest的配置文件,改變框架運(yùn)行規(guī)則

首先我們要在案例的目錄下創(chuàng)建一個(gè)pytest.ini的配置文件

python單元測(cè)試框架pytest的使用示例

內(nèi)容如下

# 創(chuàng)建pytest.ini文件# [pytest]# addopts=-s#這個(gè)先這樣寫(xiě),這個(gè)主要是執(zhí)行參數(shù) # testpaths = testcase# 只執(zhí)行這個(gè)目錄下的文件## python_files = test_*.py#執(zhí)行的文件的名字 # python_classes = Test_*#執(zhí)行類(lèi)的名字 # python_functions = test_*# 執(zhí)行函數(shù)的名字

配置文件截圖

python單元測(cè)試框架pytest的使用示例

通過(guò)上面的步驟,我們就可以改變pytest的運(yùn)行規(guī)則

四、介紹pytest的斷言

pytest的斷言是用python的斷言,他不像unittest框架,他自己實(shí)現(xiàn)了斷言

# -*- coding:utf-8 -*- # pytest是使用python自帶的斷言import pytest def func(x): return x + 1 def test_a(): print('____test_a____') assert func(2) == 5 def test_b(): print('____test_b____') assert not func(2) == 3 def test_c(): print('____test_b____') assert func(2) in ['a','b','c'] def test_d(): print('____test_b____') assert func(2) not in ['a','b','c'] if __name__ == ’__main__’: pytest.main(['-s','pytest5.py'])

五、介紹pytest的標(biāo)記(mark)

1、可以實(shí)現(xiàn)給函數(shù)打標(biāo)記,實(shí)現(xiàn)哪些標(biāo)記執(zhí)行,哪些標(biāo)記不執(zhí)行

一個(gè)函數(shù)可以打多個(gè)標(biāo)記,一個(gè)標(biāo)記同時(shí)可以給多個(gè)函數(shù)打標(biāo)記。只需要讓這個(gè)標(biāo)記的裝飾器函數(shù)裝飾我們的測(cè)試類(lèi)或者測(cè)試函數(shù)

class Test_mark(): @pytest.mark.test01 def test_a(self): print('mark test a') @pytest.mark.test02 def test_b(self): print('mark test b') if __name__ == ’__main__’: pytest.main([’-s’,'pytest6.py'])

還有其它的執(zhí)行方式

# pytest -m test01 # pytest -n 'test01 or test02' # pytest -m 'not test01'

2、標(biāo)記可以實(shí)現(xiàn)不跳過(guò)某個(gè)、某些案例的作用

# -*- coding:utf-8 -*- import pytest # skip跳過(guò)執(zhí)行某個(gè)案例@pytest.mark.skip(reson='只是這個(gè)函數(shù)用例不執(zhí)行')def test_a(): print('testa') def test_b(): print('testb') @pytest.mark.skip(reson='整個(gè)類(lèi)下的案例都不會(huì)執(zhí)行')class Test_skip(): def test_a(self): print('testa') def test_b(self): print('testb') # 可以根據(jù)條件判斷,為真,則不執(zhí)行@pytest.mark.skipif(1 > 2,reson='整個(gè)類(lèi)下的案例滿(mǎn)足條件都不會(huì)執(zhí)行')class Test_skipif(): def test_a(self): print('testa') def test_b(self): print('testb')

六、介紹pytest的數(shù)據(jù)參數(shù)化

1、傳入單個(gè)參數(shù)

# pytest的數(shù)據(jù)參數(shù)化 # 1、傳入單個(gè)參數(shù)## pytest.mark.parametrize(argnames,argvalues)# argnames 參數(shù)的名稱(chēng)## argvalues 參數(shù)對(duì)應(yīng)的值,類(lèi)型必須是可迭代的類(lèi)型,一般使用list @pytest.mark.skip(reson='只是這個(gè)函數(shù)用例不執(zhí)行')def test_a(): print('testa') @pytest.mark.parametrize('name',['cui1','cui2','cui3','cui4'])def test_b(name): print('testb----->{name}'.format(name = name)) if __name__ == ’__main__’: pytest.main(['-s', 'pytest8.py'])

實(shí)現(xiàn)的效果name作為參數(shù)的名稱(chēng),這個(gè)案例會(huì)執(zhí)行4次,參數(shù)分別是name=“cui1”name='cui2'....

python單元測(cè)試框架pytest的使用示例

2、傳入多個(gè)參數(shù)

import pytest # pytest的數(shù)據(jù)參數(shù)化 # 1、傳入多個(gè)參數(shù)## pytest.mark.parametrize((argnames1,argnames2),[(argvalues1,argvalues1),(argvalues1,argvalues1)],(argvalues1,argvalues1)]]) @pytest.mark.skip(reson='只是這個(gè)函數(shù)用例不執(zhí)行')def test_a(): print('testa') @pytest.mark.parametrize(('name','age'),[('cui1',12),('cui2',13),('cui3',14)])def test_b(name,age): print('testb----->{name}----->{age}'.format(name = name,age = age)) if __name__ == ’__main__’: pytest.main(['-s', 'pytest9.py'])

實(shí)現(xiàn)的效果如下

python單元測(cè)試框架pytest的使用示例

七、介紹pyest的常用第三方插件

1、美化pytest的輸出報(bào)告插件

# pip install pytest-html # 用來(lái)美化輸出報(bào)告的插件# 只需要在配置文件中加這個(gè)配置即可## addopts=-s --html=report.html

效果

python單元測(cè)試框架pytest的使用示例

python單元測(cè)試框架pytest的使用示例

2、失敗案例重試插件,下面的示例實(shí)現(xiàn)的就是失敗重啟3,失敗后間隔2s在進(jìn)行重試

# pip install pytest-rerunfailures# 失敗重試的第三方插件# 只需要在配置文件中加這個(gè)配置即# --reruns 3 --reruns-delay 2

至此,pytest的框架基本使用已經(jīng)講解清楚,小伙伴們還有不清楚的嗎?歡迎大家來(lái)溝通!!!

到此這篇關(guān)于python單元測(cè)試框架pytest的使用示例的文章就介紹到這了,更多相關(guān)python單元測(cè)試框架pytest內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
91精品婷婷色在线观看| 亚洲18在线| 日韩影院在线观看| 好看不卡的中文字幕| 亚洲福利免费| 国产一区观看| 偷拍欧美精品| 欧美天堂亚洲电影院在线观看| 91精品国产乱码久久久久久久| 日韩高清中文字幕一区二区| 成人自拍av| 不卡视频在线| 中文一区一区三区免费在线观 | 国产精品日本欧美一区二区三区| 蜜桃av.网站在线观看| 国产中文欧美日韩在线| 日韩1区2区日韩1区2区| 亚洲精品三级| 国产伦一区二区三区| 亚洲综合福利| 视频一区在线视频| 日韩不卡一区二区三区| 国产精品极品国产中出| 日韩av在线播放网址| 日韩精品一区二区三区免费观影| 精品一区毛片| 国产日韩中文在线中文字幕 | 日韩1区2区日韩1区2区| 精品视频网站| 99国产精品自拍| 国产精品porn| 99精品网站| 国产日韩中文在线中文字幕| 日韩和的一区二在线| 视频一区日韩| 日韩欧美一区二区三区在线观看| 视频一区在线播放| 亚洲不卡系列| 麻豆精品新av中文字幕| 一区在线免费观看| 日韩精品免费视频人成| 国产综合婷婷| 中文在线免费视频| 久久精品超碰| 日韩影院精彩在线| 亚洲国内欧美| 日韩欧美1区| 91精品日本| 石原莉奈在线亚洲三区| 欧美成a人免费观看久久| 美腿丝袜在线亚洲一区| 亚洲专区视频| 亚洲欧美不卡| 亚洲国产综合在线看不卡| 精品资源在线| 视频一区二区欧美| 黄色成人91| 欧美特黄一区| 夜夜嗨网站十八久久| www成人在线视频| 久久青青视频| 日韩免费av| 欧美三级精品| 蜜桃精品在线| 国产aⅴ精品一区二区四区| 亚洲第一区色| 成人精品国产亚洲| 日韩一区自拍| 欧美一级鲁丝片| 午夜国产欧美理论在线播放| 黄毛片在线观看| 91av亚洲| 一区在线视频观看| 91精品91| 97久久精品| 蜜臀国产一区| 四虎成人精品一区二区免费网站| 欧美日韩亚洲一区| 国产 日韩 欧美一区| 少妇精品久久久一区二区 | 国产精品任我爽爆在线播放| 成人精品视频| 亚洲视频播放| 国产在线一区不卡| 欧美一区在线观看视频| 蜜臀av免费一区二区三区| 久久精品高清| 国产精品久久亚洲不卡| 亚洲综合二区| 日韩电影免费网址| 亚洲二区在线| 久久av免费| 婷婷中文字幕一区| 国产情侣一区| 国产高清亚洲| 91精品福利| 日韩精品一级中文字幕精品视频免费观看 | 欧美男人天堂| 蜜桃tv一区二区三区| 中文在线а√天堂| 国产一区视频在线观看免费| 亚洲激情精品| 麻豆久久一区二区| 天堂网av成人| 亚洲精品97| 18国产精品| 黄色av日韩| 成人在线视频区| 国产剧情一区二区在线观看| 亚洲激情精品| 国产日韩亚洲| 日韩精品91亚洲二区在线观看| 蜜臀a∨国产成人精品| 乱人伦精品视频在线观看| 天堂а√在线最新版中文在线| 综合国产在线| 日韩精品免费视频人成| 欧美+日本+国产+在线a∨观看| 日韩高清在线不卡| 精品72久久久久中文字幕| 国产欧美在线| 日韩av专区| 99精品一区| 婷婷综合六月| 日韩欧美午夜| 国产亚洲一卡2卡3卡4卡新区| 日韩高清一区二区| 欧美偷窥清纯综合图区| 性色一区二区| 国产在线|日韩| 日本不卡的三区四区五区| 美女网站久久| 亚洲精品看片| 国产欧美日韩精品一区二区免费 | 99久久激情| 亚洲精品一二三区区别| 欧美另类综合| 亚洲少妇自拍| 国产精品网站在线看| 日韩成人三级| 日韩欧美自拍| 久久精品97| 日韩三区四区| 亚洲高清成人| 久久精品国产68国产精品亚洲| 亚洲第一精品影视| 国产高潮在线| 日韩和欧美一区二区三区| 精品视频一二| 波多野结衣一区| 国产91久久精品一区二区| 欧美aa在线视频| 日韩和的一区二在线| 伊人久久av| 国产视频欧美| 老牛国内精品亚洲成av人片| 国产免费播放一区二区| 六月天综合网| 国产亚洲永久域名| 国产日韩一区二区三免费高清| 欧美特黄一区| а√天堂8资源在线| 亚洲精品在线a| 午夜国产精品视频| 成年男女免费视频网站不卡| 成人片免费看| 久久香蕉网站| 久久久噜噜噜| 国产欧美大片| 久久中文字幕av一区二区不卡| 日本久久二区| 国产视频一区三区| av免费不卡国产观看| 日韩精品视频网站| 最新中文字幕在线播放| 在线精品一区二区| 九九精品调教| 久久亚洲道色| 亚洲最新av| 激情丁香综合| 日本欧美国产| 日韩国产网站| 成人在线观看免费视频| 日韩精品久久久久久久软件91| 一本一道久久a久久精品蜜桃| 卡一精品卡二卡三网站乱码| 美女91精品| 在线视频日韩| 国户精品久久久久久久久久久不卡| 国产亚洲一区| 91精品日本| 国产韩日影视精品| 精品国产欧美日韩| 欧美激情 亚洲a∨综合| 日韩国产91| 国产探花一区| 国产精品羞羞答答在线观看| 欧美日韩99| 国产日韩在线观看视频| 欧美日韩亚洲一区三区|