pytest單元測試框架(1)基礎(chǔ)操作運(yùn)行

1.安裝 pytest是python語言的一個測試的第三方的庫,那么我們首先需要-安裝它斤贰,安裝的命令是:
pip install -U pytest

----------------------------------------------------------------

2.第一個程序運(yùn)行:運(yùn)行方法吹零,進(jìn)入.py文件制定目錄席函,輸入pytest

class Testclass:
    def test_one(self):
        x='this'
        assert 'h' in x
    def test_two(self):
        x='hello'
        assert hasattr(x,'hello')
# hasattr(object,name)判斷對象object是否包含對應(yīng)的屬性或方法
image.png

----------------------------------------------------------------

3.如何編寫pytest測試樣例

  • 編寫pytest測試樣例非常簡單炮姨,只需要按照下面的規(guī)則:
  • 測試文件以test_開頭(以_test結(jié)尾也可以)
  • 測試類以Test開頭窗价,并且不能帶有 init 方法:Class Test_...如庭,必須要大寫的T
  • 測試函數(shù)以test_開頭:def test_....
  • 斷言使用基本的assert即可,pytest會執(zhí)行文件中所有test_*.py 或 *_test.py格式的文件以及以test開頭的方法或者class撼港,不然就會提示找不到可以運(yùn)行的case了

----------------------------------------------------------------

4.運(yùn)行指定的case坪它。當(dāng)我們寫了較多的cases時,如果每次都要全部運(yùn)行一遍帝牡,無疑是很浪費(fèi)時間的往毡,通過指定case來運(yùn)行就很方便了。

class Testclassone():
    def test_one(self):
        x='this'
        assert 't' in x
    
    def test_two(self):
        x='hello'
        assert hasattr(x,'check')
        
class Testclasstwo():
    def test_third(self):
        x='iphone'
        assert 'p' in x
    
    def test_forth(self):
        x='apple'
        assert hasattr(x,'check')

#1)運(yùn)行指定的文件靶溜,pytest 文件名.py    pytest test_01.py
#2)運(yùn)行指定的類:pytest test_py.py::class Testclassone
#3)運(yùn)行指定類下的方法:pytest test_py.py::class Testclasstwo::test_forth

----------------------------------------------------------------

5.運(yùn)行后生成測試報告(htmlReport)
1)安裝 pip install -U pytest-html
生成HTML格式報告:pytest --resultlog=path
運(yùn)行模式:
a开瞭、pytest --html=report.html
b、pytest --html=report.html --self-contained-html #可以把css樣式合并到html里,方便別人查看
2)指定某個case生成報告罩息,和制定執(zhí)行某個case的方法一樣:pytest test_py.py::class Testclassone --html=report.htm

image.png

----------------------------------------------------------------

6.向在線pastebin服務(wù)發(fā)送測試報告
1)為每個測試失敗的創(chuàng)建一個url嗤详,執(zhí)行的命令是:pytest --pastebin=failed,見執(zhí)行命令后的截圖:

image.png

image.png

2)為所有的測試創(chuàng)建url瓷炮,執(zhí)行的命令是:pytest --pastebin=all

----------------------------------------------------------------

7.多進(jìn)程運(yùn)行cases
1)安裝pytest-xdist:pip install -U pytest-xdist
2)運(yùn)行模式:pytest test_se.py -n NUM 其中NUM填寫并發(fā)的進(jìn)程數(shù)葱色。

----------------------------------------------------------------

8.重試運(yùn)行cases:在做接口測試時,有事會遇到503或短時的網(wǎng)絡(luò)波動娘香,導(dǎo)致case運(yùn)行失敗苍狰,而這并非是我們期望的結(jié)果办龄,此時可以就可以通過重試運(yùn)行cases的方式來解決
1)安裝pytest-rerunfailures: pip install -U pytest-rerunfailures
2)運(yùn)行模式:pytest test_se.py --reruns NUM 其中NUM填寫重試的次數(shù)。

image.png

----------------------------------------------------------------

8.顯示print內(nèi)容
在運(yùn)行測試腳本時舞痰,為了調(diào)試或打印一些內(nèi)容土榴,我們會在代碼中加一些print內(nèi)容,但是在運(yùn)行pytest時响牛,這些內(nèi)容不會顯示出來玷禽。如果帶上-s,就可以顯示了呀打。
1)運(yùn)行模式:pytest test_se.py -s

image.png

另外矢赁,pytest的多種運(yùn)行模式是可以疊加執(zhí)行的,比如說贬丛,你想同時運(yùn)行4個進(jìn)程撩银,又想打印出print的內(nèi)容〔蜚荆可以用:
2)pytest test_se.py -s -n 4

----------------------------------------------------------------

9.傳參

import pytest

data=[('admin','123123'),('admin','')]
def login(user,pwd):
'''普通登錄函數(shù)'''
    print('登錄賬戶:%s' %user)
    print('登錄密碼:%s' %pwd)
    if pwd:
        return True
    else:
        return False
@pytest.mark.parametrize("user,pwd",data)
def test_login(user,pwd):
    '''登錄用例'''
    result=login(user,pwd)
    assert result==True,'失敗原因额获,密碼為空'
if __name__ =='__main__':
    pytest.main(["-s","test_01.py"])

----------------------------------------------------------------

10.conftest配置文件:不需要導(dǎo)入,與運(yùn)行的用例文件要在同一個pakage下恭应,并且有init.py文件
conftest.py:

import pytest

@pytest.fixture()
def login():
    print('輸入賬號抄邀,密碼先登錄')
    yield
    print('執(zhí)行teardown!')
    print('最后關(guān)閉瀏覽器')

test_01.py:

import pytest

def test_one(login):
    print('用例1:登錄之后其它動作111')
def test_two():    #不傳login
    print('用例2:不需要登錄昼榛,操作222')
def test_third(login):
    print('用例3:登錄之后其它操作333'

----------------------------------------------------------------

11.parametrize參數(shù)化
1)單項參數(shù)化

import pytest

@pytest.mark.parametrize("test_input,expected",
                        [ ("3+5", 8),
                          ("2+4", 6),
                          ("6 * 9", 42),
                        ])
#test_input&expected為形參變量境肾,多個變量用逗號分隔,所有變量用引號擴(kuò)起胆屿。參數(shù)用列表一起擴(kuò)起奥喻,多個參數(shù)逗號分隔,為列表
def test_eval(test_input, expected):
    assert eval(test_input) == expected
if __name__ =="__main__":
    pytest.main(["-s", "test_canshu1.py"])

注意:parametrize里的參數(shù)變量名稱要和def里的一致

image.png

2)參數(shù)組合

import pytest

@pytest.mark.parametrize('x',[0,1])
@pytest.mark.parametrize('y',[2,3])
def test_1(x,y):
    print('測試數(shù)據(jù)組合:x->%s,y->%s' %(x,y))
if __name__ == '__main__':
    pytest.main(['-s','test_01.py'])
image.png

12.一鍵安裝
pytest有很多插件非迹,我們?nèi)绻麊为毎惭b很費(fèi)時間环鲤,那么下面記錄一個簡單的方法:

  • 準(zhǔn)備一個plug.txt文件,將需要安裝的插件名稱寫入
plug.txt

pytest
pytest-html
pytest-xdist
pytest-ordering
pytest-rerunfailures
allure-pytest
  • 將plug.txt放入項目根目錄下
  • Pycharm啟動終端彻秆,執(zhí)行命令:pytest install -r plug.txt即可

參數(shù)說明

-vs: -v輸出詳細(xì)信息楔绞,-s輸出調(diào)試信息
-n:多線程運(yùn)行(pytest-xdist)
--reruns=num:失敗用例重跑
-x:出現(xiàn)一個用例失敗,則停止測試
--maxfail=num:錯num個用例失敗唇兑,才停止測試
--html:生成報告 --html ./report/report.html
-k:運(yùn)行測試用例包含某個字符串的用例

PS:喜歡的朋友,希望多多點贊打賞桦锄,謝謝啦~扎附!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市结耀,隨后出現(xiàn)的幾起案子留夜,更是在濱河造成了極大的恐慌匙铡,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碍粥,死亡現(xiàn)場離奇詭異鳖眼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嚼摩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門钦讳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人枕面,你說我怎么就攤上這事愿卒。” “怎么了潮秘?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵琼开,是天一觀的道長。 經(jīng)常有香客問我枕荞,道長柜候,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任躏精,我火速辦了婚禮渣刷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘玉控。我一直安慰自己飞主,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布高诺。 她就那樣靜靜地躺著碌识,像睡著了一般。 火紅的嫁衣襯著肌膚如雪虱而。 梳的紋絲不亂的頭發(fā)上筏餐,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天,我揣著相機(jī)與錄音牡拇,去河邊找鬼魁瞪。 笑死,一個胖子當(dāng)著我的面吹牛惠呼,可吹牛的內(nèi)容都是我干的导俘。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼剔蹋,長吁一口氣:“原來是場噩夢啊……” “哼旅薄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泣崩,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤少梁,失蹤者是張志新(化名)和其女友劉穎洛口,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凯沪,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡第焰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了妨马。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挺举。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖身笤,靈堂內(nèi)的尸體忽然破棺而出豹悬,到底是詐尸還是另有隱情,我是刑警寧澤液荸,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布瞻佛,位于F島的核電站,受9級特大地震影響娇钱,放射性物質(zhì)發(fā)生泄漏伤柄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一文搂、第九天 我趴在偏房一處隱蔽的房頂上張望适刀。 院中可真熱鬧,春花似錦煤蹭、人聲如沸笔喉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽常挚。三九已至,卻和暖如春稽物,著一層夾襖步出監(jiān)牢的瞬間奄毡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工贝或, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留吼过,地道東北人。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓咪奖,卻偏偏與公主長得像盗忱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子羊赵,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容