PYTHON unitest模塊

1、 html

Python 的單元測試中,通常一個測試程序文件負責測試 Python 的一個模塊,或者一個模塊中的一個代碼文件。它們常常以 test_somemodule.py 或 testSomeModule.py 的名字命名;通常保存在被測試模塊的一個子目錄 tests 中,也有就保存在該模塊的根目錄的。 python

若是要編寫一個測試程序,須要以 unittest.TestCase 爲基類派生,這樣 unittest 就能夠自動找到這些測試類了。這樣的一個測試類中,凡是以「test」開頭的方法,都是一個測試用例。 app

unittest 會自動統計測試用例的個數,並在最後的測試報告中指出測試成功了幾個,有那些失敗。TestCase 還有兩個頗有用的方法:在每一個測試用例執行以前,寫在 setUp 中的代碼都會被執行,用來初始化測試環境;而 tearDown 中的代碼則負責清除每一個測試用例遺留的垃圾,恢復現場。
curl

import unittest
import commands


class TSCache(object):

    def __init__(self):
        # suit initial
        print "case %s"%self

    def doRequest(self):
        comm = "curl -I -s -x  localhost:8080 http://111111.cn/index.html"
        output = commands.getoutput(comm)
        rt = output.split("\r\n")[0]
        return rt

class TestTSCache(unittest.TestCase):

    #run before every test method
    def setUp(self):
        print 'test before'

    def test_200Code(self):
        active = TSCache().doRequest()
        expect = 'HTTP/1.1 200 OK'
        self.assertEquals(expect,active)


    def test_not404(self):
        active = TSCache().doRequest()
        expect = 'HTTP/1.1 404 OK'
        self.assertNotEquals(expect,active)

    #run after every test mehtod
    def tearDown(self):
        print 'test after'

if __name__ == '__main__':
    #print  dir(TestTSCache)
    unittest.main()


2、運行 單元測試

python xxxx.py 測試

python xxxx.py -v ui

3、結果 url

OK   spa

Fail code

Error

4、assert

類型 功能
assertEqual
assertEquals
assertNotEqual
assertNotEquals
assertAlmostEqual
assertAlmostEquals
assertNotAlmostEqual
assertNotAlmostEquals
assertTrue
assertFalse
assertRaises

說明: #當assertEquals失敗時,會把第一個和第二個參數的值打印出來;#assertFalse和assertTrue不會打印值

3、testsuit

程序的開頭把當前目錄、上一級目錄和子目錄 tests 都放入系統搜尋路徑中。這是爲了 Python 程序 import 模塊代碼和測試代碼時更容易找到它們。緊接着,在當前目錄和子目錄 tests 中搜尋全部測試程序,把它們的列表加入到 modules_to_test 中。suite 方法根據前面定義的列表把全部測試用例都找出來。最後經過調用 unittest 的 testrunner 就能夠啓動咱們的全部測試了,咱們只要稍等一下子,它就會把最終的測試報告放到咱們面前 

import unittest
import sys
import os
import getopt


"""
path = "/home/wb-yinlu/Beryl/study/Module/Cache/123457_cachexample.py"
path = "/home/wb-yinlu/Beryl/study/Module/Cache/*.py"
path = "/home/wb-yinlu/Beryl/study/Module/Cache/"
"""
         
def getcase(path):
    testfiles = []
    if os.path.isdir(path):
        # curdir and subdir insert to suite
        for root, dirs, files in os.walk(path):
            files = [f[:-3] for f in files if f.startswith('1') and f.endswith('.py')]
            if len(files):
                sys.path.append(root)
                testfiles = testfiles + files
    elif os.path.splitext(path)[1]==".py":
        root = os.path.dirname(path) 
        sys.path.append(root)
        if path[-4:] == "*.py":
            # curdir and subdir insert to suite,not inculde subdir
            testfiles = testfiles + [f[:-3] for f in os.listdir(root) if f.startswith('1') and f.endswith('.py')]
        else:
            if os.path.isfile(path):
                # single py file insert to suite
                testfiles = testfiles+[os.path.basename(path)[:-3]]
            else:
                print "the python file is not exist"
                sys.exit(1)
    else:
         print "it is not a dir or a effective python file path"
         sys.exit(1)
    return testfiles
        
def suite(path):
    print "path = %s"%path
    alltests = unittest.TestSuite()
    for module in map(__import__, getcase(path)):
        alltests.addTest(unittest.findTestCases(module))
    return alltests


def usage():
    print "help help help"


if __name__ == '__main__':


    path = os.curdir
    ver= 1


    opts, args = getopt.getopt(sys.argv[1:], "p:hv",["path=","help"])
    for op, value in opts:
        if op == '-p':
            path = value
        elif op == '-v':
            ver=value
        elif op == '-h':
            usage()
            sys.exit(1)
        else:
            pass
     
    #unittest.main(defaultTest='suite')
    runner = unittest.TextTestRunner(verbosity=ver)
    runner.run(suite(path))

4、

運行測試套

一、命令模式 


python -m unittest test_module1 test_module2
python -m unittest test_module.TestClass
python -m unittest test_module.TestClass.test_method
二、main設置
# unittest.main() # 用這個是最簡單的,下面的用法能夠同時測試多個類
# unittest.TextTestRunner(verbosity=2).run(suite1) # 這個等價於上述但可設置verbosity=2,省去了運行時加-v
suite1 = unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions)
suite2 = unittest.TestLoader().loadTestsFromTestCase(TestDictValueFormatFunctions)
suite1 = module1.TheTestSuite()
suite2 = module2.TheTestSuite()
alltests = unittest.TestSuite([suite1, suite2])
unittest.TextTestRunner(verbosity=2).run(suite)
相關文章
相關標籤/搜索