逼逼兩句:目前測試自動化領(lǐng)域比較火就是這個pytest的自動化測試框架了,兄弟們抓緊學(xué)習(xí)呀。
我對個pytest了解、知道它的存在就是不會用,上不了手從而導(dǎo)致無法落實(shí)項(xiàng)目上。
跟我有一樣處境的兄弟們,來一起組隊(duì)打怪吧!歡迎組隊(duì),資源相互分享哦!!!
第一章:
一、pytest:
1.1安裝pytest
1.在python環(huán)境下運(yùn)行下命令即可:
pip install -u pytest
2.檢查安裝的朋友test的版本信息:
pyest --version
1.2創(chuàng)建第一個測試
test_sample.py
def func(x):
return x + 1
def test_answer():
assert func(3) == 5
1.2.1內(nèi)容補(bǔ)充:
pytest規(guī)則
結(jié)果類型:(以下是測試功能的幾種常見的結(jié)果)
? PASSED(.):測試成功
? FAILED(F): 測試失?。〝嘌允。? ? ERROR (E):錯誤
? XFAIL:預(yù)期失敗,加了 @pytest.mark.xfail()
1.3運(yùn)行多個測試
pytest會運(yùn)行當(dāng)前目錄及子目錄下所有以test_*.py和*_test.py命名的文件。
文件匹配方式遵循Standard test discovery rules(標(biāo)準(zhǔn)測試發(fā)現(xiàn)規(guī)則)
1.4 判斷是否發(fā)生了指定的異常-------沒有懂哦,后續(xù)研究
使用raises可以判斷代碼是否拋出了異常:
# test_sysexit.py 的內(nèi)容
import pytest
def f():
raise SystemExit(1)
def test_mytest():
with pytest.raises(SystemExit):
f()
使用"quiet"模式來執(zhí)行這個測試:
$ pytest ‐q test_sysexit.py
1.5將多個測試用例放在一個class中包含多個測試用例的class:
class TestClass(object):
def test_one(self):
x = "this"
assert 'h' in x
def test_two(self):
x = "hello"
assert hasattr(x, 'check')
1.5.1補(bǔ)充
前言:測試用例的預(yù)期結(jié)果是用例不可缺少的一部分,那么斷言就是自動化測試不可缺少的一步,一個沒有斷言的用例,自動化測試的就沒有意義了。
那什么是斷言呢?簡單來講就是實(shí)際結(jié)果和期望結(jié)果去對比,符合預(yù)期那就測試 pass,不符合預(yù)期那就測試 failed
Pytest里面使用關(guān)鍵字assert,斷言為一個表達(dá)式,只要表達(dá)式的最終結(jié)果為True,那么斷言通過,用例執(zhí)行成功,否則用例執(zhí)行失敗
Assert 常用斷言方式:pytest里面斷言實(shí)際上就是python里面的assert斷言方法,常用的有以下幾種
? assert xx 判斷xx為真
? assert not xx 判斷xx不為真
? assert a in b 判斷b包含a
? assert a == b 判斷a等于b
? assert a != b 判斷a不等于b
1.6為測試創(chuàng)建唯一的臨時(shí)文件夾
pytest 提供 Builtin fixtures/function arguments來創(chuàng)建任意的資源,比如一個具有唯一的臨時(shí)文件夾:
# test_tmpdir.py的內(nèi)容
def test_needsfiles(tmpdir):
print(tmpdir)
assert 0
如果函數(shù)的簽名中(函數(shù)簽名包括函數(shù)的參數(shù)和返回值,以及參數(shù)的封送順序等等)包含參數(shù)tmpdir,
pytest就會在執(zhí)行測試用例之前查找并調(diào)用特定的fixture創(chuàng)建所需資源。
在本例中,pytest會創(chuàng)建一個unique-per-test-invocation臨時(shí)文件夾
關(guān)于tmpdir的更多信息請參考Temporary directories and files 通過下面的命令可以查看所有內(nèi)置的pytest fixture
1.6.1補(bǔ)充
pytest fixture
1.fixture概念
fixture是 pytest 用于將測試前后進(jìn)行預(yù)備、清理工作的代碼處理機(jī)制。
2.fixture優(yōu)勢
fixture相對于unittest中的setup和teardown來說有以下幾點(diǎn)優(yōu)勢:
? fixure命名更加靈活,局限性比較小;
? conftest.py 配置里面可以實(shí)現(xiàn)數(shù)據(jù)共享,不需要import就能自動找到一些配置;
? scope="session"可以實(shí)現(xiàn)多個.py跨文件使用一個session來完成多個用例。
pytest之fixture的認(rèn)識參考: https://blog.csdn.net/weixin_46745811/article/details/122384070