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)的屬性或方法
----------------------------------------------------------------
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
----------------------------------------------------------------
6.向在線pastebin服務(wù)發(fā)送測試報告
1)為每個測試失敗的創(chuàng)建一個url嗤详,執(zhí)行的命令是:pytest --pastebin=failed,見執(zhí)行命令后的截圖:
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ù)。
----------------------------------------------------------------
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
另外矢赁,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里的一致
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'])
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:喜歡的朋友,希望多多點贊打賞桦锄,謝謝啦~扎附!