簡單的單元測試unittest實例

unittest是Python中自帶的一個單元測試模塊,經常用它來作單元測試,它裏面封裝了用例的初始化操做和執行,以及返回結果的校驗等操做。html

在學習unittest框架以前須要先了解幾個知識點:python

  • TestCase測試用例
  • TestSuit測試用例集,也就是多個測試用例的集合,稱之爲TestSuit
  • TestLoader加載testcase到testsuit中
  • TestRunner是用來執行測試用例的,將用例的測試結果保存到TestResult中,包括全部測試用例執行以後的統計狀況,成功失敗等等信息

 下面就經過一個具體的例子來看看unittest是怎麼實現的框架

import unittest def cacl(a,b): return a/b class MyTest(unittest.TestCase):#類名須要以大寫字母開頭
    def setUp(self): print("每一個用例執行以前都會執行") def tearDown(self): print("每一個用例執行以後都會執行") @classmethod def setUpClass(cls): print("全部用例執行以前運行") @classmethod#類方法
    def tearDownClass(cls): print("全部用例執行以後運行") def test_a(self): res = cacl(1,2) self._testMethodDoc="正案例"#用於生成報告時用例描述的顯示
        self.assertEqual(0.5,res,'success')#斷言
    def test_b(self): '''反案例'''#用於生成報告是用例描述的第二種顯示方式
        res = cacl(1,2) self.assertNotEqual(0.5, res, 'failed') if __name__ == '__main__': unittest.main()#能夠運行全部以test開頭的用例,用例的執行順序按照test後面的ascii碼值的大小順序,值小的先執行

下面是一些經常使用的斷言單元測試

assertEqual(a, b)     a == b assertNotEqual(a, b) a != b assertTrue(x) bool(x) is True assertFalse(x) bool(x) is False assertIsNone(x) x is None assertIsNotNone(x) x is not None assertIn(a, b) a in b assertNotIn(a, b) a not in b

上面是實現用例執行的一種方式,那如何生成測試報告呢,那就須要引入python的另外一個模塊HtmlTestRunner或者pip源上面下載BeautifulReport擴展包,這兩個模塊都須要本身安裝,執行的測試用例結果以及一些統計信息會記錄到一個html文件中學習

安裝HtmlTestRunner:直接將HTMLTestRunner.py這個文件放在python的環境變量的目錄中便可,任何一個環境變量目錄均可以,lib、site-packages等測試

安裝BeautifulReport:將BeautifulReport文件夾放入site-packages目錄中,這是由於底層框架將目錄信息固定了ui

首先建立TestSuit測試套件測試用例集spa

if __name__ == '__main__': test_suit = unittest.TestSuite()#建立一個用例集合用例套件 #方式1
    test_suit.addTest(MyTest("test_a"))#將類中的一個用例添加到測試集合中 #方式2
    test_suit.addTest(unittest.makeSuite(MyTest))#向測試套件中添加MyTest中全部的用例 #方式3
#若是咱們有不少個模塊,每一個模塊下面都寫了不少python文件,每一個python文件裏面都有測試用例,那怎麼把這個目錄下的用例都執行了呢,就要先找到這個目錄下的全部python文件,而後找到裏面的測試用例,逐個執行,代碼以下:
   all_case = unittest.defaultTestLoader.discover("case","*.py")#獲取case目錄(能夠是相對路徑或者絕對路徑或者目錄名),若是case變成「.」表明當前目錄下的全部文件 # 下全部*.py(支持模糊匹配)文件下的全部用例 [test_suit.addTests(case) for case in all_case]#循環將全部用例添加到測試套件中

 

HTMLTestRunner生成測試報告code

import HTMLTestRunner#引入擴展包
f = open("test.html","wb")#寫報告以前須要先以二進制的寫形式打開文件這樣就不用指定字符集
testrunner = HTMLTestRunner.HTMLTestRunner(stream=f,title="測試集title",description="測試集描述") testrunner.run(test_suit)#執行測試報告並生成測試報告

 

BeautifulReport生成測試報告(這種方式生成的報告更加的美觀)xml

連接:BeautifulReport底層框架的解析以及html報告頁面元素的更改

import BeautifulReport as br#引入包,以後設置一下別名
br = br.BeautifulReport(test_suit)#將用例集加入到對象中
br.report(description="beautifulreport",filename="brtest",log_path="")#執行用例統計結果,並生成測試報告 #filename是測試報告的名稱,log_path能夠指定測試報告的存儲目錄,這個參數可選

 

咱們在後續進行持續集成的時候,要讓代碼自動運行,就會用到Jenkins了,可是上面產生的測試報告都是html格式的,Jenkins不認識,就在Jenkins裏面顯示不出來。那我們就要產生一些Jenkins認識的測試報告,Jenkins認識xml格式的報告,那我們就產生xml格式的唄,就須要用一個新的模塊,xmlrunner,安裝直接 pip install xmlrunner便可,代碼以下:

import xmlrunner runner = xmlrunner.XMLTestRunner(output='report')#指定報告放的目錄
runner.run(test_suite)
相關文章
相關標籤/搜索