<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      unittest 單元測(cè)試

      Python中有一個(gè)自帶的單元測(cè)試框架是unittest模塊,用它來(lái)做單元測(cè)試,它里面封裝好了一些校驗(yàn)返回的結(jié)果方法和一些用例執(zhí)行前的初始化操作。

      在說(shuō)unittest之前,先說(shuō)幾個(gè)概念:

      • TestCase 也就是測(cè)試用例
      • TestSuite 多個(gè)測(cè)試用例集合在一起,就是TestSuite
      • TestLoader是用來(lái)加載TestCase到TestSuite中的
      • TestRunner是來(lái)執(zhí)行測(cè)試用例的,測(cè)試的結(jié)果會(huì)保存到TestResult實(shí)例中,包括運(yùn)行了多少測(cè)試用例,成功了多少,失敗了多少等信息

      1. unittest的用法

      下面寫(xiě)一個(gè)簡(jiǎn)單的單元測(cè)試用例:

      1 import unittest
      2 def calc(a,b):
      3     return round(a/b,1)
      4 class TestCalc(unittest.TestCase):
      5     def test1(self):  #測(cè)試用例 1
      6         res = calc(1,2)
      7         self.assertEqual(0.5,res,'計(jì)算不正確')  #預(yù)計(jì)結(jié)果與返回res比較,'計(jì)數(shù)不正確',不是必須的
      8 
      9 unittest.main()  #僅用于查看結(jié)果,不能產(chǎn)生報(bào)告

      注意:

      1. 運(yùn)行時(shí),不要選擇Run 'Unittests for ...'這是通過(guò)pycharm自帶的運(yùn)行方式,不會(huì)產(chǎn)生測(cè)試報(bào)告的。

      2. 要點(diǎn)擊菜單欄中的run...(alt + shift + F10) ,選當(dāng)前py文件,以一個(gè)python文件來(lái)運(yùn)行,或者在 Terminal 中運(yùn)行

      3. 在測(cè)試用例里面,函數(shù)名必須以test開(kāi)頭,否則不會(huì)被執(zhí)行的。類(lèi)名無(wú)所謂。

      下面是一些常用的斷言,也就是校驗(yàn)結(jié)果

      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

      為用例添加前置條件和用例的執(zhí)行順序

       1 import unittest
       2 class TestCalc(unittest.TestCase):
       3     def setUp(self):
       4         print('這是setup')
       5     def tearDown(self):
       6         print('這是teardown')
       7     @classmethod
       8     def tearDownClass(cls):
       9         print('這是tearDownClass')
      10     @classmethod
      11     def setUpClass(cls):
      12             print('這是setUpClass')
      13     def testa(self):
      14         print('這是用例testa')
      15     def testb(self):
      16         print('這是用例testb')
      17 
      18 if __name__ == '__main__':
      19     unittest.main()

      運(yùn)行結(jié)果:

      這是setUpClass
      這是setup
      這是用例testa
      這是teardown
      這是setup
      這是用例testb
      這是teardown
      這是tearDownClass
      ..
      ----------------------------------------------------------------------
      Ran 2 tests in 0.000s
      
      OK

      總結(jié):

      • 在每一個(gè)測(cè)試用例前后執(zhí)行def setup(self),def tearDown(self)
      • 在所有用例運(yùn)行前后執(zhí)行def setUpClass(cls),def tearDownClass(cls)
      • 用例執(zhí)行順序:按首字母排序的

      2. 生成測(cè)試報(bào)告

      1) HTMLTestRunner 生成報(bào)告

      那如何生成一個(gè)測(cè)試報(bào)告呢,需要加入另外一個(gè)模塊:HTMLTestRunner。

      下載地址:http://tungwaiyip.info/software/HTMLTestRunner.html

      下載HTMLTestRunner.py,放到python安裝目錄的lib下,使用執(zhí)行測(cè)試用例就會(huì)生成一個(gè)html的測(cè)試報(bào)告,里面會(huì)有每個(gè)測(cè)試用例的執(zhí)行結(jié)果,代碼如下:

       1 import unittest,HTMLTestRunner
       2 def calc(a,b):
       3     return round(a/b,1)
       4 class TestCalc(unittest.TestCase):
       5     def test1(self):
       6         '''用例描述:計(jì)算a/b的正確性'''
       7         res = calc(1,2)
       8         self.assertEqual(0.5,res,'計(jì)算不正確')
       9     def test2(self):
      10         '''用例描述:除數(shù)不能為0'''
      11         res = calc(1,0)
      12         self.assertIsNone(res)    #判斷是不是None,如果是None就通過(guò)
      13 
      14 suite = unittest.TestSuite()    #定義了一個(gè)測(cè)試集合
      15 suite.addTest(unittest.makeSuite(TestCalc)) #把剛才寫(xiě)的用例加到測(cè)試集合,addTests用于py文件,addTest用于類(lèi)
      16 f = open('test.html','wb')
      17 runner = HTMLTestRunner.HTMLTestRunner(f,title='測(cè)試用例標(biāo)題',description='測(cè)試用例描述')
      18 runner.run(suite)    #運(yùn)行用例

      生成的 test.html 測(cè)試報(bào)告如下所示:

       2) BeautifulReport 生成報(bào)告

      手動(dòng)安裝BeautifulReport

      下載地址:https://coding.net/u/pengzhuopeng/p/PythonLearner/git/tree/master/%E5%B7%A5%E5%85%B7?public=true

      切換到BeautifulReport目錄下,執(zhí)行:python setup.py install

       1 import unittest
       2 from BeautifulReport import BeautifulReport as bf
       3 def calc(a,b):
       4     return round(a/b,1)
       5 class TestCalc(unittest.TestCase):
       6     def test1(self):
       7         '''用例描述:計(jì)算a/b的正確性'''
       8         res = calc(1,2)
       9         self.assertEqual(0.5,res,'計(jì)算不正確')
      10     def test2(self):
      11         '''用例描述:除數(shù)不能為0'''
      12         res = calc(1,0)
      13         self.assertIsNone(res)    #判斷是不是None,如果是None就通過(guò)
      14 
      15 suite = unittest.TestSuite()    #定義了一個(gè)測(cè)試集合
      16 suite.addTest(unittest.makeSuite(TestCalc)) #把剛才寫(xiě)的用例加到測(cè)試集合,addTests用于py文件,addTest用于類(lèi)
      17 report = bf(suite)
      18 report.report(filename='test1',description='必填參數(shù),描述',log_path='.')
      19 #log_path、filename不是必填,filename不填默認(rèn)生成文件名為“report.html”,log_path默認(rèn)當(dāng)前路徑,log_path='.'表當(dāng)前路徑

       生成的 test1.html 報(bào)告如下圖所示

       

      posted @ 2018-06-03 12:07  JosephPeng  閱讀(171)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 明溪县| 性做久久久久久久| 免费A级毛片樱桃视频| 中文一区二区视频| 亚洲AV成人片不卡无码| av亚洲一区二区在线| 久爱无码精品免费视频在线观看| 人人妻人人做人人爽| 蜜臀av午夜精品福利| 国产精品久久久久影院老司| 日韩精品一区二区都可以| 超碰成人人人做人人爽| 男女做爰真人视频直播| 久久综合九色综合久桃花| 亚洲av成人无码天堂| 亚洲国产欧美在线观看| 婷婷成人丁香五月综合激情| 377P欧洲日本亚洲大胆| 国产精品ⅴ无码大片在线看| 亚亚洲视频一区二区三区| 国产精品三级中文字幕| 国产色视频一区二区三区qq号| 浪潮av色综合久久天堂| 亚洲夜夜欢一区二区三区| 国产精品va无码一区二区| 国产成人精品亚洲午夜| 国产成人亚洲老熟女精品| 视频二区国产精品职场同事| 99国产精品欧美一区二区三区 | 你拍自拍亚洲一区二区三区| 亚洲综合精品第一页| 长腿校花无力呻吟娇喘| 亚洲人妻精品中文字幕| 久久精品国产99国产精品澳门| 强插少妇视频一区二区三区| 欧美性色黄大片| 亚洲精品久久一区二区三区四区| 男人+高清无码+一区二区| 国产中文字幕精品在线| 久久亚洲精品成人av秋霞| 免费观看又色又爽又黄的崩锅|