前言
說到測試框架,unittest是我最先接觸的自動化測試框架之一了, 而且也是用的時間最長的, unittest框架有很多方法加載用例,讓我們針對不同的項目,不同項目的大小及用例的多少自己選擇加載方式。今天我們就簡單的說說幾種加載方式。
方式1
簡單的實例
1 import unittest 2 3 4 class LoadTest(unittest.TestCase): 5 6 def test_case_01(self): 7 self.assertEqual(1, 1) 8 9 def test_case_02(self): 10 self.assertEqual(2, 1) 11 12 13 if __name__ == '__main__': 14 suit = unittest.TestSuite() 15 suit.addTest(LoadTest('test_case_01')) 16 suit.addTest(LoadTest('test_case_02')) 17 18 runner = unittest.TextTestRunner() 19 runner.run(suit)
# 輸出
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
Process finished with exit code 0
說明
首先我們需要創建一個測試套件suite,其次通過addTest方法添加用例,addTest的參數為單個用例, 比如實例中記載的是LoadTest測試類中的test_case_01 和 02, 我們就按照上述方式傳遞參數。如果加載運行用例的代碼在另一個文件中,我們需要在此文件中導入測試類。
方式2
簡單實例
1 import unittest 2 3 4 class LoadTest(unittest.TestCase): 5 6 def test_case_01(self): 7 self.assertEqual(1, 1) 8 9 def test_case_02(self): 10 self.assertEqual(2, 2) 11 12 13 if __name__ == '__main__': 14 suit = unittest.TestSuite() 15 case_list = [LoadTest('test_case_01'), LoadTest('test_case_02')] 16 suit.addTests(case_list) 17 runner = unittest.TextTestRunner() 18 runner.run(suit)
# 輸出
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
Process finished with exit code 0
說明
方式2是通過同樣的原理加載測試用例的,只不過是一次性加載多個,不需要多次調用addTest方法,我們只需要調用一次addTests方法,加載一個用例組成的序列,相比較而言,第二種比第一種稍微方便那么一點
方式3
簡單實例
1 import unittest 2 3 4 class LoadTest(unittest.TestCase): 5 6 def test_case_01(self): 7 self.assertEqual(1, 1) 8 9 def test_case_02(self): 10 self.assertEqual(2, 2) 11 12 13 if __name__ == '__main__': 14 suit = unittest.TestSuite() # 測試套件 15 loader = unittest.TestLoader() # 用例加載器 16 test_class = loader.loadTestsFromTestCase(LoadTest) # 加載測試類 17 suit.addTest(test_class) # 測試類添加到測試套件中 18 runner = unittest.TextTestRunner() # 用例運行器 19 runner.run(suit) # 運行
# 輸出
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
Process finished with exit code 0
說明
實例是通過創建一個加載器來加載測試用例,可以看到加載器需要加載一個測試類, 不需要像前兩個方式那樣,一個一個加載測試用例,但是如果一個模塊中有多個測試類的情況,我們仍然需要編寫多條加載代碼 test_class = loader.loadTestsFromTestCase(LoadTest) # 加載測試類
方式4
簡單實例
1 import unittest 2 3 4 class LoadTest(unittest.TestCase): 5 6 def test_case_01(self): 7 self.assertEqual(1, 1) 8 9 def test_case_02(self): 10 self.assertEqual(2, 2) 11 12 13 if __name__ == '__main__': 14 pass
1 import unittest 2 import sys 3 sys.path.append('.') 4 import unittest_tc_load 5 6 if __name__ == '__main__': 7 suit = unittest.TestSuite() # 測試套件 8 loader = unittest.TestLoader() # 用例加載器 9 test_module = loader.loadTestsFromModule(unittest_tc_load) # 加載測試類 10 suit.addTest(test_module) # 測試類添加到測試套件中 11 runner = unittest.TextTestRunner() # 用例運行器 12 runner.run(suit) # 運行
說明
這個方式其實是和方式3一樣的原理, 只不過這個方式是直接加載整個測試模塊, 如果測試模塊中含有多個測試類,都將被加載,這樣批量添加測試會很方便,前提是我們需要導入我們測試模塊
方式5
說明
方式5是直接通過在創建測試套件的時候直接把測試模塊添加到測試套件中,看下面的代碼
1 2 loader = unittest.TestLoader() # 用例加載器 3 test_modules = (loader.loadTestsFromModule(unittest_tc_load1), loader.loadTestsFromModule(unittest_tc_load2)) # 加載測試類 4 suit = unittest.TestSuite(tests=test_modules) # 測試套件 5 runner = unittest.TextTestRunner() # 用例運行器 6 runner.run(suit) # 運
unittest_tc_load1和unittest_tc_load2為兩個測試模塊,我們使用這種方式的時候需要先導入這兩個模塊
方式6
簡單實例
1 import unittest 2 3 4 class LoadTest(unittest.TestCase): 5 6 def test_case_01(self): 7 self.assertEqual(1, 1) 8 9 def test_case_02(self): 10 self.assertEqual(2, 2) 11 12 13 if __name__ == '__main__': 14 suite = unittest.makeSuite(LoadTest) 15 runner = unittest.TextTestRunner() 16 runner.run(suite)
# 輸出
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
Process finished with exit code 0
說明
方式6的方法同樣只能加載一個測試類,但是相比前面幾種方法,代碼少了很多,同樣,如果運行多個測試類仍然需要創建多個suite
方式7
簡單實例
1 import unittest 2 3 4 class LoadTest(unittest.TestCase): 5 6 def test_case_01(self): 7 self.assertEqual(1, 1) 8 9 def test_case_02(self): 10 self.assertEqual(2, 2) 11 12 13 if __name__ == '__main__': 14 discover = unittest.defaultTestLoader.discover(start_dir='.', pattern='unittest*.py') 15 runner = unittest.TextTestRunner() 16 runner.run(discover)
# 輸出
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
Process finished with exit code 0
說明
方式7通過defaultTestLoader.discover()方法來發現用例,我們可以看到第一個參數start_dir 表示用例的目錄, pattern 表示匹配什么樣的文件搜索測試用例,比較上面幾種方法,個人認為這種方法是最靈活的,我們可以通過規范測試模塊文件的命名,使用這種方式一次性加載所有的用例
總結
大概方法差不多就這些,其實還有很多其他加載方法, 比如通過TestLoader方法加載用例,我們可以看到他其他加載用例的方法。
最后呢還是需要根據個人實際中的一個需求選擇不同的方法, 正確的方法往往會事半功倍。