欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python單元測(cè)試框架pytest的使用示例

 更新時(shí)間:2020年10月07日 14:13:19   作者:bai_nian_min_guo  
這篇文章主要介紹了python單元測(cè)試框架pytest的使用示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

首先祝大家國(guó)慶節(jié)日快樂(lè),這個(gè)假期因?yàn)槲依掀乓甲?huì),我也跟著天天去圖書(shū)館學(xué)了幾天,學(xué)習(xí)的感覺(jué)還是非常不錯(cuò)的,這是一篇總結(jié)。

這篇博客準(zhǔn)備講解一下pytest測(cè)試框架,這個(gè)框架是當(dāng)前最流行的python語(yǔ)言最流行的單測(cè)框架,不掌握可不行,首先這個(gè)框架屬于第三方模塊,需要通過(guò)pip安裝即可

pip install pytest

下面我們進(jìn)入正題

一、介紹pytest的運(yùn)行規(guī)則

1、測(cè)試文件的名稱(chēng)必須要以test_*.py的格式,或者*_test.py的格式

2、測(cè)試類(lèi)的名稱(chēng)必須要以Test開(kāi)頭,且這個(gè)類(lèi)還不能有構(gòu)造方法(__init__)

3、測(cè)試函數(shù)的名稱(chēng)必須要以test開(kāi)頭

pytest默認(rèn)的就按照上面的三條規(guī)則來(lái)執(zhí)行案例,當(dāng)然我們可以自定義運(yùn)行規(guī)則,這個(gè)我們后面在講,這個(gè)不重要,看一個(gè)最簡(jiǎn)單的例子

import os
import pytest
 
# pytest是python的單元測(cè)試框架
 
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的前置條件和后置條件,類(lèi)似unittest的testfixture(測(cè)試固件)

如果同學(xué)們之前用過(guò)unittest測(cè)試框架,對(duì)測(cè)試固件這個(gè)這個(gè)名詞就不會(huì)陌生了,如果不清楚,可以看下之前我寫(xiě)的unittest測(cè)試框架的博客(http://www.dbjr.com.cn/article/197004.htm

pytest框架的測(cè)試固件有兩種,一種函數(shù)級(jí)別的,一種是類(lèi)級(jí)別,執(zhí)行的順序如下

a、執(zhí)行類(lèi)的前置條件

b、執(zhí)行函數(shù)的前置條件

c、執(zhí)行函數(shù)的后置條件

d、執(zhí)行類(lèi)的后置條件

使用也非常簡(jiǎn)單,當(dāng)時(shí)函數(shù)的命名一定要和我下面的備注保持完全一致

# pytest的前置和后置條件
 
# 1、函數(shù)級(jí)別 setup teardown
# 運(yùn)行于測(cè)試方法的開(kāi)始和結(jié)束
# 運(yùn)行一個(gè)測(cè)試用例,會(huì)運(yùn)行一次setup和teardown
 
# 2、類(lèi)級(jí) setup_class teardown_class
# 運(yùn)行于測(cè)試類(lèi)的開(kāi)始和結(jié)束
# 一個(gè)測(cè)試類(lèi)只運(yùn)行一次setup_class teardown_class

1、函數(shù)式的案例--函數(shù)級(jí)別的前置條件&后置條件

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ù)級(jí)別的前置")
 
def teardown():
 print("函數(shù)級(jí)別的后置")

執(zhí)行結(jié)果如下

2、類(lèi)式的案例--函數(shù)級(jí)別的前置條件&后置條件

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ù)級(jí)別的前置")
 
 def teardown(self):
  print("函數(shù)級(jí)別的后置")
if __name__ == '__main__':
 pytest.main(["-s","pytest2.py"])

執(zhí)行結(jié)果如下

3、類(lèi)級(jí)別的前置條件&后臺(tái)置條件

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ù)級(jí)別的前置")
 
 def teardown(self):
  print("函數(shù)級(jí)別的后置")
  
 def setup_class(self):
  print("類(lèi)級(jí)別的前置")
 
 def teardown_class(self):
  print("類(lèi)級(jí)別的后置")
if __name__ == '__main__':
 pytest.main(["-s","pytest3.py"])

結(jié)果如下

三、介紹如何修改pytest的配置文件

我們?cè)诓┛偷牡谝徊糠纸榻B了pytest框架的運(yùn)行規(guī)則,這里我們可以修改pytest的配置文件,改變框架運(yùn)行規(guī)則

首先我們要在案例的目錄下創(chuàng)建一個(gè)pytest.ini的配置文件

內(nèi)容如下

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

配置文件截圖

通過(guò)上面的步驟,我們就可以改變pytest的運(yùn)行規(guī)則

四、介紹pytest的斷言

pytest的斷言是用python的斷言,他不像unittest框架,他自己實(shí)現(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的標(biāo)記(mark)

1、可以實(shí)現(xiàn)給函數(shù)打標(biāo)記,實(shí)現(xiàn)哪些標(biāo)記執(zhí)行,哪些標(biāo)記不執(zhí)行

一個(gè)函數(shù)可以打多個(gè)標(biāo)記,一個(gè)標(biāo)記同時(shí)可以給多個(gè)函數(shù)打標(biāo)記。只需要讓這個(gè)標(biāo)記的裝飾器函數(shù)裝飾我們的測(cè)試類(lèi)或者測(cè)試函數(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、標(biāo)記可以實(shí)現(xiàn)不跳過(guò)某個(gè)、某些案例的作用

# -*- coding:utf-8 -*-
 
import pytest
 
# skip跳過(guò)執(zhí)行某個(gè)案例
@pytest.mark.skip(reson="只是這個(gè)函數(shù)用例不執(zhí)行")
def test_a():
 
 print("testa")
 
 
def test_b():
 print("testb")
 
 
@pytest.mark.skip(reson="整個(gè)類(lèi)下的案例都不會(huì)執(zhí)行")
class Test_skip():
 def test_a(self):
  print("testa")
 
 def test_b(self):
  print("testb")
 
 
# 可以根據(jù)條件判斷,為真,則不執(zhí)行
@pytest.mark.skipif(1 > 2,reson="整個(gè)類(lèi)下的案例滿(mǎn)足條件都不會(huì)執(zhí)行")
class Test_skipif():
 def test_a(self):
  print("testa")
 
 def test_b(self):
  print("testb")

六、介紹pytest的數(shù)據(jù)參數(shù)化

1、傳入單個(gè)參數(shù)

# pytest的數(shù)據(jù)參數(shù)化
 
# 1、傳入單個(gè)參數(shù)
#
# pytest.mark.parametrize(argnames,argvalues)
# argnames 參數(shù)的名稱(chēng)
#
# argvalues 參數(shù)對(duì)應(yīng)的值,類(lèi)型必須是可迭代的類(lèi)型,一般使用list
 
 
@pytest.mark.skip(reson="只是這個(gè)函數(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"])

實(shí)現(xiàn)的效果name作為參數(shù)的名稱(chēng),這個(gè)案例會(huì)執(zhí)行4次,參數(shù)分別是name=“cui1”\name="cui2"\....

2、傳入多個(gè)參數(shù)

import pytest
 
 
# pytest的數(shù)據(jù)參數(shù)化
 
# 1、傳入多個(gè)參數(shù)
#
# pytest.mark.parametrize((argnames1,argnames2),[(argvalues1,argvalues1),(argvalues1,argvalues1)],(argvalues1,argvalues1)]])
 
 
@pytest.mark.skip(reson="只是這個(gè)函數(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"])

實(shí)現(xiàn)的效果如下

七、介紹pyest的常用第三方插件

1、美化pytest的輸出報(bào)告插件

# pip install pytest-html
 
# 用來(lái)美化輸出報(bào)告的插件
# 只需要在配置文件中加這個(gè)配置即可
#
# addopts=-s --html=report.html

效果

2、失敗案例重試插件,下面的示例實(shí)現(xiàn)的就是失敗重啟3,失敗后間隔2s在進(jìn)行重試

# pip install pytest-rerunfailures
# 失敗重試的第三方插件
# 只需要在配置文件中加這個(gè)配置即
# --reruns 3 --reruns-delay 2

至此,pytest的框架基本使用已經(jīng)講解清楚,小伙伴們還有不清楚的嗎?歡迎大家來(lái)溝通!?。?/p>

到此這篇關(guān)于python單元測(cè)試框架pytest的使用示例的文章就介紹到這了,更多相關(guān)python單元測(cè)試框架pytest內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python基于win32ui模塊創(chuàng)建彈出式菜單示例

    Python基于win32ui模塊創(chuàng)建彈出式菜單示例

    這篇文章主要介紹了Python基于win32ui模塊創(chuàng)建彈出式菜單,結(jié)合實(shí)例形式分析了Python使用win32ui模塊創(chuàng)建彈出式菜單的具體步驟與相關(guān)操作技巧,并附帶說(shuō)明了win32ui模塊的安裝命令,需要的朋友可以參考下
    2018-05-05
  • Python實(shí)現(xiàn)按學(xué)生年齡排序的實(shí)際問(wèn)題詳解

    Python實(shí)現(xiàn)按學(xué)生年齡排序的實(shí)際問(wèn)題詳解

    這篇文章主要給大家介紹了關(guān)于Python實(shí)現(xiàn)按學(xué)生年齡排序?qū)嶋H問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • 解讀什么是npy文件,為什么要用npy格式保存文件

    解讀什么是npy文件,為什么要用npy格式保存文件

    這篇文章主要介紹了什么是npy文件,為什么要用npy格式保存文件這個(gè)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python3利用print輸出帶顏色的彩色字體示例代碼

    Python3利用print輸出帶顏色的彩色字體示例代碼

    用Python寫(xiě)命令行程序的時(shí)候,單一的輸出顏色太單調(diào)了,所以下面這篇文章主要給大家介紹了關(guān)于Python3利用print輸出帶顏色的彩色字體的相關(guān)資料,需要的朋友可以參考下
    2019-04-04
  • Matplotlib實(shí)戰(zhàn)之折線圖繪制詳解

    Matplotlib實(shí)戰(zhàn)之折線圖繪制詳解

    折線圖是一種用于可視化數(shù)據(jù)變化趨勢(shì)的圖表,它可以用于表示任何數(shù)值隨著時(shí)間或類(lèi)別的變化,本文主要介紹了如何利用Matplotlib實(shí)現(xiàn)折線圖的繪制,感興趣的可以了解下
    2023-08-08
  • python在linux環(huán)境下安裝skimage的示例代碼

    python在linux環(huán)境下安裝skimage的示例代碼

    這篇文章主要介紹了python在linux環(huán)境下安裝skimage,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 基于Python獲取照片的GPS位置信息

    基于Python獲取照片的GPS位置信息

    這篇文章主要介紹了基于Python獲取照片的GPS位置信息,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python中的rfind()方法使用詳解

    Python中的rfind()方法使用詳解

    這篇文章主要介紹了Python中的rfind()方法使用詳解,是Python入門(mén)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • python兒童學(xué)游戲編程知識(shí)點(diǎn)總結(jié)

    python兒童學(xué)游戲編程知識(shí)點(diǎn)總結(jié)

    在本文里小編給大家整理了關(guān)于python兒童學(xué)游戲編程知識(shí)點(diǎn)以及內(nèi)容總結(jié),需要的朋友們參考學(xué)習(xí)下。
    2019-06-06
  • Python實(shí)現(xiàn)解析ini配置文件的示例詳解

    Python實(shí)現(xiàn)解析ini配置文件的示例詳解

    在開(kāi)發(fā)過(guò)程中,配置文件是少不了的,而且配置文件是有專(zhuān)門(mén)的格式的,比如:ini,?yaml,?toml?等等。而對(duì)于?Python?而言,也都有相應(yīng)的庫(kù)來(lái)解析相應(yīng)格式的文件,下面我們來(lái)看看?ini?文件要如何解析
    2022-09-09

最新評(píng)論