閱讀710 返回首頁    go 阿裏雲 go 技術社區[雲棲]


python單元測試之unittest

現在單元測試也要慢慢作正規了。

參考以下貼子作了一次python,

https://www.cnblogs.com/sunshine-blog/p/6735690.html

最終我可是要用django和mock的喲。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

043c28e84dcc92f618869484cfcf0e57c502101f043c28e84dcc92f618869484cfcf0e57c502101f

python unittest四大組成“元件”:

  • test fixture(測試腳手架)——測試代碼的運行環境,指測試準備前和執行後要做的工作,包括setUp()和tearDown();
  • TestCase(測試案例)——所有測試用例的基類,它是軟件測試中最基本的組成單元;
  • TestSuite(測試套件)——測試案例的集合;
  • test runner(執行測試)——測試用例的執行

  (note1:什麼是測試用例? 答:測試用例是一個完整的測試流程,包括測試前準備環境的搭建(setUp),執行測試代碼(run),以及測試後環境的還原(tearDown))

 

unittest測試代碼流程:

  1. 寫好TestCase
  2. 由TestLoader加載TestCase到TestSuite
  3. 然後由TextTestRunner來運行TestSuite,預見性結果保留在TextTestResult中(使用命令行或unittest.main()調用執行)



#!/usr/bin/env python
# -*- coding: utf-8 -*-

import unittest
import myclass

class mytest(unittest.TestCase):
    #初始化工作
    def setUp(self):
        self.tclass = myclass.myclass() #實例化了被測試模塊中的類

    #退出清理工作
    def tearDown(self):
        pass
    
    #具體的測試用例
    def test_sum(self):
        self.assertEqual(self.tclass.sum(1,2), 3)

    #跳過某個case
    @unittest.skip("I don't want to run this case.")
    def test_sub(self):
        self.assertEqual(self.tclass.sub(4, 2), 2)

    def test_multi(self):
        self.assertEqual(self.tclass.multi(2, 3), 5)

if __name__ == '__main__':

    

    #裝載測試用例(該句話等價於tests = [mytest("test_sum"),mytest("test_sub"),mytest("test_multi")])
    tests = unittest.TestLoader().loadTestsFromTestCase(mytest)

    #使用測試套件並打包測試用例(addTests()等價於addTest())
    suite = unittest.TestSuite()
    suite.addTest(tests)

    #保存unittest的測試輸出日誌
    log_name = "log.txt"
    with open(log_name, 'w+') as f:
        result = unittest.TextTestRunner(stream=f, verbosity=2).run(suite)

    #若不保存測試輸出結果,執行如下命令
    result = unittest.TextTestRunner(verbosity=2).run(suite)

    #生成測試報告
    print("testsRun:%s"%result.testsRun)
    print("failures:%s"%len(result.failures))
    print("errors:%s"%len(result.errors))
    print("skipped:%s"%len(result.skipped))
    '''
    unittest.main()
    '''
    

3425c10ac32499f96d2b54d1b64a811ad5fe6558

最後更新:2017-11-14 11:34:03

  上一篇:go  【Work Like Alibaba線下沙龍】“業務為王”時代,DevOps怎麼玩?
  下一篇:go  Redis4.0新特性(三)-PSYNC2