程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python-UnitTest學習筆記

編輯:Python

本文的主要結構
第一部分:UnitTest簡介
第二部分:基本概念的介紹
第三部分:各個概念詳解
第四部分:程序的運行
第五部分:測試報告的輸出

一、UnitTest簡介

UnitTest是Python自帶的測試框架,主要適用於單元測試,並對多個測試用例進行管理和封裝。

二、基本概念介紹

(一)測試用例-testcase
測試用例是測試框架最底層的內容(類似,磚是房子最基本的東西)
每一條用例的設計,和功能用例一樣,可以盡量包含多個測試點
(二)測試固件-testfixture
測試固件=固定的測試代碼(即:測試代碼中相同的部分)
eg:測試一個接口,接口地址可以通過setup()進行初始化,然後各個測試用例直接調用初始化的接口地址就可以了
例如通過teardown()來結束測試工作。
(三)測試套件-testsuit
測試套件吧多個測試用例集合在一起,可以理解為測試用例的集合
(四)測試運行器-testrunner
測試運行器是給測試用例提供運行環境的,通過它的run()方法來執行測試用例,並在執行完後將測試結果輸出。

三、各個概念詳解

(一)測試用例

導入Unittest模塊;
定義一個測試類(繼承unittest.TestCase基類),一個測試用例封裝到一個函數中
一個測試類中可以包含多個測試用例。

(二)測試固件

將重復的代碼放在一起,
起到的作用:減少冗余代碼;便於後期代碼維護
例如上面的登錄檢查,每個用例中都使用到url,
我們可以通過setup()將url進行初始化

 r = requests.post(self.url, json=form)
message = r.json()["message"]
self.assertEqual(message, "成功!")

setUp函數是測試用例的公共部分,類似一個全局變量,供其他函數調用,其他函數不用再重復定義,直接通過變量self.url調用。

(三)測試套件

測試套件主要用來添加測試用例,添加用例的方式,本文主要介紹三種:
1.通過TestSuite()添加用例

def suite():
""" 定義suit()函數,用來返回已經創建好的測試套件實例 :return: """
#調用TestSuite()函數生成一個測試套件實例
suite = unittest.TestSuite()
#使用addTest方法添加單個測試用例
suite.addTest(testSet0Setup("test_set0_0"))
# 使用addTests方法添加多個測試用例
suite.addTests([testSet0Setup("test_set0_1"),testSet0Setup("test_set0_2"),testSet0Setup("test_set0_3")])
return suite

運行代碼

if __name__ =="__main__":
#構建一個運行器對象
runner = unittest.TextTestRunner()
#run()調用suite()構建的測試用例
runner.run(suite())


通過addTest添加用例,適合測試用例比較少的情況,如果用例比較多,可以考慮其他方式。

2.通過makeSuite()添加用例

def suite():
#makeSuite()可以直接表明某個類下面,用例名已test開頭的測試用例添加到測試套件中
suite =unittest.makeSuite(testSet0Setup,"test")
return suite

makeSuite(testSet0Setup,“test”)將testSet0Setup中所有以“test”開頭的測試用例添加到測試套件中
顯然:一行代碼就可以添加所有符合要求的用例
但是:不靈活,只能添加全部

測試用例可以分別從多個文件中取,然後通過TestSuite(suite0,suite1)將多個套件合成一個測試套件實例

def suite():
suite0 =unittest.makeSuite(testSet0Setup,"test")
suite1 = unittest.makeSuite(testSet0, "test")
suite = unittest.TestSuite(suite0,suite1)
return suite

3.通過defaultTestLoader.discover()添加測試覆蓋范圍

(四)測試運行

方式一:
runner = unittest.TextTestRunner()
#run()調用suite()構建的測試用例
runner.run(suite())
方式二:還可以將所有操作都封裝到一個main(),運行unittest.main()即可

(五)測試報告

unittest測試框架是python內置的框架,但是並沒有測試報告輸出,需要下載導入一個第三方模塊HTMLTestRunner,以HTML形式存放測試結果,並會以報告的形式保存。
HTMLTestRunner擴展模塊無法通過pip進行安裝,下載地址如下:
http://tungwaiyip.info/software/HTMLTestRunner.html
將py文件放到python安裝的目錄ilb文件夾下面,由於是基於python2開發,為兼容python3語法,需要將文件進行如下修改:

行號修改前修改後94import StringIOimport io539StringIO.StringIO()io.StringIO()631print >>sys.stderr, ‘\nTime Elapsed: %s’ % (self.stopTime-self.startTime)print(sys.stderr, ‘\nTime Elapsed: %s’ % (self.stopTime-self.startTime))642if not rmap.has_key(cls):if not cls in rmap :766uo = o.decode(‘latin-1’)uo =e772ue = e.decode(‘latin-1’)uo =e778output = saxutils.escape(uo+ue)output = saxutils.escape(str(uo)+str(ue)),

我使用的HTMLTestRunner文件鏈接如下
鏈接: https://pan.baidu.com/s/1vHjiHqaqJkeUWKMl6mwy1g 提取碼: mqen

if __name__ == "__main__":
filepath = "./htmlreport.html"
fp = open(filepath,"wb")
suite = unittest.TestSuite()
suite.addTest(TestAssert("testAssertIn"))
runner = HTMLTestRunner(stream= fp,title= "測試報告",description="期待成功哈")
runner.run(suite)
fp.close()

運行文件可以生成如下報告:

在生成測試報告部分時,遇到不可以生成測試報告的情況,具體解決方法可參考如下文章:
https://blog.csdn.net/qq_44801116/article/details/125444133?spm=1001.2014.3001.5501


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved