1. 程式人生 > 其它 >python自動化之unittest的addTest使用方法總結

python自動化之unittest的addTest使用方法總結

當寫好一個測試類後,呼叫unittest.main()將執行所有的測試用例,為了只執行需要的用例,可以使用TestSuite套件,將指定的單條/多條用例加進來一起執行。
關於TestSuite.addTest()加入用例的方法或者說寫法非常的多,這裡做一個小總結。

先是簡單的測試類,只包含了兩個測試用例供一會載入
沒有加斷言,所以在pycharm下不能以test的方式跑

import unittest

class Unittest_addTest(unittest.TestCase):
    def setUp(self):
        pass
    
    def tearDown
(self): pass @classmethod def setUpClass(cls): pass @classmethod def tearDownClass(cls): pass def test_one(self): print('-----one-----') def test_two(self): print('-----two-----') if __name__ == '__main__': # 執行全部用例
unittest.main()

1、TestSuite與TestResult結合
我個人不太喜歡這種,感覺不是很清晰,TestResult是存測試結果的,TestSuite還提供了需要TestResult引數的run方法。總之正常執行是沒有問題的

    suite = unittest.TestSuite()
    # 格式:類命(用例名)
    suite.addTest(Unittest_addTest('test_one'))
    suite.addTest(Unittest_addTest('test_two'))

    result = unittest.TestResult(
) suite.run(result)

執行結果:
在這裡插入圖片描述
2、TestSuite與TextTestRunner執行器結合
這個就比前一個方法清晰些了,一眼就能看出在跑套件中的用例

    runner = unittest.TextTestRunner()
    suite = unittest.TestSuite()
    # 格式:類命(用例名)
    suite.addTest(Unittest_addTest('test_one'))
    suite.addTest(Unittest_addTest('test_two'))
    result = runner.run(suite)

也可以寫成這種形式:(不太推薦,每個都進行例項化比較麻煩

#用例載入
    case1 = Unittest_addTest("test_one")
    case2 = Unittest_addTest("test_two")
    suite.addTest(case1)
    suite.addTest(case2)

3、TestSuite與TextTestRunner、Testloader載入器結合
基本框架如下:

    suite = unittest.TestSuite()
    loader = unittest.TestLoader()
    runner = unittest.TextTestRunner()
	
	#中間載入指定用例
	
    runner.run(suite)

①通過方法名來載入

# 模組名.類名.方法名
suite.addTest(loader.loadTestsFromName("UnitTest_addTests.Unittest_addTest.test_one"))

前面用的方法都可以細到類中的某條用例,下面是以模組/類名的方式一次性載入各個測試類

②通過測試用例類進行載入

 suite.addTest(loader.loadTestsFromTestCase(Unittest_addTest))

③通過路徑載入
path指定用例所在的目錄
pattern指定檔名,可以按名字字首等查詢,比如
UnitTest*.py, 就是加入所有開頭能與UnitTest匹配上的py檔案中的測試用例

    path = os.path.dirname(os.path.abspath(__file__))
    suite.addTest(loader.discover(path, pattern='UnitTest_addTests.py'))

深入的原理在以後有時間的情況下會繼續補充。