第十五單元 Python單元測試之unittest

一、單元測試、集成測試、功能測試

單元測試

顆粒度最小,一般由開發(fā)小組采用白盒方式來測試,主要測試單元是否符合“設(shè)計”;是指對軟件中的最小可測試單元進行檢查和驗證

集成測試

介于單元測試和系統(tǒng)測試之間,一般由開發(fā)小組采用白盒+黑盒的方法來測試,即驗證“設(shè)計”又驗證“需求”。主要用來測試模板與模板之間的接口,同時還要測試一些主要的業(yè)務(wù)功能。

功能測試

顆粒度最大,一般由獨立的測試小組采用黑盒的方式來測試,主要測試系統(tǒng)是否符合“需求規(guī)格說明書

白盒測試

主要應(yīng)用于單元測試階段,主要是對代碼級別的測試,針對程序內(nèi)部的邏輯結(jié)構(gòu)

黑盒測試

測試系統(tǒng)的功能是否滿足“需求規(guī)格說明書

二、Unittest重要組成

TestFixture

作用:用于一個測試環(huán)境的準(zhǔn)備和銷毀還原

功能:當(dāng)測試用例每次執(zhí)行之前需要準(zhǔn)備測試環(huán)境,每次測試完成后還原測試環(huán)境

主要方法:

setUp():準(zhǔn)備環(huán)境,執(zhí)行每個測試用例的前置條件;

tearDown():環(huán)境還原,執(zhí)行每個測試用例的后置條件;

setUpClass():必須使用@classmethod裝飾器,所有case執(zhí)行的前置條件,只運行一次;

tearDownClass():必須使用@classmethod裝飾器,所有case運行完后只運行一次;

TestCase:測試用例

定義:一個類class繼承 unittest.TestCase,就是一個測試用例

測試用例:就是一個完整的測試流程

包括測試前準(zhǔn)備環(huán)境的搭建(setUp),執(zhí)行測試代碼(run),以及測試后環(huán)境的還原(tearDown)

測試用例命名規(guī)則

測試方法的名稱要以test開頭。只會執(zhí)行以test開頭定義的方法

TestSuite:測試套件

可以將多個測試用例集合在一起,能一起執(zhí)行選中的測試用例

suite=unittest.TestSuite()#創(chuàng)建測試套件

case_list=[“test1”,”test2”….]

For caseincase_list:

?? suite.addTest(類名(case))



?? 案例:

if__name__=='__main__':

# unittest.main

suite=unittest.TestSuite()

caseList=["test001","test002"]

forcaseincaseList:

? ? ? ? ? ? ? ? ?? suite.addTest(UnitTestTwo(case))

# 運行測試用例

runner=unittest.TextTestRunner(verbosity=2)

? ? ? ? ? ? ?? runner.run(suite)

TextRunner:執(zhí)行測試用例

runner=unittest.TextTestRunner(verbosity=2)

runner.run(suite)

verbosity:表示測試報告信息的詳細(xì)程度,一共三個值,默認(rèn)是2

0(靜默模式):你只能獲得總的測試用例數(shù)和總的結(jié)果,如:總共100個失敗10成功90

1(默認(rèn)模式):類似靜默模式,只是在每個成功的用例前面有個.每個失敗的用例前面有個F

2(詳細(xì)模式):測試結(jié)果會顯示每個測試用例的所有相關(guān)的信息三

三、斷言

斷言:驗證預(yù)期結(jié)果和實際結(jié)果

assertEqual(a,b):斷言a和b是否相等,相等則測試用例通過。

assertNotEqual(a,b):斷言a和b是否相等,不相等則測試用例通過。

assertTrue(x):斷言x是否True,是True則測試用例通過。

assertFalse(x):斷言x是否False,是False則測試用例通過。

assertIs(a,b):斷言a是否是b,是則測試用例通過。

assertNotIs(a,b):斷言a是否是b,不是則測試用例通過。

assertIsNone(x):斷言x是否None,是None則測試用例通過。

assertIsNotNone(x):斷言x是否None,不是None則測試用例通過。

assertIn(a,b):斷言a是否在b中,在b中則測試用例通過。

assertNotIn(a,b):斷言a是否在b中,不在b中則測試用例通過。

assertIsInstance(a,b):斷言a是是b的一個實例,是則測試用例通過。

assertNotIsInstance(a,b):斷言a是是b的一個實例,不是則測試用例通過。

四.生成測試報告

過程:先創(chuàng)建開發(fā)和測試的包→拷貝開發(fā)代碼、對開發(fā)代碼測試→將HTMLTestRunner.py拷貝到項目中→進行生成測試報告

withopen("../report.html","wb")asf:

HTMLTestRunner(

stream=f,

title="單元測試",

description="測試一期",

verbosity=2

).run(suite)

stream:指定輸出的方式

description:報告中要顯示的面熟信息

title:測試報告的標(biāo)題

verbosity :表示測試報告信息的詳細(xì)程度,一共三個值,默認(rèn)是2

0 (靜默模式):你只能獲得總的測試用例數(shù)和總的結(jié)果,如:總共100個 失敗10 成功90

1 (默認(rèn)模式):類似靜默模式,只是在每個成功的用例前面有個. 每個失敗的用例前面有個F

2 (詳細(xì)模式):測試結(jié)果會顯示每個測試用例的所有相關(guān)的信息

五、讀取xml文件

創(chuàng)建xml文件→在xml文件中輸入數(shù)據(jù)→讀取

讀?。?/p>

fromxml.domimportminidom

classReadxml():

defread_xml(self,filename,onename,twoname):

root=minidom.parse(filename)

firstnode=root.getElementsByTagName(onename)[0]

secondnode=firstnode.getElementsByTagName(twoname)[0].firstChild.data

returnsecondnode

r=Readxml()

print(r.read_xml('../data/xmltestdata.xml','add','add3'))

六、讀取csv文件

創(chuàng)建一個csv文件→創(chuàng)建讀csv文件的文件→進行讀取

導(dǎo)入csv文件

importcsv#導(dǎo)入csv模塊

classReadCsv():

defread_csv(self):

item=[]#定義一個空列表

c=csv.reader(open("../commonDemo/test1.csv","r"))#得到csv文件對象

forcsv_iinc:

item.append(csv_i)#將獲取的數(shù)據(jù)添加到列表中

returnitem


r=ReadCsv()

print(r.read_csv())

十八單元 自動化持

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容