unittest

1、關於unittest的4個重要概念

(1)test fixture 測試固件:執行前的準備、執行後的清理

(2)test case 測試用例:完整的測試流程,通過繼承unittest的TestCase類,創建新的測試用例

(3)test suite 測試套件:測試用例的集合,將測試用例集合在一起,然後一次性執行集合中的所有測試用例

(4)test runner 測試運行器:執行測試用例,生成測試結果

2、關於 TestCase

TestCase 作爲基類,自定義的子類中實現測試用例的方法,方法名需要以 testxxx 命名

3、重寫TestCase幾個特殊的方法

setUp()     每個測試方法運行前執行,測試前的初始化工作

tearDown()  每個測試方法運行結束後執行,測試後的清理工作

@classMethod
setUpClass()    單元測試的前期準備,在setUp之前執行,並且整個測試只運行一次

@classMethod
tearDownClass()     所有測試方法運行結束後執行,只運行一次
def testxxx1():
    .......

def testxxx2():
    .......

可以用裝飾器忽略某些測試方法

4、構建測試集 TestSuite

構建測試集,有多種方法

4.1

方法1:suite = unittest.TestSuite(列表)

if __name__ == '__main__':
    suite1 = unittest.TestLoader().loadTestsFromTestCase(AClass)
    suite2 = unittest.TestLoader().loadTestsFromTestCase(BClass)
    suite = unittest.TestSuite([suite1,suite2])

4.2

方法2:suite.addTest(類(‘方法’))

TestSuite 實例調用 suite.addTest(…)

優點:通過這種方式,可以指定測試用例的執行順序

缺點:需要手動指定的太多

suite.addTest(…) 傳入的參數是方法

if __name__ == "__main__":
    suite = unittest.TestSuite()
    suite.addTest(MyTest('test_mul'))
    suite.addTest(MyTest('test_add'))
    #.....

4.3

方法3:suite.addTest(unittest.makeSuite(類,‘方法開頭字符串’))

用到 makeSuite 來篩選方法,篩選什麼類、以什麼開頭的方法,然後將篩選出來的方法,傳入suite.addTest(…)中

if __name__ == '__main__':
    suite = unittest.TestSuite()
    for n in range(1,6):
        suite.addTest(unittest.makeSuite(AClass,'aaa'))
        
    # 這樣增加了AClass中,5個以aaa開頭的方法
    # 而且,不需要以 test 開頭

4.4

方法4:批量執行測試模塊(稱爲“測試發現”)

要求:其他定義了測試用例的 .py 文件,以test開頭命名

#加載當前目錄下所有有效的測試模塊,"."表示當前目錄

suite = unittest.TestLoader().discover(".")

5、運行自動化測試

5.1 單個文件的測試用例

這個文件繼承了TestCase,寫了很多 testxxx() 方法,並且想要執行其中的全部 testxxx() 方法

if __name__ == '__main__':
    unittest.main()

5.2 構造測試集,然後執行

suite = .....
runner = ...
runner.run(suite)
5.2.1 TextTestRunner
runner = unittest.TextTestRunner(verbosity=2)
5.2.2 HTMLTestRunner
filename = "C:\\Test.html"
fp = file(filename,"wb")

runner = HTMLTestRunner.HTMLTestRunner(
            stream = fp,
            title = "Report_title",
            description = "Report_description")

runner.run(suite)
fp.close()

或者,指定到當前目錄下

fp = file("./result.html",'w')
runner = HTMLTestRunner(fp,title=u'自動化測試報告')
runner.run(suite)
fp.close()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章