自动化测试pythontest_自动化测试教程-Pytest的基本应用
在Python的編程語(yǔ)言中,單元測(cè)試框架主要是pytest,unittest,和nose,其中應(yīng)用最廣泛的是unittest和pytest測(cè)試框架,unittest測(cè)試框架是內(nèi)置的模塊,安裝完P(guān)ython的解釋器后,就可以直接導(dǎo)入使用,但是使用它的時(shí)候必須是繼承TestCase類(lèi),才可以調(diào)用里面的方法,但是缺陷也是很明顯的,它只能應(yīng)用于面向?qū)ο蟮木幊谭绞?#xff0c;無(wú)法應(yīng)用于函數(shù)式的編程方式,Python語(yǔ)言它的優(yōu)勢(shì)的是可以是面向?qū)ο蟮木幊谭绞?#xff0c;也可以是函數(shù)式的編程方式。pytest就顯得自由,它把每一個(gè)以test_開(kāi)頭或者是_test結(jié)尾的都看成是一個(gè)測(cè)試對(duì)象,同時(shí)它的斷言是Python的原生斷言assert,這樣使用起來(lái)更加的自由,只要編寫(xiě)的不管是模塊還是類(lèi),符合它的要求,都是可以執(zhí)行的。但是前提是需要安裝pytest,它是屬于第三方的庫(kù),安裝的命令為:
pip ?install pytest
在這里先寫(xiě)一個(gè)函數(shù)的測(cè)試代碼,來(lái)說(shuō)明pytest的應(yīng)用,創(chuàng)建f.py的模塊,在里面編寫(xiě)以test開(kāi)頭的測(cè)試代碼,然后在該目錄下執(zhí)行pytest,發(fā)現(xiàn)測(cè)試代碼并沒(méi)有執(zhí)行,見(jiàn)如下截圖:
為什么測(cè)試代碼沒(méi)有執(zhí)行了?這是因?yàn)樵趐ytest中,它會(huì)首先尋找以test_開(kāi)頭或者以_test結(jié)尾的測(cè)試模塊,然后執(zhí)行模塊里面以test_開(kāi)頭或者是以_test結(jié)尾的測(cè)試代碼,這里依據(jù)這個(gè)要去,編寫(xiě)測(cè)試模塊,如下:
再次執(zhí)行pytest,就會(huì)看到模塊里面的測(cè)試代碼都已執(zhí)行,見(jiàn)如下的截圖信息:
當(dāng)然也查看詳細(xì)的信息,使用到的命令為:pytest -v 就會(huì)顯示出詳細(xì)的執(zhí)行信息,如下圖所示:
在詳細(xì)的信息中,會(huì)顯示出執(zhí)行了那個(gè)模塊中的那個(gè)具體的測(cè)試用例,再完善下模塊中的測(cè)試用例,執(zhí)行多少個(gè),在詳細(xì)的信息中它都會(huì)顯示出來(lái),見(jiàn)完善后執(zhí)行的截圖信息,如下圖所示:
在一個(gè)項(xiàng)目文件中,或者說(shuō)是一個(gè)測(cè)試的包下面,會(huì)有很多的測(cè)試模塊文件,但是并不是所有的測(cè)試模塊文件需要執(zhí)行,只是想執(zhí)行某一個(gè)模塊文件,那么就只需要在執(zhí)行的時(shí)候指定這個(gè)文件就可以了,執(zhí)行的命令為:pytest -v ?test_xunit_002.py,見(jiàn)執(zhí)行后的結(jié)果截圖信息:
見(jiàn)如上的截圖信息,就只顯示了test_xunit_002.py模塊的測(cè)試代碼,并沒(méi)有執(zhí)行另外一個(gè)模塊的測(cè)試用例。
下面繼續(xù)看Pytest中對(duì)測(cè)試用例執(zhí)行結(jié)果的顯示,如果是正確的顯示passwd,也會(huì)使用.來(lái)表示,如果是錯(cuò)誤的,也就是執(zhí)行失敗的,使用F來(lái)表示,也就是FAILED,完善test_xunit_0002.py模塊的代碼,見(jiàn)源碼:
見(jiàn)執(zhí)行后正確的和錯(cuò)誤的信息的表示,見(jiàn)如下的截圖信息:
在執(zhí)行結(jié)果中會(huì)顯示出錯(cuò)誤的詳細(xì)信息,以及成功的個(gè)數(shù)和失敗的個(gè)數(shù)。
在pytest框架中,如果沒(méi)有指定目錄,它默認(rèn)是會(huì)搜索一個(gè)項(xiàng)目下所有可執(zhí)行的測(cè)試模塊以及測(cè)試模塊里面的測(cè)試用例來(lái)進(jìn)行的,并不在乎測(cè)試用例是在哪個(gè)package那個(gè)模塊的,這樣的一個(gè)過(guò)程成為“測(cè)試搜索”,只要符合它的規(guī)則的它都是會(huì)被執(zhí)行的。在這里,增加幾個(gè)包,在包里面增加幾個(gè)測(cè)試模塊,見(jiàn)目錄結(jié)構(gòu)的設(shè)計(jì):
再次使用pytest -v來(lái)進(jìn)行執(zhí)行,來(lái)看“測(cè)試搜索”的過(guò)程,見(jiàn)執(zhí)行的截圖,如下圖所示 :
依據(jù)如上的結(jié)果信息,pytest測(cè)試搜索的規(guī)則為:
1.測(cè)試文件最好是test開(kāi)頭或者是test為結(jié)尾
2.測(cè)試函數(shù)或者測(cè)試類(lèi)方法應(yīng)該當(dāng)是test開(kāi)頭或者是test為結(jié)尾
3.測(cè)試類(lèi)應(yīng)當(dāng)命名為T(mén)est
下來(lái)依據(jù)案例繼續(xù)看執(zhí)行單個(gè)測(cè)試用例的文件,主要分為這么幾個(gè)場(chǎng)景,第一個(gè)場(chǎng)景是執(zhí)行某一個(gè)模塊下的某一個(gè)測(cè)試用例,第二個(gè)場(chǎng)景是執(zhí)行某個(gè)模塊下某一分類(lèi)的測(cè)試用例,先來(lái)看第一個(gè)場(chǎng)景,指定模塊下具體的測(cè)試用例,見(jiàn)執(zhí)行的命令:
如果某一個(gè)測(cè)試用例名稱(chēng)是唯一的,或者說(shuō)是某一些分類(lèi),那么就可以使用命令行的-k,以及--collect-ony,-k允許使用表達(dá)式指定希望運(yùn)行的測(cè)試用例,或者多個(gè)前綴或者是后綴的測(cè)試用例名稱(chēng)相同,--collect-only主要的應(yīng)用于篩選,見(jiàn)模塊的源碼:
當(dāng)然也可以顯示出執(zhí)行的詳細(xì)的信息:
-m是可以很快速到找到測(cè)試類(lèi)別的分組,比如登錄模塊是一部分的測(cè)試用例,退出是一部分的測(cè)試用例,這里我們還是以開(kāi)放平臺(tái)為案例,也就是說(shuō)在一個(gè)測(cè)試模塊中 ,有很多的測(cè)試用例,但是只是想執(zhí)行openapi的測(cè)試用例,見(jiàn)案例代碼:
這里實(shí)現(xiàn)只是單純的執(zhí)行openapi的測(cè)試用例,其它的測(cè)試模塊就不再執(zhí)行了,執(zhí)行的命令是:pytest -m openapi,見(jiàn)執(zhí)行后的結(jié)果截圖:
見(jiàn)執(zhí)行的詳細(xì)信息:
在實(shí)際的測(cè)試場(chǎng)景中,一般性的我們希望不管測(cè)試用例執(zhí)行失敗也好成功也好,都希望測(cè)試用例能夠正常的執(zhí)行,但是也有一種場(chǎng)景是執(zhí)行的時(shí)候遇到測(cè)試用例執(zhí)行失敗,就立刻停止,這里會(huì)使用到的命令是-x,見(jiàn)案例代碼:
我們希望測(cè)試用例執(zhí)行失敗,就立刻停止,執(zhí)行的命令為:pytest -x
執(zhí)行到第二個(gè)測(cè)試用例,由于斷言失敗,所以測(cè)試用例再?zèng)]有繼續(xù)執(zhí)行。這是符合我們的預(yù)期結(jié)果的。當(dāng)然也可以指定最大失敗的次數(shù),它的命令為:--maxfail=參數(shù),參數(shù)也就是指的是最大的失敗次數(shù)。繼續(xù)執(zhí)行,執(zhí)行的命令為:pytest --mailfail=參數(shù)
上面指的是最大失敗的次數(shù)是0,所以也就等于不管是否失敗,都執(zhí)行所有的測(cè)試用例。這個(gè)需求相對(duì)來(lái)說(shuō)使用的還是比較少,一般的來(lái)說(shuō)我們都還是希望所有的測(cè)試用例執(zhí)行,到最后再說(shuō)具體結(jié)果的事,失敗的當(dāng)然再具體定位和分析,然后得出比較客觀的結(jié)論報(bào)告。--tb=no是關(guān)閉錯(cuò)誤信息,--tb=short是輸出assert錯(cuò)誤的信息,--tb=line是一行輸出所有的所有,具體依據(jù)如下的截圖信息來(lái)看這三個(gè)的區(qū)別和它的應(yīng)用場(chǎng)景,第一個(gè)場(chǎng)景是有錯(cuò)誤,但是不顯示錯(cuò)誤的信息,執(zhí)行的命令是:pytest --tb=no
第二個(gè)場(chǎng)景是有錯(cuò)誤就只輸出assert的這一行的信息,執(zhí)行的命令為:pytest --tb=short
第三場(chǎng)景是顯示錯(cuò)誤信息,并且顯示在一行的內(nèi)容,執(zhí)行的命令為:pytest --tb=line,如下圖所示:
--lf命令值的是執(zhí)行測(cè)試用例失敗后,希望能夠定位到該測(cè)試用例并且重新執(zhí)行,它的好處是能夠很快速的找到失敗的測(cè)試用例見(jiàn)案例的源碼:
中間的測(cè)試用例斷言它是存在問(wèn)題,但是我們希望能夠很快速的定位到,執(zhí)行的命令為:pytest --lf,見(jiàn)輸出結(jié)果截圖:
顯示出第二個(gè)測(cè)試用例失敗,很快速的定位到了,并且顯示出了斷言的失敗信息。
--ff是執(zhí)行完剩余的測(cè)試用例,是一個(gè)很奇怪的解釋,是不是意味著執(zhí)行終止了,然后由它負(fù)責(zé)執(zhí)行完剩余的測(cè)試用例了,是否和-x命令沖突了,執(zhí)行的命令為:pytest --ff
-v就是很簡(jiǎn)單了,打印出很詳細(xì)的信息,-q與-v是相反的,就是打印出簡(jiǎn)單的信息,見(jiàn)執(zhí)行的命令:
如上可以看到打印的信息確實(shí)很簡(jiǎn)單的,但是有個(gè)好處是失敗的測(cè)試用例它還是顯示出了很詳細(xì)的信息的。這點(diǎn)我覺(jué)得特別的好。
--duration是統(tǒng)計(jì)出那些測(cè)試用例執(zhí)行速度慢,這點(diǎn)在接口測(cè)試特別的好用,可以看到那個(gè)接口請(qǐng)求響應(yīng)慢,默認(rèn)是0,耗時(shí)從長(zhǎng)到短依次排序顯示,見(jiàn)案例的源碼,同樣的網(wǎng)絡(luò)環(huán)境測(cè)試那個(gè)網(wǎng)站訪問(wèn)速度快。
執(zhí)行的命令為:pytest --duration=0,見(jiàn)執(zhí)行后的命令信息:
真的是沒(méi)有對(duì)比就沒(méi)有傷害,有了對(duì)比傷害也就出來(lái)了,百度的耗時(shí)是最長(zhǎng)是,淘寶是耗時(shí)是最短的。結(jié)果是那么的讓人不可思議的。
總結(jié)
以上是生活随笔為你收集整理的自动化测试pythontest_自动化测试教程-Pytest的基本应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python杨辉三角_干货|杨辉三角与二
- 下一篇: map初始化_需要掌握的Go基础之map