python單元測試框架pytest的使用示例
首先祝大家國慶節(jié)日快樂,這個假期因為我老婆要考注會,我也跟著天天去圖書館學了幾天,學習的感覺還是非常不錯的,這是一篇總結。
這篇博客準備講解一下pytest測試框架,這個框架是當前最流行的python語言最流行的單測框架,不掌握可不行,首先這個框架屬于第三方模塊,需要通過pip安裝即可
pip install pytest
下面我們進入正題
一、介紹pytest的運行規(guī)則
1、測試文件的名稱必須要以test_*.py的格式,或者*_test.py的格式
2、測試類的名稱必須要以Test開頭,且這個類還不能有構造方法(__init__)
3、測試函數(shù)的名稱必須要以test開頭
pytest默認的就按照上面的三條規(guī)則來執(zhí)行案例,當然我們可以自定義運行規(guī)則,這個我們后面在講,這個不重要,看一個最簡單的例子
import os
import pytest
# pytest是python的單元測試框架
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的前置條件和后置條件,類似unittest的testfixture(測試固件)
如果同學們之前用過unittest測試框架,對測試固件這個這個名詞就不會陌生了,如果不清楚,可以看下之前我寫的unittest測試框架的博客(http://www.dhdzp.com/article/197004.htm)
pytest框架的測試固件有兩種,一種函數(shù)級別的,一種是類級別,執(zhí)行的順序如下
a、執(zhí)行類的前置條件
b、執(zhí)行函數(shù)的前置條件
c、執(zhí)行函數(shù)的后置條件
d、執(zhí)行類的后置條件
使用也非常簡單,當時函數(shù)的命名一定要和我下面的備注保持完全一致
# pytest的前置和后置條件 # 1、函數(shù)級別 setup teardown # 運行于測試方法的開始和結束 # 運行一個測試用例,會運行一次setup和teardown # 2、類級 setup_class teardown_class # 運行于測試類的開始和結束 # 一個測試類只運行一次setup_class teardown_class
1、函數(shù)式的案例--函數(shù)級別的前置條件&后置條件
import os
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 func(2) == 3
def setup():
print("函數(shù)級別的前置")
def teardown():
print("函數(shù)級別的后置")
執(zhí)行結果如下

2、類式的案例--函數(shù)級別的前置條件&后置條件
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ù)級別的前置")
def teardown(self):
print("函數(shù)級別的后置")
if __name__ == '__main__':
pytest.main(["-s","pytest2.py"])
執(zhí)行結果如下

3、類級別的前置條件&后臺置條件
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ù)級別的前置")
def teardown(self):
print("函數(shù)級別的后置")
def setup_class(self):
print("類級別的前置")
def teardown_class(self):
print("類級別的后置")
if __name__ == '__main__':
pytest.main(["-s","pytest3.py"])
結果如下

三、介紹如何修改pytest的配置文件
我們在博客的第一部分介紹了pytest框架的運行規(guī)則,這里我們可以修改pytest的配置文件,改變框架運行規(guī)則
首先我們要在案例的目錄下創(chuàng)建一個pytest.ini的配置文件

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

通過上面的步驟,我們就可以改變pytest的運行規(guī)則
四、介紹pytest的斷言
pytest的斷言是用python的斷言,他不像unittest框架,他自己實現(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的標記(mark)
1、可以實現(xiàn)給函數(shù)打標記,實現(xiàn)哪些標記執(zhí)行,哪些標記不執(zhí)行
一個函數(shù)可以打多個標記,一個標記同時可以給多個函數(shù)打標記。只需要讓這個標記的裝飾器函數(shù)裝飾我們的測試類或者測試函數(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、標記可以實現(xiàn)不跳過某個、某些案例的作用
# -*- coding:utf-8 -*-
import pytest
# skip跳過執(zhí)行某個案例
@pytest.mark.skip(reson="只是這個函數(shù)用例不執(zhí)行")
def test_a():
print("testa")
def test_b():
print("testb")
@pytest.mark.skip(reson="整個類下的案例都不會執(zhí)行")
class Test_skip():
def test_a(self):
print("testa")
def test_b(self):
print("testb")
# 可以根據(jù)條件判斷,為真,則不執(zhí)行
@pytest.mark.skipif(1 > 2,reson="整個類下的案例滿足條件都不會執(zhí)行")
class Test_skipif():
def test_a(self):
print("testa")
def test_b(self):
print("testb")
六、介紹pytest的數(shù)據(jù)參數(shù)化
1、傳入單個參數(shù)
# pytest的數(shù)據(jù)參數(shù)化
# 1、傳入單個參數(shù)
#
# pytest.mark.parametrize(argnames,argvalues)
# argnames 參數(shù)的名稱
#
# argvalues 參數(shù)對應的值,類型必須是可迭代的類型,一般使用list
@pytest.mark.skip(reson="只是這個函數(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"])
實現(xiàn)的效果name作為參數(shù)的名稱,這個案例會執(zhí)行4次,參數(shù)分別是name=“cui1”\name="cui2"\....

2、傳入多個參數(shù)
import pytest
# pytest的數(shù)據(jù)參數(shù)化
# 1、傳入多個參數(shù)
#
# pytest.mark.parametrize((argnames1,argnames2),[(argvalues1,argvalues1),(argvalues1,argvalues1)],(argvalues1,argvalues1)]])
@pytest.mark.skip(reson="只是這個函數(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"])
實現(xiàn)的效果如下

七、介紹pyest的常用第三方插件
1、美化pytest的輸出報告插件
# pip install pytest-html # 用來美化輸出報告的插件 # 只需要在配置文件中加這個配置即可 # # addopts=-s --html=report.html
效果


2、失敗案例重試插件,下面的示例實現(xiàn)的就是失敗重啟3,失敗后間隔2s在進行重試
# pip install pytest-rerunfailures # 失敗重試的第三方插件 # 只需要在配置文件中加這個配置即 # --reruns 3 --reruns-delay 2
至此,pytest的框架基本使用已經(jīng)講解清楚,小伙伴們還有不清楚的嗎?歡迎大家來溝通?。?!
到此這篇關于python單元測試框架pytest的使用示例的文章就介紹到這了,更多相關python單元測試框架pytest內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python 批量驗證和添加手機號碼為企業(yè)微信聯(lián)系人
你是否也有過需要添加很多微信好友的時候,一個個輸入添加太麻煩了,本篇文章手把手教你用Python替我們完成這繁瑣的操作,大家可以在過程中查缺補漏,看看自己掌握程度怎么樣2021-10-10
利用Python實現(xiàn)網(wǎng)絡測試的示例代碼
Speedtest CLI 為命令行帶來 Speedtest 背后的可信技術和全球服務器網(wǎng)絡。本文將利用它進行網(wǎng)絡測試,感興趣的小伙伴可以了解一下2022-04-04
解決plt.savefig()保存到本地的圖片上下左右會有白邊
這篇文章主要介紹了解決plt.savefig()保存到本地的圖片上下左右會有白邊的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
如何使用Python的Requests包實現(xiàn)模擬登陸
這篇文章主要為大家詳細介紹了使用Python的Requests包模擬登陸,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04
python數(shù)據(jù)庫操作常用功能使用詳解(創(chuàng)建表/插入數(shù)據(jù)/獲取數(shù)據(jù))
這篇文章主要介紹了python數(shù)據(jù)庫操作常用功能使用方法:獲取mysql版本、創(chuàng)建表、插入數(shù)據(jù)、slect獲取數(shù)據(jù)等,下面看示例吧2013-12-12
python爬取分析超級大樂透歷史開獎數(shù)據(jù)
這篇文章主要介紹了python爬取分析超級大樂透歷史開獎數(shù)據(jù),本次使用了requests和beautifulsoup庫進行數(shù)據(jù)的爬取,通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02
利用Pytorch實現(xiàn)ResNet網(wǎng)絡構建及模型訓練
這篇文章主要為大家介紹了利用Pytorch實現(xiàn)ResNet網(wǎng)絡構建及模型訓練詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04

